包 —— 每个可执行的应用程序必须包含一个主函数,它是执行的入口点。主函数应该存在main包中。
结构体: 通过 . 操作符访问结构体的各个成员!
1. 定义结构体类型person:
type person struct{ name string age int }
使用结构体类型定义结构体变量:
P := person{ "星星", 22 } //按顺序初始化
P := person{ age:22, name:"星星" } //使用键值对方式,顺序可以任意
P := new(person); P.age = 22; P.name = "星星" //new方式,未设置初始值时采用默认初始值
2. 结构体指针: 存储结构体变量的地址,也可以通过 . 操作符访问结构体变量的各个成员
var pointer_name *person
3. 匿名字段(类似继承): 不仅仅可以是结构体类型哦,所有的内置类型和自定义类型都可以作为匿名字段。
type Human struct {
name string
age int
weight float32
}
type Student struct {
Human // 匿名字段,代表Student包含Human的所有字段/成员
special string
}
此时对Student实例化: mark := Student{Human{"Mark", 22, 100.0}, "Computer Science"}
注意:可以使用.调用所有属性值(包括匿名字段中的属性),
也可以mark.Human = Huamn{"Mark", 22, 100}; mark.Human.age = 0
4. 结构体嵌套
type Address struct {
city, state string
}
type Person struct {
name string
age int
address Address //结构体类型变量作另一个结构体的成员
}
func main() {
var p Person
p.name = "Naveen"
p.age = 50
p.address = Address {
city: "Chicago",
state: "Illinois",
}
fmt.Println("Name: ", p.name)
fmt.Println("City: ", p.address.city)
}
5. 导出结构体和导出字段:
如果结构体类型以大写字母开头,那么它就是一个导出类型,可以从其它包中对它进行访问;类似,如果结构体中的字段以大写字母开头,也可以在其它包中访问它们。
在computer目录下,创建文件spec.go
package computer type Spec struct { //exported struct Maker string //exported field model string //unexported field Price int }
创建main.go 文件
import "../structs/computer" //或 import "./computer"或者 import "根目录" import "fmt" func main() { var spec computer.Spec spec.Maker = "apple" spec.Price = 50000 fmt.Println("Spec:", spec) }
目录结构如下:
src
structs
computer
spec.go
main.go
6. 结构体的比较:
结构体是值类型,如果每个字段都具有可比性,则结构体就是可比较的。
如果两个结构体变量对应字段的值都是相等的,则它们就是相等的!