Go学习笔记-面向对象struct成员变量

旧梦发癫 · · 1498 次点击 · · 开始浏览    
这是一个创建于 的文章,其中的信息可能已经有所发展或是发生改变。

结构体struct可以用来描述一组数据值,这组值的本质即可以是原始的,也可以是非原始的。是用户自定义的类型,它代表若干字段的集合,可以用于描述一个实体对象,类似javaphp中的class,是golang面向对象编程的基础类型。
今天我们先来看看golang中的成员变量的实现。

基本的属性(成员变量)
type Teacher struct {  
  Name string  
  age int  
  Sex string
}  
func Create() Teacher {  
   cang := Teacher{Name:"teacher cang",age:20,Sex:"woman"}  
   return cang  
}

对于在上面结构体teacher其实我们可以把它看成一个className,Sex是可以被外部(其他的包)访问的公有变量,而age则只能在包内部被访问。

Method(成员方法)
type Student struct {  
  Name string  
  Sex string  
  Age int  
}  
func (student *Student) SetName(name string)  {  
   student.Name = name  
}  
func (student *Student) GetName() string {  
   return student.Name  
}  
func XiaoPeng()  {  
   xiaoPeng := Student{}  
   xiaoPeng.SetName("xiao peng")  
   fmt.Println(xiaoPeng.GetName()) //xiao peng  
}

golang中为struct声明成员方法,只需要在func指定当前func属于的struct即可。
上面可以看到我们在指定struct的时候,传入的是一个指针。那么可不可以不传指针呢?当然是可以的,但是这个时候我们得到的是一个原结构体的一个副本。

type Student struct {  
  Name string  
  Sex string  
  Age int  
}  
func (student Student) SetAge(number int)  {  
   student.Age = number  
  fmt.Println(student.Age)  //21
}  
  
func (student *Student) GetAge() int {  
   return student.Age  
}  
func XiaoPeng()  {  
   xiaoPeng := Student{}  
   xiaoPeng.SetAge(21)  
   fmt.Println(xiaoPeng.GetAge()) //0   
}

可以看到如果在SetAge内部是可以访问当前的age赋值。但是在外部是获取不到age的值的。其实在SetAge中是对xiaoPeng的一个副本拷贝复制,相当于值传递

期待一起交流

qrcode_for_gh_60813539dc23_258.jpg


有疑问加站长微信联系(非本文作者)

本文来自:Segmentfault

感谢作者:旧梦发癫

查看原文:Go学习笔记-面向对象struct成员变量

入群交流(和以上内容无关):加入Go大咖交流群,或添加微信:liuxiaoyan-s 备注:入群;或加QQ群:692541889

1498 次点击  
加入收藏 微博
暂无回复
添加一条新回复 (您需要 登录 后才能回复 没有账号 ?)
  • 请尽量让自己的回复能够对别人有帮助
  • 支持 Markdown 格式, **粗体**、~~删除线~~、`单行代码`
  • 支持 @ 本站用户;支持表情(输入 : 提示),见 Emoji cheat sheet
  • 图片支持拖拽、截图粘贴等方式上传