Golang 导入包
Golang import packages
我对 Golang 和 include 包有一些问题。我有那个结构
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
}
当我这样做时 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".add
GOPATH:
evgen@laptop:~/go/src/hello_world$ echo $GOPATH
/home/evgen/go
如何解决?谢谢!
在包外只能访问和引用导出的标识符,即以大写字母开头的标识符。
所以最简单的解决方法是导出 math.add()
函数,方法是在 math.go
中将其名称更改为 Add()
:
func Add(x, y int) int {
return x + y
}
当然,当您从 main.go
中引用它时:
x := math.Add(6, 5)
附带说明一下,请注意,在导入 hello_world/math
包时,您不必指定新名称来引用其导出的标识符:默认情况下,它将是导入的最后一部分路径,因此这相当于您的导入:
import (
"fmt"
"hello_world/math"
)
并且在你的主函数中调用 Add 时,不要使用这个
x := math.Add(6 + 5)
改用这个
x := math.Add(6, 5)
函数、变量以及来自不同包的任何内容都必须以大写字母开头,以便在导入主包时可见。
示例:
package main
import "fmt"
import "other/out"
func main(){
fmt.Println(out.X)
// hello
}
package other
var X string = "hi"
将包中您希望其他函数读取的函数大写:
func Add(x, y int) int {
return x + y
}
然后在 hello.go 中这样调用它:
x := math.Add(6, 5)
将它们保持小写确实有其目的,特别是如果你想保护它免于在包外无意中使用。
我对 Golang 和 include 包有一些问题。我有那个结构
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
}
当我这样做时 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".add
GOPATH:
evgen@laptop:~/go/src/hello_world$ echo $GOPATH
/home/evgen/go
如何解决?谢谢!
在包外只能访问和引用导出的标识符,即以大写字母开头的标识符。
所以最简单的解决方法是导出 math.add()
函数,方法是在 math.go
中将其名称更改为 Add()
:
func Add(x, y int) int {
return x + y
}
当然,当您从 main.go
中引用它时:
x := math.Add(6, 5)
附带说明一下,请注意,在导入 hello_world/math
包时,您不必指定新名称来引用其导出的标识符:默认情况下,它将是导入的最后一部分路径,因此这相当于您的导入:
import (
"fmt"
"hello_world/math"
)
并且在你的主函数中调用 Add 时,不要使用这个
x := math.Add(6 + 5)
改用这个
x := math.Add(6, 5)
函数、变量以及来自不同包的任何内容都必须以大写字母开头,以便在导入主包时可见。
示例:
package main
import "fmt"
import "other/out"
func main(){
fmt.Println(out.X)
// hello
}
package other
var X string = "hi"
将包中您希望其他函数读取的函数大写:
func Add(x, y int) int {
return x + y
}
然后在 hello.go 中这样调用它:
x := math.Add(6, 5)
将它们保持小写确实有其目的,特别是如果你想保护它免于在包外无意中使用。