go 匿名成员
来源:原创
时间:2019-03-07
作者:脚本小站
分类:GoLang
匿名成员的使用:
package main
import "fmt"
type Person struct{
name string
sex byte
age int
}
type Student struct{
Person
id int
addr string
}
func main() {
// 匿名字段初始化
var s1 Student = Student{Person{"hello",'m',18},1,"aaaaaa"}
fmt.Println(s1)
// 自动推导
s2 := Student{Person{"hello",'m',18},1,"aaaaaa"}
fmt.Println(s2)
fmt.Printf("%+v\n",s2) // 详细输出
// 指定成员初始化,未初始化的为0
s3 := Student{Person: Person{name:"hello"}, id:1}
fmt.Printf("%+v\n",s3)
}匿名成员的使用:
package main
import "fmt"
type Person struct{
name string
sex byte
age int
}
type Student struct{
Person
id int
addr string
}
func main(){
s1 := Student{Person{"hello",'m',18},1,"address"}
fmt.Printf("%+v\n",s1)
// 匿名成员的操作
s1.id = 1
s1.name = "haha"
s1.addr = "ccccc"
// 整体赋值
s1.Person = Person{"sss",'m',18}
fmt.Printf("%+v\n",s1)
}同名字段:就近原则
package main
import "fmt"
type Person struct{
name string
sex byte
age int
}
type Student struct{
Person // person里面有name字段
id int
name string // student里面也有name字段
addr string
}
func main(){
s1 := Student{Person: Person{name:"hello"},name:"haha"}
s1.name = "aaa" // 就近原则,如果本作用域找不到再找继承的
s1.Person.name = "bbb"
fmt.Printf("%+v\n",s1)
}非结构体匿名字段:
package main
import "fmt"
type mystr string // 给类型改名
type Person struct{
name string
sex byte
age int
}
type Student struct{
Person
int // 基础类型匿名字段
mystr
}
func main(){
s1 := Student{Person{"hello",'m',18},123,"dddd"}// 基础类型直接给对应的值即可
fmt.Println(s1)
// 直接操作即可
s1.Person = Person{"aaa",'f',19}
s1.int = 123
s1.mystr = "hhhh"
fmt.Println(s1)
}结构体指针类型:
package main
import "fmt"
type Person struct{
name string
sex byte
age int
}
type Student struct{
*Person // 指针类型
id int
addr string
}
func main(){
// 初始化方法一
// 指针类型初始化加取地址符&
s1 := Student{&Person{"haha",'m',18},1,"ddddddd"}
fmt.Println(s1.name, s1.sex, s1.age, s1.id, s1.addr)
// 初始化方法二
var s2 Student
s2.Person = new(Person) // 分配一个地址空间
s2.name = "eee"
s2.sex = 'f'
s2.age = 19
s2.addr = "deedededede"
fmt.Println(s1.name, s1.sex, s1.age, s1.id, s1.addr)
}