Go:来自库的函数调用

Go:来自库的函数调用,go,Go,现在我真的很困惑。这是我的问题(围棋对我来说是新的): Firs文件: // main.go package main import "./libraries/test" func main() { test.foo() } 第二个文件: // test.go package test import "fmt" func foo() { fmt.Println("foo") } 我的结构如下所示: mai

现在我真的很困惑。这是我的问题(围棋对我来说是新的):

Firs文件:

// main.go
package main

import "./libraries/test"

func main() {

    test.foo()
}
第二个文件:

// test.go
package test

import "fmt"

func foo() {

    fmt.Println("foo")
}
我的结构如下所示:

main.go
   /libraries
        /test
           test.go
如果我编译此代码,我将收到以下错误消息:

./main.go:7:无法引用未报告的名称test.foo

./main.go:7:未定义:test.foo


如果我将
foo
更改为
foo
,则错误消失,程序按预期运行。

我想您没有仔细阅读Go文档。所有以大写字母开头的名称都将从其包中导出。不会导出所有小写名称


在Go中,符号名称是大写还是小写是一个重要的区别。这适用于函数,但也适用于类型(如结构或接口)和结构成员

你可以在(我的)重点中读到这一点:

姓名在围棋中和在其他语言中一样重要。它们甚至具有语义效果:包外名称的可见性取决于其第一个字符是否为大写


这意味着您不能随意命名函数和类型。如果您需要从另一个模块调用此函数,它必须命名为
Foo
,而不是
Foo

太好了,我可能在我的
Go
书中遗漏了这个细节。所以我可以想到小写的名字,比如
私有类型
;这两个小时花得很好。@Volker我读过这本书:我可能会错过一些东西。