go struct 结构体
来源:原创
时间:2019-03-06
作者:脚本小站
分类:GoLang
结构体定义与赋值:
package main import "fmt" type Student struct { id int name string sex byte age int addr string } func main() { // 初始化并赋值,且每个元素都要赋值 var s1 Student = Student{1, "aaa", 'm', 18, "bbbbbb"} fmt.Println(s1) // 指定成员赋值,其他的成员为0 s2 := Student{name: "ddd", addr: "dedede"} fmt.Println(s2) }
指针结构体:
package main import "fmt" type Student struct { id int name string sex byte age int addr string } func main() { // 定义个指针,值为取地址的结构体 var s1 *Student = &Student{1, "aaa", 'm', 18, "bbbbbb"} fmt.Println(s1) s2 := &Student{name: "ddd", addr: "dedede"} fmt.Println(s2) }
结构体的使用:
package main import "fmt" type Student struct { id int name string sex byte age int addr string } func main() { var s Student s.id = 1 s.name = "hello" s.sex = 'm' s.age = 20 s.addr = "hhhhhhh" fmt.Println(s) }
指针结构体:
package main import "fmt" type Student struct { id int name string sex byte age int addr string } func main() { var s Student var p *Student p = &s // 通过指针操作成员,p.id 和 (*p).id p.id = 1 (*p).name = "haha" p.sex = 'm' p.age = 18 p.addr = "demo" fmt.Println(p) // 通过new()来申请指针结构体,new()返回的是一个内存地址 p1 := new(Student) p1.name = "haha" p1.sex = 'm' p1.age = 18 p1.addr = "demo" fmt.Println(p1) }
结构体比较:
package main import "fmt" type Student struct { id int name string sex byte age int addr string } func main() { // 结构体比较 var s1 Student = Student{1, "aaa", 'm', 18, "bbb"} var s2 Student = Student{1, "aaa", 'm', 18, "bbb"} var s3 Student = Student{1, "aaa", 'm', 18, "ccc"} fmt.Println(s1 == s2) // true fmt.Println(s2 == s3) // false // 相同结构体可以赋值 var temp Student temp = s3 fmt.Println(temp) }
结构体做函数参数:值传递
package main import "fmt" type Student struct { id int name string sex byte age int addr string } func demo(s Student) { s.id = 666 fmt.Println(s) } func main() { var s1 Student = Student{1, "aaa", 'm', 18, "bbb"} demo(s1) fmt.Println(s1) }
结构体做函数参数:引用传递
package main import "fmt" type Student struct { id int name string sex byte age int addr string } // 形参指针 func demo(s *Student) { s.id = 666 fmt.Println(s) } func main() { var s1 Student = Student{1, "aaa", 'm', 18, "bbb"} demo(&s1) // 引用传递,地址传递 fmt.Println(s1) }
可见性:结构体、函数名、类型名首字母必须要大写才能被其他包调用,如果首字母小写只能在同一个包中使用。