[英]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.