這是一個建立於 的文章,其中的資訊可能已經有所發展或是發生改變。
package mainimport "fmt"func main() { //建立對象,通過.方式進行初始化 a := person{} a.name = "wyf" a.age = 30 fmt.Println(a) //建立對象,通過類似構造的方式進行初始化 b := person{ name: "wyff", age: 300, } fmt.Println(b) //值傳遞 A(b) fmt.Println(b) //person引用傳遞 fmt.Println("-------引用地址傳遞--------") B(&b) fmt.Println(b) fmt.Println("-------初始化一個引用地址類型--------") r := &person{ name: "xxx", age: 100, } fmt.Println(r) B(r) fmt.Println(r) fmt.Println("-------匿名結構--------") ll := struct { name string age int }{ name: "yyy", age: 19, } fmt.Println(ll) fmt.Println("-------嵌套匿名--------") oo := stu{name: "bbbb", age: 300} oo.stu1.city = "bj" oo.stu1.phone = "1356" fmt.Println(oo) fmt.Println("-------匿名欄位--------") mm := gra{"hhh", 90} fmt.Println(mm) fmt.Println("-------相互賦值--------") pp1 := person{name: "bbbb", age: 300} pp2 := person{name: "bbbb", age: 300} fmt.Println(pp1 == pp2) pp3 := pp2 fmt.Println(pp3)}type person struct { name string age int}type gra struct { string int}type stu struct { name string age int stu1 struct { phone, city string }}func B(per *person) { per.age = 13 fmt.Println("per", per)}func A(per person) { per.age = 13 fmt.Println("per", per)}
{wyf 30}{wyff 300}per {wyff 13}{wyff 300}-------引用地址傳遞--------per &{wyff 13}{wyff 13}-------初始化一個引用地址類型--------&{xxx 100}per &{xxx 13}&{xxx 13}-------匿名結構--------{yyy 19}-------嵌套匿名--------{bbbb 300 {1356 bj}}-------匿名欄位--------{hhh 90}-------相互賦值--------true{bbbb 300}
組合類別型
package mainimport "fmt"func main() { a := teacher{name: "teacher"} a.human.sex = 1 b := student{name: "student"} b.human.sex = 2 fmt.Println(a, b) //將human當做一個普通的欄位 c := teacher{name: "teacher", human: human{sex: 1}} d := student{name: "student", human: human{sex: 2}} fmt.Println(c, d) c.name = "tea" d.name = "stu" fmt.Println(c, d)}type teacher struct { human name string}type student struct { human name string}//組合類別型,類似於java裡面的繼承type human struct { sex int}
{{1} teacher} {{2} student}{{1} teacher} {{2} student}{{1} tea} {{2} stu}
對象的方法
package mainimport "fmt"func main() { a := teacher{} a.Print() b := stu{} b.Print()}//對象的方法定義一個接收者func (a teacher) Print() { fmt.Println("teacher的方法")}func (b stu) Print() { fmt.Println("student的方法")}type teacher struct { name string}type stu struct { name string}
teacher的方法student的方法
對象的方法的地址值傳遞
package mainimport "fmt"func main() { a := teacher{} a.Print() fmt.Println(a.name) b := stu{} b.Print() fmt.Println(b.name)}//對象的方法引用傳遞func (a *teacher) Print() { a.name = "aaa" fmt.Println("teacher的方法")}func (b stu) Print() { b.name = "bbb" fmt.Println("student的方法") fmt.Println(b.name)}type teacher struct { name string}type stu struct { name string}
小例子
teacher的方法aaastudent的方法bbb這裡輸出Null 字元串
package mainimport "fmt"func main() { var a TZ a.print() (*TZ).print(&a)}//int類型的TZtype TZ intfunc (tz *TZ) print() { fmt.Println("TZ")}
TZTZ