#Goメモ
#sliceの分割
package main
import "fmt"
func main() {
a := []int{1, 2, 3}
b := []int{4, 5, 6}
c := append(a, b...)
fmt.Printf("%#v", c)
}
#slice、map、channelはポインタで配列は値
詳しくはこちらを見てください。
#JSONのエンコードとデコード
json:"foo"
のようなフィールドタグはvscode-goではGo: Add Tags To Struct Fieldsを使うと自動で付与することができます。
package main
import (
"encoding/json"
"fmt"
"log"
)
type Meta struct {
Foo string `json:"foo"`
// `json:"-"`にするとエンコード時に結果に反映されない
Bar string `json:"bar"`
}
type Item struct {
Name string `json:"name"`
Price int `json:"price"`
Meta Meta `json:"meta"`
}
func main() {
items := []Item{
{
Name: "name1",
Price: 11,
Meta: Meta{
Foo: "foo",
Bar: "bar",
},
},
{
Name: "name2",
Price: 23,
Meta: Meta{
Foo: "foo",
Bar: "bar",
},
},
}
resultString, err := json.Marshal(items)
if err != nil {
log.Fatal(err)
}
// [{"name":"name1","price":11,"meta":{"foo":"foo","bar":"bar"}},{"name":"name2","price":23,"meta":{"foo":"foo","bar":"bar"}}]
fmt.Println(string(resultString))
resultStruct := []Item{}
if err := json.Unmarshal(resultString, &resultStruct); err != nil {
log.Fatal(err)
}
// []main.Item{main.Item{Name:"name1", Price:11, Meta:main.Meta{Foo:"foo", Bar:"bar"}}, main.Item{Name:"name2", Price:23, Meta:main.Meta{Foo:"foo", Bar:"bar"}}}
fmt.Printf("%#v", resultStruct)
}