结构的定义指针
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}