Goの別のファイルから関数を呼び出したい。誰か助けてもらえますか?
test1.go
package main
func main() {
    demo()
}
test2.go
package main
import "fmt"
func main() {
}
func demo() {
    fmt.Println("HI")
}
から電話demoをかける方法は?test2test1
Goの別のファイルから関数を呼び出したい。誰か助けてもらえますか?
test1.go
package main
func main() {
    demo()
}
test2.go
package main
import "fmt"
func main() {
}
func demo() {
    fmt.Println("HI")
}
から電話demoをかける方法は?test2test1
mainパッケージに複数を含めることはできません。
より一般的には、パッケージ内に特定の名前を持つ複数の関数を含めることはできません。
を削除してmain、test2.goアプリケーションをコンパイルします。demo関数はから表示されますtest1.go。
Go Langはデフォルトで、言及されたファイルのみをビルド/実行します。すべてのファイルをリンクするには、実行中にすべてのファイルの名前を指定する必要があります。
以下の2つのコマンドのいずれかを実行します。
$go run test1.go test2.go. //order of file doesn't matter
$go run *.go
それらを構築したい場合は、同様のことを行う必要があります。
私は同じものを探していました。「 test1からtest2のデモを呼び出す方法」という質問に答えるために、これが私が行った方法です。このコードをgo run test1.goコマンドで実行します。current_folderをtest1.goがあるフォルダーに変更します。
test1.go
package main
import (
    L "./lib"
)
func main() {
    L.Demo()
}
lib \ test2.go
test2.goファイルをサブフォルダーに入れますlib
package lib
import "fmt"
// This func must be Exported, Capitalized, and comment added.
func Demo() {
    fmt.Println("HI")
}
機能的、客観的、簡単な簡単な例:
main.go
package main
import "pathToProject/controllers"
func main() {
    controllers.Test()
}
control.go
package controllers
func Test() {
// Do Something
}
忘れないでください。表示される外部関数、変数、およびメソッドは大文字で始まります。
すなわち:
func test() {
    // I am not Visible outside the file
}
 
func Test() {
    // I am VISIBLE OUTSIDE the FILE
}
実行go run test1.goしたばかりで、そのファイルに同じパッケージ内の別のファイル内の関数への参照がある場合、パッケージ全体を実行するようにGoに指示しなかったため、エラーが発生します。その1つのファイルのみを実行するように指示しました。
いくつかの方法でコンマされた実行でファイルをパッケージとしてグループ化することにより、パッケージ全体として実行するように指示できます。次にいくつかの例を示します(端末がパッケージのディレクトリにある場合)。
go run ./
また
go run test1.go test2.go
また
go run *.go
buildコマンドを使用しても同じ動作が期待できます。実行後、作成された実行可能ファイルはグループ化されたパッケージとして実行され、ファイルは相互の関数などを認識します。例:
go build ./
また
go build test1.go test2.go
また
go build *.go
その後、コマンドラインから実行可能ファイルを呼び出すだけで、すべてのファイルをパッケージ全体として一緒に実行したときにrunコマンドを使用した場合と同様の出力が得られます。元:
./test1
または、実行可能ファイル名が作成されたときに呼び出されたものは何でも。
フォルダ構造 複製 | | --duplicate_main.go | | --countLines.go | | --abc.txt
    package main
    import (
        "fmt"
        "os"
    )
    func main() {
        counts := make(map[string]int)
        files := os.Args[1:]
        if len(files) == 0 {
            countLines(os.Stdin, counts)
        } else {
            for _, arg := range files {
                f, err := os.Open(arg)
                if err != nil {
                    fmt.Fprintf(os.Stderr, "dup2: %v\n", err)
                    continue
                }
                countLines(f, counts)
                f.Close()
            }
        }
        for line, n := range counts {
            if n > 1 {
                fmt.Printf("%d\t%s\n", n, line)
            }
        }
    }
    package main
    import (
        "bufio"
        "os"
    )
    func countLines(f *os.File, counts map[string]int) {
        input := bufio.NewScanner(f)
        for input.Scan() {
            counts[input.Text()]++
        }
    }
go run ch1_dup2.go countLines.go abc.txtgo run *.go abc.txtgo build ./go build ch1_dup2.go countLines.gogo build *.go他のファイルをモジュールとして宣言することにより、別のファイルから関数をインポートできます。両方のファイルを同じプロジェクトフォルダーに保存します。最初のファイルtest1.goは次のようになります。
package main
func main() {
    demo()
}
パッケージに存在できるメイン関数は1つだけなので、2番目のファイルからメイン関数を削除します。2番目のファイルは次のtest2.goようになります。
package main
import "fmt"
func demo() {
    fmt.Println("HI")
}
ここで、プロジェクトディレクトリが作業ディレクトリとして設定されている任意の端末から、次のコマンドを実行します
go mod init myproject。go.modこれにより、プロジェクトディレクトリに呼び出されるファイルが作成されます。このmodファイルの内容は次のようになります。
module myproject
go 1.16
ターミナルからコマンドを実行するだけgo run .です!デモ機能は必要に応じて最初のファイルから実行されます!!
goモジュールで何が起こっているのかわからなかった愚かな人は言うべきです:
mod init"your modulename"に移動します
「モジュール名/新しいディレクトリの名前」をインポートします
「あなたの新しいディレクトリの名前」+。+ YourFunction()
実行します。
代わりにgorunmain.goと書くことができます。ディレクトリを作成したくない場合と、同じディレクトリに新しい.goファイルを作成したい場合があります。この状況では、関数を大文字で開始するかどうかは関係ありません。すべての.goファイルを実行する
実行する*.go
なぜなら
main.goを実行します
動作しません。