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パッケージは、おそらくあなたが考えているものではありません。

Go プログラムは、パッケージをリンクすることによって構築されます。パッケージは、パッケージに属する定数、型、変数、および関数をまとめて宣言し、同じパッケージのすべてのファイルでアクセス可能な 1 つ以上のソース ファイルから構築されます。これらの要素は、エクスポートして別のパッケージで使用できます。

#includeなどと同じではありません。

于 2013-08-02T09:44:52.563 に答える