[英]How to call function from another file in go language?
我想從 go lang 中的另一個文件調用函數,有人可以幫忙嗎?
test1.go
package main
func main() {
demo()
}
test2.go
package main
import "fmt"
func main() {
}
func demo() {
fmt.Println("HI")
}
如何從test1
調用test2
demo
?
您的包裹中最多只能有一個main
。
更一般地說,一個包中不能有多個具有給定名稱的函數。
拆下main
在test2.go
和編譯應用程序。 demo
功能將從test1.go
可見。
默認情況下,Go Lang 僅構建/運行提到的文件。 要鏈接所有文件,您需要在運行時指定所有文件的名稱。
運行以下兩個命令之一:
$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")
}
如果您只運行go run test1.go
並且該文件引用了同一包內另一個文件中的函數,則會出錯,因為您沒有告訴 Go 運行整個包,而是告訴它只運行那個包文件。
您可以通過多種方式在運行中將文件分組為一個包來告訴 go 作為一個完整的包運行。 以下是一些示例(如果您的終端在您的包目錄中):
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
或者無論您的可執行文件名在創建時碰巧被調用。
Folder Structure duplicate | |--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.txt
go run *.go abc.txt
go build ./
go build ch1_dup2.go countLines.go
go build *.go
一個功能性的、客觀的、簡單的快速示例:
main.go
package main
import "pathToProject/controllers"
func main() {
controllers.Test()
}
control.go
package controllers
func Test() {
// Do Something
}
永遠不要忘記:可見的外部函數、變量和方法以大寫字母開頭。
IE:
func test() {
// I am not Visible outside the file
}
func Test() {
// I am VISIBLE OUTSIDE the FILE
}
您可以通過將另一個文件聲明為模塊來從另一個文件導入函數。 將這兩個文件保存在同一個項目文件夾中。 第一個文件test1.go
應如下所示:
package main
func main() {
demo()
}
從第二個文件中刪除 main 函數,因為一個包中只能存在一個 main 函數。 第二個文件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 模塊發生了什么的愚蠢的人應該說:
go mod init“你的模塊名稱”
導入“您的模塊名稱/新目錄的名稱”
“您的新目錄的名稱” + . + 你的功能()
去跑步 。
你可以寫go run main.go來代替。 有時您不想創建目錄而想在同一目錄中創建新的 .go 文件,在這種情況下您需要注意,無論是否以大寫字母開頭都沒有關系,您應該運行所有 .go 文件
去跑 *.go
因為
去運行 main.go
不起作用。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.