Oop 导入的结构方法不工作
如果我运行以下代码,一切都会编译并运行良好:Oop 导入的结构方法不工作,oop,methods,struct,go,Oop,Methods,Struct,Go,如果我运行以下代码,一切都会编译并运行良好: package main import "fmt" type Point struct { x, y int } func (p *Point) init() bool { p.x = 5 p.y = 10 return true } func main() { point := Point{} point.init() fmt.Println(point) } 但是当我将点结构移动到
package main
import "fmt"
type Point struct {
x, y int
}
func (p *Point) init() bool {
p.x = 5
p.y = 10
return true
}
func main() {
point := Point{}
point.init()
fmt.Println(point)
}
但是当我将点结构
移动到$GOPATH
目录中的包时,我得到了以下错误:Point.init未定义(不能引用未报告的字段或方法类。(*Point)。“”.init)
有人能解释一下为什么会发生这种情况吗
一旦我将点结构
放入名为class
的包中,代码如下所示(错误出现在第8行,我调用init
方法):
仅导出名称首字母大写的函数/方法 程序中每个导出(大写)的名称
当我将
init
更改为init
时,一切正常。将init()重命名为init()应该可以基本上,所有不以Unicode大写字母开头的东西(函数、方法、结构、变量)都将在它们的包中可见 您需要在此处阅读语言规范中的更多内容: 相关位: 可以导出标识符以允许从另一个包访问它。如果出现以下两种情况,则导出标识符:
很酷,这是一个比我好得多的来源,但您应该始终包含源代码中的相关引用,因为链接可能会成为invalidIt的惯用用法,即编写函数
NewPoint
,从各种参数构造点,而不是事后调用Init
。确实,但我在RPC包中使用此函数,它只允许注册一个对象,因此我不得不这样做将init作为一个方法
package main
import "fmt"
import "class"
func main() {
point := class.Point{}
point.init()
fmt.Println(point)
}