下面由Golang教程栏目给大家介绍Go 语言中的方法的理解,希望对需要的朋友有所帮助!

go 方法

定义

方法是具有特殊接收器参数的函数,即在 func 和方法名之间方法接收者。

func (s Student) GetName() string  {    return s.name}func (s *Student) SetName(name string) {    s.name = name}

我们可以把接收者类型为指针的成员方法叫做指针方法,把接收者类型为非指针的成员方法叫做值方法。

在你需要修改对象的时候,才必须用指针(引用传递),否则将所属类型声明为字面量即可(值传递)。另外避免在每个方法调用上复制该值。

type Integer intfunc (a *Integer) Increase(i Integer) {    *a = *a + i}func main() {    var a Integer = 2    var b Integer = 2    //a.Increase(b)    //(&a).Increase(b)    (*Integer).Increase(&a, b)    fmt.Println(a)}

该方法并不属于 Integer 类,而是属于指向 Integer 的指针类型,我们在调用方法时,之所以可以直接在 a 实例上调用 Increase 方法,是因为 Go 语言编译阶段会自动将 a 转化为对应的指针类型 &a,所以真正调用的代码是 (&a).Increase(b)

其实是语法糖

type A struct {  name string}func (a A) Name() string {  a.name = "Hi! " + a.name  return a.name}func main() {  a := A{name: "test"}  fmt.Println(a.Name())  fmt.Println(A.Name(a))}

a.Name() 其实就是 A.Name(a) 的语法糖,变量 a 就是所谓的方法接收者。

func NameOfA(a A) string {  a.name = "Hi! " + a.name  return a.name}func main() {  t1 := reflect.TypeOf(A.Name)  t2 := reflect.TypeOf(NameOfA)  fmt.Println(t1 == t2)// true}

go 语言中函数类型只和参数与返回值相关,所以这两个类型相等就能证明 方法本质上就是普通的函数,而接收者就是隐含的第一个参数

更多相关文章

  1. golang实现二倍均值算法和抢红包的方法
  2. go语言grpc环境搭建的方法详解
  3. 关于Go语言的http/2服务器功能及客户端使用方法
  4. 【发布了Go-carbon1.1.1版本】完善对主流ORM的支持,新增公共方法
  5. go语言中普通函数与方法的区别是什么?
  6. golang中方法的receiver为指针和不为指针有什么区别
  7. 分享5种文件变更时自动重载Go程序的方法
  8. go-carbon1.2.4发布了!新增系列时间比较方法
  9. go语言实现string转float的方法

随机推荐

  1. android AndroidManifest.xml 权限示例
  2. Android实现TextView动画缩放
  3. android 资料收集大全
  4. Android有进度条的下载图片并且显示图片
  5. Android 系统 图标的使用
  6. Android相关sdk使用
  7. android logger 简要分析 (kernel 3.0.0)
  8. Android(安卓)画图之抗锯齿
  9. 使用navigator.userAgent.toLowerCase()
  10. Android之ContentProvider