Go 戈朗进口包装
我对Golang和包裹有一些问题。我有那套衣服Go 戈朗进口包装,go,importerror,Go,Importerror,我对Golang和包裹有一些问题。我有那套衣服 src/ ├── hello_world │ ├── hello.go │ └── math │ └── add.go hello.go文件包含以下代码: package main import ( "fmt" math "hello_world/math" ) func main() { fmt.Println("Hello World") x := math.add(6, 5) } 和
src/
├── hello_world
│ ├── hello.go
│ └── math
│ └── add.go
hello.go文件包含以下代码:
package main
import (
"fmt"
math "hello_world/math"
)
func main() {
fmt.Println("Hello World")
x := math.add(6, 5)
}
和add.go
package math
func add(x, y int) int {
return x + y
}
当我运行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".add
GOPATH:
evgen@laptop:~/go/src/hello_world$ echo $GOPATH
/home/evgen/go
如何修复它?谢谢你 在包外部,只能访问和引用导出的标识符,即以大写字母开头的标识符 因此,最简单的修复方法是导出
math.go中的add()
函数,将其名称更改为add()
:
func Add(x, y int) int {
return x + y
}
x := math.Add(6, 5)
当然,当您从main.go中引用它时:
func Add(x, y int) int {
return x + y
}
x := math.Add(6, 5)
另外,请注意,在导入您的hello\u world/math
包时,您不必指定新名称来引用其导出的标识符:默认情况下,它将是其导入路径的最后一部分,因此这相当于您的导入:
import (
"fmt"
"hello_world/math"
)
当在主函数中调用Add时,不要使用这个
x := math.Add(6 + 5)
x := math.Add(6, 5)
用这个代替
x := math.Add(6 + 5)
x := math.Add(6, 5)
来自不同包的函数、变量和任何内容都必须以大写字母开头,以便在导入主包时可见
例如:
package main
import "fmt"
import "other/out"
func main(){
fmt.Println(out.X)
// hello
}
将程序包中希望其他函数读取的函数大写:
func Add(x, y int) int {
return x + y
}
然后叫它“你好”。像这样说:
x := math.Add(6, 5)
将它们保持小写确实有其目的,特别是如果您想保护它不被无意中用在软件包之外。您可以编辑其他用户的答案,而不是发布一个新的答案来更正另一个答案