我对 Golang 有一些问题并包含包。我有那个结构src/├── hello_world│ ├── hello.go│ └── math│ └── add.gohello.go文件包含以下代码:package mainimport ( "fmt" math "hello_world/math")func main() { fmt.Println("Hello World") x := math.add(6, 5)}并添加.gopackage mathfunc add(x, y int) int { return x + y}当我这样做时,go run hello go我看到:evgen@laptop:~/go/src/hello_world$ go run hello.go # command-line-arguments./hello.go:10: cannot refer to unexported name math.add./hello.go:10: undefined: "hello_world/math".addGOPATH:evgen@laptop:~/go/src/hello_world$ echo $GOPATH/home/evgen/go怎么修?谢谢!
3 回答
德玛西亚99
TA贡献1770条经验 获得超3个赞
在包之外,只能访问和引用导出的标识符,即以大写字母开头的标识符。
因此,最简单的解决方法是通过将math.add()函数名称更改为Add()in来导出函数math.go:
func Add(x, y int) int {
return x + y
}
而且,当然,当您从以下位置引用它时main.go:
x := math.Add(6, 5)
作为旁注,请注意,在导入hello_world/math包时,您不必指定新名称来引用其导出的标识符:默认情况下,它将是其导入路径的最后一部分,因此这相当于您的导入:
import (
"fmt"
"hello_world/math"
)
jeck猫
TA贡献1909条经验 获得超7个赞
将包中您希望其他函数读取的函数大写:
func Add(x, y int) int {
return x + y
}
然后像这样在hello.go 中调用它:
x := math.Add(6, 5)
将它们保持小写确实有其目的,特别是如果您想保护它免于在包装外无意中使用。
犯罪嫌疑人X
TA贡献2080条经验 获得超4个赞
函数、变量、来自不同包的任何东西都必须以大写字母开头,以使其在导入主包时可见。
例子:
package main
import "fmt"
import "other/out"
func main(){
fmt.Println(out.X)
// hello
}
package other
var X string = "hi"
- 3 回答
- 0 关注
- 177 浏览
添加回答
举报
0/150
提交
取消