欢迎来到尧图网

客户服务 关于我们

您的位置:首页 > 文旅 > 旅游 > golang函数与方法的区别

golang函数与方法的区别

2025/3/21 0:27:32 来源:https://blog.csdn.net/u012941592/article/details/146314223  浏览:    关键词:golang函数与方法的区别

1.调用方式的区别

函数的调用方式:函数名(参数...)

方法的调用方式: 变量.方法名(参数...)

2.函数的使用

package mainimport "fmt"
//函数参数为值类型,调用的时候只能传递值类型数据,不能传递指针类型
func Sum(a, b int) int {return a + b
}
//函数的参数为指针类型,调用的时候只能传递指针类型,不能传递值类型
func Sub(a, b *int) int {return *a - *b
}
func main() {a, b := 10, 2fmt.Println(Sum(a, b))fmt.Println(Sub(&a, &b))
}

3.方法的使用

package mainimport "fmt"type Person struct {Name stringAge  int
}
//接收者为值类型时,可以接受指针类型变量调用方法,反之亦然
func (p Person) setAge(age int) {p.Age = age
}
func (p *Person) setName(name string) {p.Name = name
}
func (p Person) PrintName() {fmt.Println(p.Name)
}
func main() {p1 := Person{Name: "张三",Age:  10,}p1.setName("王五")    //Name=王五(&p1).setName("赵六") //Name=赵六p1.setAge(12)(&p1).setAge(12) //Age= 10fmt.Println(p1)p1.PrintName()
}

 由代码可以看出:

  • 不管调用形式如何,真正决定是值拷贝还是地址拷贝,需要看方法和那个类型进行绑定。
  • 方法和值类型绑定,比如(p Person),则是值拷贝。不论是p1.SetAge(12)还(&p1).setAge(12)都不会改变Age的值。
  • 方法和指针类型绑定,比如(p *Person),则是地址拷贝。不论是值类型p1.setName("王五") 还是指针(&p1).setName("赵六")都可以改变Name的值。

4.总结

  1. 对于普通函数,接收者为值类型时,不能将指针类型的数据直接传递,反之亦然。
  2. 对于方法,接收者为值类型时,可以直接用指针类型的变量调用方法,发过来同样也可以。

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com

热搜词