内容简介:• 值类型,赋值和传参会复制全部内容。可⽤ "_" 定义补位字段,⽀持指向⾃⾝类型的指针成员。•结构体内字段⽀持 "=="、 "!=", 结构体就支持相应操作•可⽤作 map 键类型。
结构体(struct)是用户自定义的类型,它代表若干字段的集合。
• 值类型,赋值和传参会复制全部内容。可⽤ "_" 定义补位字段,⽀持指向⾃⾝类型的指针成员。
•结构体内字段⽀持 "=="、 "!=", 结构体就支持相应操作
•可⽤作 map 键类型。
一、定义
//包内使用首字母小写,包外使用首字母大写
type employee struct {
firstName string
lastName string
age int
}
二、初始化的几种方式
//初始化方式1
var emp1 employee
emp1.firstName = "hello"
emp1.lastName = "world"
emp1.age = 20
fmt.Println(emp1)
//初始化方式2利用键值方式
emp2 := employee{
firstName: "Sam",
age: 25,
lastName: "Anderson", //使用键值方式这个逗号不可以省略
}
fmt.Println(emp2)
//初始化方式3顺序初始化,必须包含全部字段,否则会出错。
emp3 := employee{"Thomas", "Paul", 29}
fmt.Println(emp3)
三、支持匿名结构
//匿名结构,可⽤作结构成员或定义变量。
type file struct {
name string
size int
attr struct {
perm int
owner int
}
}
func main() {
//匿名结构
f := file{
name: "test.txt",
size: 1025,
// attr: {0755, 1}, //组合文字中缺少类型
}
f.attr.owner = 1
f.attr.perm = 0755
var attr = struct {
perm int
owner int
}{2, 0755}
f.attr = attr
fmt.Println(f.attr.perm)
}
四、匿名字段
•通俗来说是⼀个与成员类型同名 (不含包名) 的字段。
•被匿名嵌⼊的可以是任何类型,包括指针。
•不能同时嵌⼊某⼀类型和其指针类型,因为它们名字相同。
•匿名字段可以字段提升。可以像普通字段那样访问匿名字段成员,编译器从外向内逐级查找所有层次的匿名字段,直到发现目标或出错。但结构体匿名字段外层同名字段会遮蔽嵌⼊字段成员
//匿名字段
type person struct {
string
int
employee
}
func main(){
//匿名字段会把类型用作变量名
p := person{"Hello", 20, emp1}
p.string = "Other"
fmt.Println(p, p.string) //{Other 20} Other
fmt.Println(p.lastName)//等价于p.employee.lastName//输出:hello
}
五、结构体嵌套
//结构体嵌套
type address struct {
city, state string
}
type student struct {
name string
age int
address address
}
func main(){
//结构体嵌套
var s student
s.name = "小明"
s.age = 18
s.address = address{
city: "北京",
state: "中国",
}
fmt.Println(s)
fmt.Println(s.name)
fmt.Println(s.address.city)
}
完整代码实例
package main
import (
"fmt"
)
//需要添加注释或者改成非导出变量(首字母小写)
type employee struct {
firstName string
lastName string
age int
}
//匿名字段
type person struct {
string
int
employee
}
//结构体嵌套
type address struct {
city, state string
}
type student struct {
name string
age int
address address
}
//匿名结构,可⽤作结构成员或定义变量。
type file struct {
name string
size int
attr struct {
perm int
owner int
}
}
func main() {
//初始化方式1
var emp1 employee
emp1.firstName = "hello"
emp1.lastName = "world"
emp1.age = 20
fmt.Println(emp1)
//初始化方式2利用键值方式
emp2 := employee{
firstName: "Sam",
age: 25,
lastName: "Anderson", //使用键值方式这个逗号不可以省略
}
fmt.Println(emp2)
//初始化方式3顺序初始化,必须包含全部字段,否则会出错。
emp3 := employee{"Thomas", "Paul", 29}
fmt.Println(emp3)
//结构体指针
emp5 := &employee{"Sam", "Anderson", 55}
fmt.Println("First Name:", (*emp5).firstName)
fmt.Println("Age:", (*emp5).age)
//匿名字段会把类型用作变量名
p := person{"Hello", 20, emp1}
p.string = "Other"
fmt.Println(p, p.string) //{Other 20} Other
fmt.Println(p.lastName)//等价于p.employee.lastName//输出:hello
//匿名结构
f := file{
name: "test.txt",
size: 1025,
// attr: {0755, 1}, //组合文字中缺少类型
}
f.attr.owner = 1
f.attr.perm = 0755
var attr = struct {
perm int
owner int
}{2, 0755}
f.attr = attr
fmt.Println(f.attr.perm)
//结构体嵌套
var s student
s.name = "小明"
s.age = 18
s.address = address{
city: "北京",
state: "中国",
}
fmt.Println(s)
fmt.Println(s.name)
fmt.Println(s.address.city)
}
以上就是本文的全部内容,希望本文的内容对大家的学习或者工作能带来一定的帮助,也希望大家多多支持 码农网
猜你喜欢:- 数据结构学习笔记--栈
- golang学习笔记8:控制结构
- javascript数据结构学习笔记
- Go 学习笔记(15):结构体
- Golang笔记: 结构体(struct)
- Golang 学习笔记四 结构体 接口
本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们。
Alone Together
Sherry Turkle / Basic Books / 2011-1-11 / USD 28.95
Consider Facebookit’s human contact, only easier to engage with and easier to avoid. Developing technology promises closeness. Sometimes it delivers, but much of our modern life leaves us less connect......一起来看看 《Alone Together》 这本书的介绍吧!