Go语言方法和函数有何关系?又有何区别?

    /    2019-02-27

方法和函数的关系:

方法是特殊的函数,定义在某一特定的类型上,通过类型的实例来进行调用,这个实例被叫接收者。

接收者必须有一个显式的名字,这个名字必须在方法中被使用。 接收者类型必须在和方法同样的包中被声明。

注意: Go语言不允许为简单的内置类型添加方法,下面定义的方法是非法的。

package main

import (
    "fmt"
)

//方法不能是内置数据类型
func (a int) Add(b int) {
    fmt.Println(a + b)
}

编译错误:

cannot define new methods on non-local type int

我们可以用Go语言的type,来定义一个和int具有同样功能的类型。这个类型不能看成是int类型的别名,它们属于不同的类型,不能直接相互赋值。

合法的方法定义如下:

package main

import (
    "fmt"
)

type myInt int

func (a myInt) Add(b myInt) {
    fmt.Println(a + b)
}

func main() {
    var x, y myInt = 36
    x.Add(y)
}

函数与方法的区别:

1、对于普通函数,接收者为值类型时,不能将指针类型的数据直接传递,反之亦然。

2、对于方法(如struct的方法),接收者为值类型时,可以直接用指针类型的变量调用方法,反过来同样也可以。

(0)

分享至