猿问

Golang 导入包

我对 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)

}

并添加.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

怎么修?谢谢!


心有法竹
浏览 178回答 3
3回答

德玛西亚99

在包之外,只能访问和引用导出的标识符,即以大写字母开头的标识符。因此,最简单的解决方法是通过将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猫

将包中您希望其他函数读取的函数大写:func Add(x, y int) int {      return x + y}然后像这样在hello.go 中调用它:x := math.Add(6, 5)将它们保持小写确实有其目的,特别是如果您想保护它免于在包装外无意中使用。

犯罪嫌疑人X

函数、变量、来自不同包的任何东西都必须以大写字母开头,以使其在导入主包时可见。例子:package mainimport "fmt"import "other/out"func main(){fmt.Println(out.X)// hello}package othervar X string = "hi"
随时随地看视频慕课网APP

相关分类

Go
我要回答