這是一個建立於 的文章,其中的資訊可能已經有所發展或是發生改變。
跟C語言或其它語言一樣,也有結構體struct。C語言中用關鍵詞typedef來給結構體定義,Go中用的都是type。
struct文法格式
type typeName struct {...}
例如:
type person struct { name string age int}
struct聲明
var P personP.name = "Sun"P.age = 30//也可以P := peron{"Sun", 30}//通過 field:value 的方式初始化,這樣可以任意順序P := person{age:29, name:"Sun"}
上面有三種聲明的方法,其中第三種比較特殊,是Go專屬的聲明。
struct的匿名欄位
匿名欄位也稱為嵌入欄位,C語言中也有這個功能,但是再Go中它比C更強大,更自由。
package mainimport "fmt"type Course []stringtype Student struct { name string age int32 grade string}type Class struct { Student // 匿名欄位,struct Course // 匿名欄位,自訂的類型 int32 // 內建類型作為匿名欄位 teacher string}func main() { stu1 := Class{Student: Student{"Rob", 10, "4年紀"}, teacher: "杰倫"} //修改Course欄位 stu1.Course = make([]string, 5) stu1.Course[0] = "English" stu1.Course = append(stu1.Course, "Chinsese") //修改匿名內建類型欄位 stu1.int32 = 4 fmt.Print(stu1)}
輸出:
{{Rob 10 4年紀} [English Chinsese] 4 杰倫}
上面的例子,可以看出Go中的struct不僅可以將struct作為匿名欄位,用type自定的類型以及內建的類型都可以作為匿名欄位。這點比C語言要強大自由多了。