結構的定義指針
package main import ( "fmt" ) type Person struct { //結構也是一中類型 Name string //定義struct的屬性 Age int } func main() { a := Person{} a.Name = "joe" //對struct的屬性進行操做,類型與class的使用方法 a.Age = 19 fmt.Println(a) }
字面值初始化code
package main import ( "fmt" ) type Person struct { Name string Age int } func main() { a := Person{ Name: "jack", Age: 19, //對結構的屬性進行字面值的初始化 } fmt.Println(a) }
結構的傳遞繼承
package main import ( "fmt" ) type Person struct { Name string Age int } func main() { a := Person{ Name: "jack", Age: 19, //對結構的屬性進行字面值的初始化 } fmt.Println(a) A(a) fmt.Println(a) //結構也是一種值類型,對它進行傳遞的時候,也是進行了值得拷貝 } func A(per Person) { per.Age = 13 fmt.Println("A", per) } PS G:\mygo\src\mytest> go run .\temp.go {jack 19} A {jack 13} {jack 19}
package main import ( "fmt" ) type Person struct { Name string Age int } func main() { a := Person{ Name: "jack", Age: 19, //對結構的屬性進行字面值的初始化 } fmt.Println(a) A(&a) fmt.Println(a) //結構也是一種值類型,對它進行傳遞的時候,也是進行了值得拷貝 } func A(per *Person) { //經過一個指針進行傳遞,此時就不是值得拷貝了 per.Age = 13 fmt.Println("A", per) } PS G:\mygo\src\mytest> go run .\temp.go {jack 19} A &{jack 13} {jack 13}
package main import ( "fmt" ) type Person struct { Name string Age int } func main() { a := &Person{ Name: "jack", Age: 19, //此時初始化的時候就將這個struct的指針取出來 } //在進行struct的初始化的時候,就加上&取地址符號 fmt.Println(a) A(a) B(a) fmt.Println(a) //結構也是一種值類型,對它進行傳遞的時候,也是進行了值得拷貝 } func A(per *Person) { //經過一個指針進行傳遞,此時就不是值得拷貝了 per.Age = 13 fmt.Println("A", per) } func B(per *Person) { //經過一個指針進行傳遞,此時就不是值得拷貝了 per.Age = 15 fmt.Println("B", per) } PS G:\mygo\src\mytest> go run .\temp.go &{jack 19} A &{jack 13} B &{jack 15} &{jack 15}
匿名結構string
package main import ( "fmt" ) func main() { a := &struct { //匿名結構,須要先對結構自己進行一個定義 Name string Age int }{ Name: "jack", Age: 20, } fmt.Println(a) }
匿名結構的嵌套it
package main import ( "fmt" ) type Person struct { Name string Age int Contact struct { Phone, City string //匿名結構嵌套在Person中 } } func main() { a := Person{Name: "Jack", Age: 20} a.Contact.Phone = "123321" //經過這種方法對嵌套在Person中的匿名結構進行字面值的初始化 a.Contact.City = "BeiJing" fmt.Println(a) } PS G:\mygo\src\mytest> go run .\temp2.go {Jack 20 {123321 BeiJing}}
匿名字段class
package main import ( "fmt" ) type Person struct { string //匿名字段 在進行字面值初始化的時候 必須嚴格按照字段聲明的順序 int } func main() { a := Person{"Jack", 20} //此時將string 和 int類型對調的時候就會報錯 fmt.Println(a) }
結構相同類型的比較test
package main import ( "fmt" ) type Person struct { Name string Age int } func main() { a := Person{Name: "Jack", Age: 20} b := Person{Name: "Jack", Age: 20} fmt.Println(a == b) } PS G:\mygo\src\mytest> go run .\temp3.go true
嵌入結構import
package main import ( "fmt" ) type human struct { Sex int } type teacher struct { human Name string Age int } type student struct { human //這裏的human也是一種類型,此時它至關於一種匿名字段,嵌入結構做爲匿名字段的話 //它本質上是將結構名稱做爲咱們的字段名稱 Name string Age int } func main() { a := teacher{Name: "Jack", Age: 20, human: human{Sex: 0}} //所以咱們須要在這裏進行這種初始化 b := student{Name: "Tom", Age: 19, human: human{Sex: 1}} a.Name = "Fack" a.Age = 13 a.human.Sex = 100 //保留這種調用的方法,是由於會涉及到名稱的衝突 //a.Sex = 101 這種寫法也是能夠的 fmt.Println(a, b) } PS G:\mygo\src\mytest> go run .\temp3.go {{100} Fack 13} {{1} Tom 19}