go struct 静态函数_Go语言学习笔记(四)结构体struct & 接口Interface & 反射reflect...

加 Golang学习 QQ群共同学习进步成家立业工作 ^-^ 群号:96933959

结构体struct

struct 用来自定义复杂数据结构,可以包含多个字段(属性),可以嵌套;

go中的struct类型理解为类,可以定义方法,和函数定义有些许区别;

struct类型是值类型。

struct定义

type User struct{

NamestringAge int32

messstring}

varuser Uservar user1 *User = &User{}var user2 *User = new(User)

struct使用

下面示例中user1和user2为指针类型,访问的时候编译器会自动把 user1.Name 转为 (*user1).Name

func main() {varuser User

user.Name= "nick"user.Age= 18user.mess= "lover"

var user1 *User = &User{

Name:"dawn",

Age:21,

}

fmt.Println(*user1) //{dawn 21 }

fmt.Println(user1.Name, (*user1).Name) //dawn dawn

var user2 *User = new(User)

user2.Name= "suoning"user2.Age= 18fmt.Println(user2)//&{suoning 18 }

fmt.Println(user2.Name, (*user2).Name) //suoning suoning

}

构造函数

golang中的struct没有构造函数,可以伪造一个

type User struct{

NamestringAge int32

messstring}

func NewUser(namestring, age int32, mess string) *User {return &User{Name:name,Age:age,mess:mess}

}

func main() {//user := new(User)

user := NewUser("suoning", 18, "lover")

fmt.Println(user, user.mess, user.Name, user.Age)

}

内存布局

struct中的所有字段在内存是连续的,布局如下:

varuser User

user.Name= "nick"user.Age= 18user.mess= "lover"fmt.Println(user)//{nick 18 lover}

fmt.Printf("Name:%p\n", &user.Name) //Name:0xc420016180

fmt.Printf("Age: %p\n", &user.Age) //Age: 0xc420016190

fmt.Printf("mess:%p\n", &user.mess) //mess:0xc420016198 8字节为内存对齐

方法

方法是作用在特定类型的变量上,因此自定义类型,都可以有方法,而不仅仅是struct。

方法的访问控制也是通过大小写控制。

init函数是通过传入指针实现,这样改变struct字段值,因为是值类型。

type User struct{

NamestringAgeintsexstring}

func (this *User) init(name string, age int, sex string) {this.Name =namethis.Age =agethis.sex =sex

}

func (this User) GetName() string{return this.Name

}

func main() {varuser User

user.init("nick", 18, "man")//(&user).init("nick", 18, "man")

name :=user.GetName()

fmt.Println(name)

}

匿名字段

如果有冲突的, 则最外的优先

type User struct{

Name stirng

Ageint}

type Loverstruct{

User

sex time.TimeintAgeint}

继承 & 多重继承

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值