我想直接从包中公开一个函数 所以我可以直接调用我的包而不是mypackage.Somepublic()方法。
package main
import (
"mypackage"
"fmt"
)
func main() {
var result = mypackage()
fmt.Println(result)
}
例如,在node.js中,您可以公开匿名函数
module.export = function() {
console.log('ta da!');
}
或对象
module.export = {
doMagic: function() {
console.log('ta da!');
}
};
答案 0 :(得分:9)
虽然您的Node.js示例没有直接比喻,但您可以在Go中执行的操作称为“本地导入”。基本上,本地导入会导入包导出到本地名称空间的所有项(函数,类型,变量等),以便可以像在本地定义它们一样访问它们。您可以通过使用点前缀包名称来实现此目的。例如:
import . "fmt"
func main() {
Println("Hello!") // Same as fmt.Println("Hello!")
}
(见action)。
这适用于fmt
导出的任何项目。您可以使用mypackage
执行类似的操作(这是根据您发布的代码修改的):
package main
import (
. "mypackage"
"fmt"
)
func main() {
var result = Somepublic() // Equivalent to mypackage.Somepublic()
fmt.Println(result)
}
答案 1 :(得分:3)
您需要获取当前的结构..我想假设您的内容位于src
文件夹
src/main.go
package main
import (
"fmt"
"./mypackage"
)
func main() {
var value mypackage.Export
value.DoMagic()
fmt.Printf("%s", value)
}
src/mypackage/export.go
package mypackage
import "fmt"
type Export struct {
}
func (c Export) DoMagic() {
fmt.Println("Magic function was called")
}
func (c Export) String() string {
return fmt.Sprint("ta da! \n")
}
运行go run main.go
你会得到
Magic function was called
ta da!
答案 2 :(得分:2)
Go Packages不是你可能认为的那样。
Go程序是通过将包链接在一起构建的。反过来,包由一个或多个源文件构成,这些源文件一起声明属于包的常量,类型,变量和函数,并且可以在同一包的所有文件中访问。这些元素可以导出并在另一个包中使用。
它与例如不同#include
等。
答案 3 :(得分:0)
在此处引用answer of mko以获得更好的可见性:
亲爱的孤独匿名冒险家。我猜你是因为同样的原因来到这里的。因此,基本答案是。在名称中使用大写字母;)来源:tour.golang.org/basics/3-是的,我也很惊讶。我原本期待一些奇特的东西,但仅此而已。大写字母-出口,小写字母-不出口;)