在java语言里面,我们定义一个类之后,我们就可以再这个类里面任意定义属性和方法,示例如下:
package com.test;
public class Student {
private String name;
private Integer age;
private Boolean sex;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public Integer getAge() {
return age;
}
public void setAge(Integer age) {
this.age = age;
}
public Boolean getSex() {
return sex;
}
public void setSex(Boolean sex) {
this.sex = sex;
}
}这时候我们这些set/get方法定义的是public,在使用的时候就可以直接调用了,例如:
Student student = new Student(); student.getName();
是不是很方便。下面我们说下go语言。
在go语言中,我们经常会涉及到看到在一些方法声明里面,会带有一个小括号,小括号里面还带有*,示例如下:
那像这种函数方法是什么意思呢?其实这个带*的参数就是go语言里面的reciver参数。在go语言中,完整的函数方法的结构如下:
func (参数 *${reciver类型}) ${方法名}(参数1 ${参数类型},参数2 ${参数类型}) (${返回参数类型1},${返回参数类型2} ...){
方法实现
}所以我们在这里可以把这个reciver类型看作是对应的类。也就是说这个方法是属于对应类的,下面我们使用student的案例来列举额下:
首先我们定义一个student的类
type Student struct {
name string
age int
sex bool
}然后我们定义一个GetStudentName的方法,它的reciver归属为Student,示例代码如下:
func (student *Student) GetStudentName() string {
return student.name
}完整的定义如下:
最后我们在使用这个方法的时候,我们会直接在student对象上调用这个方法即可,示例代码如下:
func main() { s := Student{ name: "张三", age: 15, sex: true, } name := s.GetStudentName() fmt.Println(name) }
最后我们看下结果:
完整的运行了,并且获取了student这个对象的name值。
备注:
1、这里的reciver就是我们经常在方法上看到带*的某一段参数。
2、这里的reciver可以带*也可以不带*,所以在代码里面有时候我们看别人的代码是不带*的,但是我们建议在编写的时候带*,这样子可以很直观的看出来有reciver。
3、每一个方法对应的reciver只能有1个,不能有多个。
4、在这种reciver代码编写的时候,一定要注意下:带*穿的是引用的指针,不带*传的是值的副本。所以在有时候会看到带*和不带*执行后的结果是不一样的。




还没有评论,来说两句吧...