💬
goのテストでjsonデータを読み込む時の注意
背景
自分がgoでjsonのファイルを読みこむときにうまく読み込みことができなかったので、メモを残しておきます。
型をしっかり定義することが重要である。
まずは以下の例を見ていただきたいです。
model.go
type Product struct {
*model.Product
User *model.ProductType
}
main.go
func main() {
var product *model.Product
pro, _ := os.ReadFile("./create_product_payloal/succsess/config.json")
if err := json.Unmarshal(pro, &product); err != nil {
fmt.Print(err)
}
fmt.Print(product.Product)
}
[result]
null
これだとnull
になってしまいます。理由は、productの型を定義していないからです。他に影響が出ないのであれば、元の型を修正すれば良いのですが、修正することで他にも影響が出てしまう可能性もあります。こういった時に次のようにします。
model.go
type Product struct {
*model.Product
User *model.ProductType
}
main.go
type TypeProduct struct {
Product *model.Product
User *model.ProductType
}
func main() {
var typeProduct *TypeProduct
pro, _ := os.ReadFile("./create_product_payloal/succsess/config.json")
if err := json.Unmarshal(pro, &typeProduct); err != nil {
fmt.Print(err)
}
product := &model.product{
Product: typeProduct.Product,
User: typeProduct.User,
}
fmt.Print(product.Product)
}
[result]
{id name、、、、、}
上記のように、jsonデータを受け取る型を用意します。その後に元々ある型を持っている変数を用意してそこに代入します。これで、元の型で値を扱えるようになりました。
いかがだったでしょうか。あまり使い道はなさそうですが、誰かの役に立てば幸いです。
Discussion