• 设为首页
  • 点击收藏
  • 手机版
    手机扫一扫访问
    迪恩网络手机版
  • 关注官方公众号
    微信扫一扫关注
    公众号

Go语言中的结构体(struct)

原作者: [db:作者] 来自: [db:来源] 收藏 邀请

Golang官方称Go语言的语法相对Java语言而言要简洁很多,但是简洁背后也灵活了很多,所以很多看似很简单的代码上的细节稍不注意就会产生坑。本文主要对struct结构体的相关的语法进行总结和说明。

结构体类型的声明:

type user struct {
  name    string
  email    string 
}

func (u user) notify() {

   fmt.Println("nitity...",u.name,u.email)

}



func (u *user) changeEmail(email string) {   //这里的方法在被调用时,user传入的是调用者的指针

   u.email = email

}e

 

 结构体变量的赋值和初始化: 

func main()  {

    //直接使用批针的方式
    u1 := new(user)  //此时无法对u1进行初始化赋值
    u1.changeEmail("[email protected]")  //只能通过user的方法进行赋值
    u1.notify()

    //方式同上
    var u2 *user
    u2= new(user) //使用new函数返回的是其参数类型的指针
    u2.changeEmail("[email protected]")
    u2.notify()


    var u3 user  //当声明变量时,这个变量对应的值总是会被初始化。这个值要么用指定的值初始化,要么用零值(即变量类型的默认值)做初始化
    u3.changeEmail("[email protected]")
    u3.notify()

    //上面的方式只是起演示作用,在某些场合可以使用
//
下面两种方式是建议采用的方式  
    bill := user{"Bill","[email protected]"}   //声明一个变量并初始化
    bill.notify()

    lisa:=&user{"Lisa","[email protected]"}
    lisa.notify()    // 在这里Go会在底层这样做:(*lisa).notify

    bill.changeEmail("[email protected]")  //这里Go底层会 (&bill).changeEmail("[email protected]")
    bill.notify()

    lisa.changeEmail("[email protected]")
    lisa.notify()

}g

 说明一下:关键字func和函数名之间的参数被称为接收者,Go语言里有两种类型的接收者:值接收者和指针接收者,上面的notify方法的声明使用的是值接收者,changeEmail方法使用的是指针接收者,Go语言为了我们使用上的简单,在实 际执行时会根据我们传的值或指针自动帮我们进行转换以适应方法的需要。

还需要注意:

在Go语言中,所有的变量都以值的方式传递。因为指针变量的值是所指向的内存地址,在函数间传递指针变量,是在传递这个地址值,所以依旧被看作以值的方式在传递。

 

 

 

 


鲜花

握手

雷人

路过

鸡蛋
该文章已有0人参与评论

请发表评论

全部评论

专题导读
热门推荐
热门话题
阅读排行榜

扫描微信二维码

查看手机版网站

随时了解更新最新资讯

139-2527-9053

在线客服(服务时间 9:00~18:00)

在线QQ客服
地址:深圳市南山区西丽大学城创智工业园
电邮:jeky_zhao#qq.com
移动电话:139-2527-9053

Powered by 互联科技 X3.4© 2001-2213 极客世界.|Sitemap