导入的struct方法不起作用

Tom*_*Tom 4 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)
}
Run Code Online (Sandbox Code Playgroud)

但是当我移动Point struct$GOPATH目录中的包时,我收到以下错误:point.init undefined (cannot refer to unexported field or method class.(*Point)."".init)

任何人都可以向我解释为什么会这样吗?

一旦我把Point struct一个叫做class代码的包看起来如下(错误是在我调用init方法的第8行):

package main

import "fmt"
import "class"

func main() {
    point := class.Point{}
    point.init()
    fmt.Println(point)
}
Run Code Online (Sandbox Code Playgroud)

nvc*_*nvn 11

init()重命名为Init()应该可以工作!
基本上,所有不以Unicode大写字母开头的东西(函数,方法,结构,变量)都只能在它们的包中看到!

您需要阅读以下语言规范中的更多内容:http: //golang.org/ref/spec#Exported_identifiers

相关位:

可以导出标识符以允许从另一个包访问它.如果两者都导出标识符:

  1. 标识符名称的第一个字符是Unicode大写字母(Unicode类"Lu"); 和
  2. 标识符在包块中声明,或者是字段名称或方法名称.不导出所有其他标识符.

  • 酷,这是一个比我更好的来源,但你应该始终包括来自源的相关报价,因为链接可能变得无效 (2认同)

Tom*_*Tom 5

仅导出名称首字母大写的函数/方法

http://golang.org/doc/ effective_go.html#commentary

程序中的每个导出(大写)名称...

当我更改initInit一切正常。