结构struct
-Go中的struct与C中的struct非常相似,并且Go没有class
-使用type<Name> struct{}定义结构,名称遵循可见性规则
-支持指向自身的指针类型成员
-支持匿名结构,可用作成员或定义成员变量
-匿名结构也可以用于map的值
-可以使用字面值对结构进行初始化
-允许直接通过指针来读写结构成员
-相同类型的成员可进行直接拷贝赋值
-支持 == 与 != 比较运算符,但不支持 > 或 <
-支持匿名字段,本质上是定义了以某个类型名为名称的字段
-嵌入结构作为匿名字段看起来像继承,但不是继承
-可以使用匿名字段指针
struct定义
<code>
package main
import (
"fmt"
)
type person struct {
Name string
Age int
}
func main() {
a := person{}
a.Name = "tom"
a.Age = 18
fmt.Println(a)
}
</code>
struct 字面赋值
<code>
a := person{
Name: "luo",
Age: 18,
}
</code>
struct指针
<code>
package main
import (
"fmt"
)
type person struct {
Name string
Age int
}
func main() {
a := &person{
Name: "luo",
Age: 18,
}
a.Name = "tom"
fmt.Println(a)
A(a)
fmt.Println(a)
}
func A(per *person) {
per.Age = 13
fmt.Println("A", per)
}
</code>
struct匿名
<code>
package main
import (
"fmt"
)
func main() {
a := &struct {
Name string
Age int
}{
Name: "tom",
Age: 19,
}
fmt.Println(a)
}
</code>
struct嵌套
<code>
package main
import (
"fmt"
)
type person struct {
Name string
Age int
Contact struct {
Phone, City string
}
}
func main() {
a := person{Name: "joe", Age: 19}
a.Contact.Phone = "13888888888"
a.Contact.City = "gz"
fmt.Println(a)
}
</code>
struct字段匿名
<code>
package main
import (
"fmt"
)
type person struct {
string
int
}
func main() {
a := person{"joe", 19}
fmt.Println(a)
}
</code>
struct 嵌入struct
<code>
package main
import (
"fmt"
)
type human struct {
Sex int
}
type person struct {
human
Name string
Age int
}
func main() {
a := person{Name: "tom", Age: 19, human: human{Sex: 1}}
a.Sex = 0
fmt.Println(a)
}
</code>
网友评论