为了账号安全,请及时绑定邮箱和手机立即绑定

Golang 导入包

Golang 导入包

Go
心有法竹 2021-11-08 19:35:08
我对 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"

)


查看完整回答
反对 回复 2021-11-08
?
jeck猫

TA贡献1909条经验 获得超7个赞

将包中您希望其他函数读取的函数大写:


func Add(x, y int) int {

      return x + y

}

然后像这样在hello.go 中调用它:


x := math.Add(6, 5)

将它们保持小写确实有其目的,特别是如果您想保护它免于在包装外无意中使用。


查看完整回答
反对 回复 2021-11-08
?
犯罪嫌疑人X

TA贡献2080条经验 获得超4个赞

函数、变量、来自不同包的任何东西都必须以大写字母开头,以使其在导入主包时可见。


例子:


package main


import "fmt"

import "other/out"


func main(){


fmt.Println(out.X)


// hello


}

package other


var X string = "hi"


查看完整回答
反对 回复 2021-11-08
  • 3 回答
  • 0 关注
  • 177 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信