下面的代码均省略包导入和主函数,只列出说明代码

1:不能为非本地类型申明方法

func (i int) add (j int) int {
    return i + j
}

如果运行上面的代码,会报错cannot define new methods on non-local type int,正确的写法是先将 int 类型申明为本地类型

type LocalInt int
func (i *LocalInt) add (j LocalInt) LocalInt {
    return *i + j
}

之所以申明为指针类型接受者,是为了方便后面讲解

2:类型字面量,不能直接调用指针接受者方法,必须先申明变量

LocalInt(12).add(LocalInt(12))

运行上面的代码,会如下错

# command-line-arguments
./test.go:28:17: cannot call pointer method on LocalInt(12)
./test.go:28:17: cannot take the address of LocalInt(12)

应先申明变量

i := LocalInt(12)
i.add(LocalInt(12))

3:go为强类型,相关类型不能混用

i := 12
i.add(LocalInt(12))

虽然 LocalInt 和 int 类型表现一致,但它们仍不是同一种类型,因此会报错i.add undefined (type int has no field or method add)


Published

Category

golang

Tags

Stay in Touch

Friendship Links