在go包中公开一个函数

时间:2013-08-02 09:35:48

标签: go

我想直接从包中公开一个函数 所以我可以直接调用我的包而不是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!');
    }
};

4 个答案:

答案 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-是的,我也很惊讶。我原本期待一些奇特的东西,但仅此而已。大写字母-出口,小写字母-不出口;)