💬

goのテストでjsonデータを読み込む時の注意

2022/08/08に公開

背景

自分が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