首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >戈朗进口包装

戈朗进口包装
EN

Stack Overflow用户
提问于 2015-10-04 09:55:23
回答 4查看 1.2K关注 0票数 3

我对Golang有一些问题,包括包裹。我拿到了那本书

代码语言:javascript
运行
复制
src/
├── hello_world
│   ├── hello.go
│   └── math
│       └── add.go

hello.go文件包含以下代码:

代码语言:javascript
运行
复制
package main

import (
    "fmt"
    math "hello_world/math"
)

func main() {
    fmt.Println("Hello World")
    x := math.add(6, 5)
}

add.go

代码语言:javascript
运行
复制
package math

func add(x, y int) int {
    return x + y
}

当我做go run hello go时,我看到:

代码语言:javascript
运行
复制
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

代码语言:javascript
运行
复制
evgen@laptop:~/go/src/hello_world$ echo $GOPATH
/home/evgen/go

怎么修呢?谢谢你!

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2015-10-04 10:00:02

在包之外,只能到达和引用导出的标识符,即以大写字母开头的标识符。

因此,最简单的解决方法是通过将math.add()函数的名称更改为math.go中的Add()来导出它

代码语言:javascript
运行
复制
func Add(x, y int) int {
    return x + y
}

当然,当您从main.go中引用它时

代码语言:javascript
运行
复制
x := math.Add(6, 5)

另外,请注意,在导入您的hello_world/math包时,您不必指定一个新名称来引用其导出标识符:默认情况下,它将是导入路径的最后一部分,因此这相当于您的导入:

代码语言:javascript
运行
复制
import (
    "fmt"
    "hello_world/math"
)
票数 9
EN

Stack Overflow用户

发布于 2016-08-10 23:37:31

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

代码语言:javascript
运行
复制
func Add(x, y int) int {
      return x + y
}

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

代码语言:javascript
运行
复制
x := math.Add(6, 5)

保持较低的大小写确实有其目的,特别是如果您想保护它不被无意中在包外使用。

票数 2
EN

Stack Overflow用户

发布于 2016-04-16 01:25:47

在调用Add中的主函数时,不要使用以下内容

代码语言:javascript
运行
复制
x := math.Add(6 + 5)

相反,请使用这个

代码语言:javascript
运行
复制
x := math.Add(6, 5)
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/32932199

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档