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

rundaisc · · 70 次点击 · · 开始浏览    
结构体`struct`可以用来描述一组数据值,这组值的本质即可以是原始的,也可以是非原始的。是用户自定义的类型,它代表若干字段的集合,可以用于描述一个实体对象,类似`java`,`php`中的`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`其实我们可以把它看成一个`class`而`Name`,`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](https://static.studygolang.com/191229/a7469c06c43accc3f19ded734b20d55d.jpg)

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

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