ประเภทข้อมูล struct แบบไม่มีชื่อ

ใน Go เราสามารถสร้าง type ใหม่ด้วย struct ซึ่งเป็นการเอา type อื่นมาประกอบเป็นเป็น field ย่อยๆใน struct ตัวอย่าง type ใหม่เช่น

type Employee struct {
        Firstname string
        Lastname  string
}

เมื่อได้ type ใหม่ชื่อ Employee เราก็เอามันไปสร้างตัวแปรเก็บข้อมูล Employee ได้ปกติเหมือน type อื่น เช่น

e := Employee { Firstname: "Weerasak", Lastname: "Chongnguluam" }

ทีนี้ ในบางกรณี เราไม่ได้ต้องการจะเอา type ที่มีโครงสร้าง field แบบนี้ ไปใช้ที่อื่น เราใช้ครั้งเดียว เช่นกรณีการแกะข้อมูลจาก Request Body ของ HTTP Request การส่งข้อไปให้ template หรือ การใช้ empty struct สำหรับส่งสัญญาณระหว่าง channel เราสามารถสร้างตัวแปรของ struct ที่กำหนด fields ต่างๆได้เลย โดยไม่ต้องสร้าง type แบบระบุชื่อมาก่อน เช่น

var reqBody struct {
        ID        string `json:"id"`
        Firstname string `json:"firstname"`
        Lastname  string `json:"lastname"`
}

เราก็เอาตัวแปรนี้ไปใช้ json.Unmarshal หรือใช้ json Decoder ช่วยแกะข้อมูล request body มาเป็น struct ได้แบบนี้

json.NewDecoder(r.Body).Decode(&reqBody)

อีกตัวอย่างคือ empty struct เคยยกตัวอย่างไว้แล้วที่ post นี้ครับ http://golang.in.th/2015/05/06/empty-struct/