在go包中公开函数
我想直接从包中公开函数。在go包中公开函数,go,Go,我想直接从包中公开函数。 所以我可以直接调用我的包,而不是mypackage.Somepublic()方法 package main import ( "mypackage" "fmt" ) func main() { var result = mypackage() fmt.Println(result) } 例如,在node.js中,可以公开匿名函数 module.export = function() { console.log('t
所以我可以直接调用我的包,而不是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!');
}
};
去吧,不是你想的那样
Go程序是通过将包链接在一起构建的。包又由一个或多个源文件构成,这些源文件一起声明属于包的常量、类型、变量和函数,并且可以在同一包的所有文件中访问这些常量、类型、变量和函数。这些元素可以导出并在另一个包中使用
它与例如
#include
等不同。您需要当前获取您的结构。。我想假设您的内容在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运行main.go
您将获得
Magic function was called
ta da!
虽然Node.js示例没有直接的类比,但在Go中可以做的是所谓的“本地导入”。基本上,本地导入将包导出到本地名称空间中的所有项(函数、类型、变量等)导入,以便可以像在本地定义一样访问它们。您可以通过在包名前面加一个点来实现这一点。例如:
import . "fmt"
func main() {
Println("Hello!") // Same as fmt.Println("Hello!")
}
(见本章)
这将适用于fmt
导出的任何项目。您可以使用mypackage
执行类似的操作(这是根据您发布的代码修改的):
请在此处引用以下内容以提高可视性:
亲爱的孤独的匿名冒险家。我猜你来这里的原因和我一样。因此,基本答案是。名称中使用大写字母;)资料来源:-是的,我也很惊讶。我期待着一些新奇的东西,但仅此而已。大写字母-出口,小写字母-无出口;)
好吧,我不明白否决票是什么意思。除此之外。因为在go exits一级函数中,我只是问是否有这样的东西可以通过包导出函数。就像在node.js中一样。Node.js require也不同于#include。一个有效的答案可能是:不,这是不可能的,但是您可以创建一个新的()函数,然后从那里返回一个匿名函数。例如,亲爱的孤独的匿名冒险家。我猜你来这里的原因和我一样。因此,基本答案是。名称中使用大写字母;)资料来源:-是的,我也很惊讶。我期待着一些新奇的东西,但仅此而已。大写字母-出口,小写字母-无出口;)@谢谢你,先生!天哪@mko,完全是我想要的。谢谢你在围棋里不能这么做。您不能说导入“pkg”然后再导入
pkg()
。大多数模块系统不允许这种情况。CommonJS很特别:)
package main
import (
. "mypackage"
"fmt"
)
func main() {
var result = Somepublic() // Equivalent to mypackage.Somepublic()
fmt.Println(result)
}