17

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

5 回答 5

20

虽然您的 Node.js 示例没有直接的类比,但您可以在 Go 中执行的操作称为“本地导入”。基本上,本地导入将包导出到本地命名空间的所有项目(函数、类型、变量等)导入,以便可以像在本地定义它们一样访问它们。您可以通过在包名称前面加上一个点来做到这一点。例如:

import . "fmt"

func main() {
    Println("Hello!") // Same as fmt.Println("Hello!")
}

(见实际操作)。

这适用于任何fmt导出的项目。你可以做类似的事情mypackage(这是根据你发布的代码修改的):

package main

import (
    . "mypackage"
    "fmt"
)

func main() {
    var result = Somepublic() // Equivalent to mypackage.Somepublic()
    fmt.Println(result)    
}
于 2013-08-02T14:22:16.950 回答
14

在这里引用mko 的答案以获得更好的可见性:

亲爱的孤独匿名冒险家。我猜你来这里的原因和我一样。所以,基本答案是。在名称中使用大写字母;)来源:tour.golang.org/basics/3 - 是的,我也很惊讶。我期待一些花哨的东西,但仅此而已。大写字母 - 导出,小写字母 - 不导出;)

于 2019-09-13T11:08:45.233 回答
8

你现在需要得到你的结构..我想假设你的内容在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!
于 2013-08-02T10:53:34.087 回答
4

Go Packages并不是你想象的那样。

Go 程序是通过将包链接在一起来构建的。包依次由一个或多个源文件构成,这些源文件共同声明属于该包的常量、类型、变量和函数,并且可在同一包的所有文件中访问。这些元素可以导出并在另一个包中使用。

它与例如#include等不同。

于 2013-08-02T09:44:52.563 回答
0

文件夹结构应该类似于下面。

-mymodule

-mymodule/main.go

-mymodule/mypackage 

-mymodule/mypackage/mypack.go

main.go

package main
import (
        "example.com/mymodule/mypackage"
        "fmt"
)
func main() 
{
var result = mypackage.DoMagic  //With a first letter i.e 'D' capital
fmt.Println(result)    
}

mypack.go

package mypackage

import ( "fmt" )

func DoMagic () string {
  fmt.Println("Inside DoMagic")
  return "magic Done"
}

Output:

Inside DoMagic
magic Done
于 2021-10-27T16:14:02.990 回答