标签:案例 ring 值类型 style 注意事项 不同 src image int
package main import ( "fmt" ) //定义一个Cat结构体,将Cat的各个字段/属性信息,放入到Cat结构体进行管理 type Cat struct { Name string Age int Color string Hobby string Scores [3]int // 字段是数组... } func main() { // 张老太养了20只猫猫:一只名字叫小白,今年3岁,白色。还有一只叫小花, // 今年100岁,花色。请编写一个程序,当用户输入小猫的名字时,就显示该猫的名字, // 年龄,颜色。如果用户输入的小猫名错误,则显示 张老太没有这只猫猫。 //1. 使用变量的处理 // var cat1Name string = "小白" // var cat1Age int = 3 // var cat1Color string = "白色" // var cat2Name string = "小花" // var cat2Age int = 100 // var cat2Color string = "花色" //2. 使用数组解决 // var catNames [2]string = [...]string{"小白", "小花"} // var catAges [2]int = [...]int{3, 100} // var catColors [2]string = [...]string{"白色", "花色"} // //... map[string]string //3. 使用struct来完成案例 // 创建一个Cat的变量 var cat1 Cat // var a int fmt.Printf("cat1的地址=%p\n", &cat1) cat1.Name = "小白" cat1.Age = 3 cat1.Color = "白色" cat1.Hobby = "吃<?)))><<" fmt.Println("cat1=", cat1) fmt.Println("猫猫的信息如下:") fmt.Println("name=", cat1.Name) fmt.Println("Age=", cat1.Age) fmt.Println("color=", cat1.Color) fmt.Println("hobby=", cat1.Hobby) }
package main import ( "fmt" ) //如果结构体的字段类型是: 指针,slice,和map的零值都是 nil ,即还没有分配空间 //如果需要使用这样的字段,需要先make,才能使用. type Person struct { Name string Age int Scores [5]float64 ptr *int //指针 slice []int //切片 map1 map[string]string //map } type Monster struct { Name string Age int } func main() { //定义结构体变量 var p1 Person fmt.Println(p1) //{ 0 [0 0 0 0 0] <nil> [] map[]} //都是nil,显示不一样而已 if p1.ptr == nil { fmt.Println("ok1") //ok1 } if p1.slice == nil { fmt.Println("ok2") //ok2 } if p1.map1 == nil { fmt.Println("ok3") //ok3 } //使用slice, 再次说明,一定要make p1.slice = make([]int, 10) p1.slice[0] = 100 //ok //使用map, 一定要先make p1.map1 = make(map[string]string) p1.map1["key1"] = "tom~" fmt.Println(p1) //不同结构体变量的字段是独立,互不影响,一个结构体变量字段的更改, //不影响另外一个, 结构体是值类型 var monster1 Monster monster1.Name = "牛魔王" monster1.Age = 500 monster2 := monster1 //结构体是值类型,默认为值拷贝 monster2.Name = "青牛精" fmt.Println("monster1=", monster1) //monster1= {牛魔王 500} fmt.Println("monster2=", monster2) //monster2= {青牛精 500} }
package main import ( "fmt" ) type Person struct { Name string Age int } func main() { //方式1 //先声明再给字段赋值 //方式2 p2 := Person{"mary", 20} // p2.Name = "tom" // p2.Age = 18 fmt.Println(p2) //方式3-& //案例: var person *Person = new (Person) var p3 *Person = new(Person) //因为p3是一个指针,因此标准的给字段赋值方式 //(*p3).Name = "smith" 也可以这样写 p3.Name = "smith" //原因: go的设计者 为了程序员使用方便,底层会对 p3.Name = "smith" 进行处理 //会给 p3 加上 取值运算 (*p3).Name = "smith" (*p3).Name = "smith" p3.Name = "john" // (*p3).Age = 30 p3.Age = 100 fmt.Println(*p3) //方式4-{} //案例: var person *Person = &Person{} //下面的语句,也可以直接给字符赋值 //var person *Person = &Person{"mary", 60} var person *Person = &Person{} //因为person 是一个指针,因此标准的访问字段的方法 // (*person).Name = "scott" // go的设计者为了程序员使用方便,也可以 person.Name = "scott" // 原因和上面一样,底层会对 person.Name = "scott" 进行处理, 会加上 (*person) (*person).Name = "scott" person.Name = "scott~~" (*person).Age = 88 person.Age = 10 fmt.Println(*person) }
package main import ( "fmt" ) type Person struct { Name string Age int } func main() { var p1 Person p1.Age = 10 p1.Name = "小明" var p2 *Person = &p1 //这里是关键-->画出示意图 fmt.Println((*p2).Age) fmt.Println(p2.Age) p2.Name = "tom~" fmt.Printf("p2.Name=%v p1.Name=%v \n", p2.Name, p1.Name) // tom~ tom~ fmt.Printf("p2.Name=%v p1.Name=%v \n", (*p2).Name, p1.Name) // tom~ tom~ fmt.Printf("p1的地址%p\n", &p1) //p1的地址0xc000004460 fmt.Printf("p2的地址%p p2的值%p\n", &p2, p2) //p2的地址0xc000006028 p2的值0xc000004460 }
标签:案例 ring 值类型 style 注意事项 不同 src image int
原文地址:https://www.cnblogs.com/yzg-14/p/12230144.html