一 结构体的相关学习
go语言的结构体学习起来是比较简单的,下面按照顺序去看即可。
package main
import "fmt"
// 普通变量的声明有var关键字,结构体内部不需要var
type Student struct {
id int
name string
sex byte
age int
addr string
}
func main(){
// 1. 结构体的初始化
// 1.1 结构体普通变量初始化
// 1)顺序初始化,每个成员必须赋值
var s1 Student = Student{1, "mm", 'm', 11, "gz"}
fmt.Println("s1 = ", s1)
// 2)指定成员初始化,没有赋值的自动按照类型赋默认值
s2 := Student{id:1, name: "gg"}
fmt.Println("s2 = ", s2)
// 1.2 结构体指针变量初始化
// 1)顺序初始化,每个成员必须赋值,但是需要加上&。
var s3 *Student = &Student{2, "mm", 'm', 11, "gz"}
fmt.Println("s3 = ", s3)
// 2)指定成员初始化,没有赋值的自动按照类型赋默认值
s4 := &Student{id:1, name: "hh"}
fmt.Println("s4 = ", s4)
// 2. 结构体成员的使用
// 2.1 普通变量的使用
var s5 Student
s5.id = 100
s5.name = "hc"
s5.sex = 'w'
s5.age = 18
s5.addr = "jm"
fmt.Println("s5 = ", s5)
// 2.2 指针变量的使用
// go中的指针调用成员变量都是使用点(.),p.id和(*p).id是完全一样的,不存在C的->
var s6 Student
var p *Student
p = &s6
p.id = 11
(*p).name = "lqq"
p.sex = 'w'
p.age = 24
p.addr = "where"
fmt.Println("s6 = ", s6)
// 3. 结构体的比较和赋值
// 3.1 结构体比较
var s7 Student = Student{id: 1, name: "q", sex: 'w', age: 12, addr: "aa"}
var s8 Student = Student{id: 1, name: "q", sex: 'w', age: 12, addr: "aa"}
var s9 Student = Student{id: 2, name: "q", sex: 'w', age: 12, addr: "aa"}
fmt.Println("s7==s8", s7 == s8)
fmt.Println("s7==s9", s7 == s9)
// 3.2 结构体赋值
var t Student
t = s7
fmt.Println("t = ", t)
fmt.Println("t == s7", t == s7)
// 4. 结构体作函数形参
// 1)结构体作函数形参是值传递。
// 2)结构体指针作函数形参是地址传递。 与数组类似。
// 5. go语言的可见性问题
// 5.1 go和C++不一样,没有private、protected、public这些关键字。
// 它的可见性是由大小写决定的,当调用其它包的函数、结构体类型、结构体成员变量,
// 它们的首字母都要大写,否则会报错。
}
结果: