在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)    
}