美文网首页
详解Go 语言中的方法

详解Go 语言中的方法

作者: 也许会了 | 来源:发表于2020-09-17 17:46 被阅读0次

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

本文来自php中文网的golang教程栏目:https://www.php.cn/be/go/

相关文章

  • 详解Go 语言中的方法

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

  • go语言中的方法

    go支持OO语言的一些特性,方法就是其中之一。本文将介绍go语言中方法相关的概念。 方法声明 在go语言中,我们可...

  • TODO:Go语言goroutine和channel使用

    TODO:Go语言goroutine和channel使用 goroutine是Go语言中的轻量级线程实现,由Go语...

  • 14-Go方法和接口-指趣学院

    方法 Go语言中的方法其实就是一个特殊函数, 只不过这个函数是和某种属性类型绑定在一起的而已 Go语言中的方法一般...

  • Go语言中Slice详解

    Slice常见操作及底层原理实现 一 什么是Slice slice(切片)是一种数组结构,相当于是一个动态的数组,...

  • 【Golang 基础】Go 语言的接口

    Go 语言中的接口   Go 语言中的接口就是方法签名的集合,接口只有声明,没有实现,没有数据字段。 只要某个类型...

  • Go语言指针

    Go 语言中指针是很容易学习的,Go 语言中使用指针可以更简单的执行一些任务。 接下来让我们来一步步学习 Go 语...

  • go语言中的方法

  • Go语言中拷贝文件的几种常用的方式及性能对比

    Go语言中拷贝文件的几种常用的方式 简介 本篇文章将介绍Go语言中,最最最常用的3种拷贝文件的方法,这三种方法各有...

  • Go的内存管理

    本文翻译自Memory Management in Go,介绍了Go语言中内存管理的相关概念。 所有的计算机程序语...

网友评论

      本文标题:详解Go 语言中的方法

      本文链接:https://www.haomeiwen.com/subject/ouqryktx.html