结构 struct
-Go 中的 struct
与 C 中的 struct
非常相似,并且 Go 没有 class
-使用 type <Name> struct{}
定义结构,名称遵循可见性规则
-支持指向自身的指针类型成员
-支持匿名结构,可用作成员或定义成员变量
-匿名结构也可以用作 map
的值
-可以使用字面值对结构进行初始化
-允许直接通过指针来读写结构成员
-相同类型的成员可以进行拷贝赋值
-支持 ==
与 !=
比较运算符,但不支持 >
或 <
-支持匿名字段,本质上是定义了以某个类型名为名称的字段
-嵌入结构作为匿名字段看起来像继承,但不是继承
-可以使用匿名字段指针
type person struct{
Name string
Age int
}
func main() {
//字母值初始化
a := person{
Name:"joe",
}
//赋值
a.Age = 19
fmt.Println(a)
}
通过指针操作
type person struct{
Name string
Age int
}
func main() {
a := &person{
Name: "joe",
Age: 19,
}
a.Age = 13
fmt.Println(*a)
}
匿名结构
func main() {
a := struct{
Name string
Age int
}{
Name: "joe",
Age: 19,
}
a.Age = 13
fmt.Println(a)
}
匿名结构嵌套
type person struct {
Name string
Age int
Contact struct {
Phone, City string
}
}
func main() {
a := person{
Name: "joe",
Age: 19,
}
a.Contact.Phone = "18826996633"
a.Contact.City = "beijing"
fmt.Println(a)
}
匿名字段
type person struct {
string
int
}
func main() {
//按照结构体中类型顺序赋值
a := person{"joe",19}
fmt.Println(a)
}
拷贝赋值
type person struct {
string
int
}
func main() {
a := person{"joe",19}
var b person
b = a
fmt.Println(b)
}
结构体嵌入
type human struct {
Sex int
}
type teacher struct {
human //此处 humen 是于匿名结构,相对与 humen humen
Name string
Age int
}
func main() {
a := teacher{human: human{Sex:0},Name:"joe",Age:19}
//Go 将 Sex 默认放到最外层,使 a 可直接调用
a.Sex = 100
fmt.Println(a)
}
当前内容版权归 Programming-With-Love 或其关联方所有,如需对内容或内容相关联开源项目进行关注与资助,请访问 Programming-With-Love .