如何在Go语言中调用其他文件中的函数

hk8txs48  于 2023-02-17  发布在  Go
关注(0)|答案(9)|浏览(698)

我想在Go语言中调用另一个文件中的函数,有人能帮忙吗?
test1.go

package main

func main() {
    demo()
}

test2.go

package main

import "fmt"

func main() {
}

func demo() {
    fmt.Println("HI")
}

如何从test1调用test2中的demo

cs7cruho

cs7cruho1#

包中不能有多个main
更一般地说,一个包中不能有多个函数具有给定的名称。
删除test2.go中的main并编译应用程序。demo函数将在test1.go中可见。

drkbr07n

drkbr07n2#

Go Lang默认只编译/运行上面提到的文件。要链接所有文件,你需要在运行时指定所有文件的名称。
运行以下两个命令之一:

$go run test1.go test2.go. //order of file doesn't matter
$go run *.go

如果您想构建它们,您应该做类似的事情。

ffscu2ro

ffscu2ro3#

我也在寻找同样的东西。为了回答你的问题“* 如何从test1调用test2中的demo?*",我是这样做的。用go run test1.go命令运行这段代码。将 current_folder 更改为test1.go所在的 folder

测试1.go

package main

import (
    L "./lib"
)

func main() {
    L.Demo()
}

文件库\测试2.go

将test2.go文件放入子文件夹lib

package lib

import "fmt"

// This func must be Exported, Capitalized, and comment added.
func Demo() {
    fmt.Println("HI")
}
li9yvcax

li9yvcax4#

一个实用、客观、简单的快速示例:
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
}
pes8fvy9

pes8fvy95#

如果你只运行go run test1.go,而这个文件引用了同一个包中另一个文件的函数,它就会出错,因为你没有告诉Go语言运行整个包,而是告诉它只运行那个文件。
你可以通过几种方式将文件分组为run命令中的一个包来告诉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
或者在创建可执行文件时碰巧调用的任何文件名。

llycmphe

llycmphe6#

**Folder Structure**

duplicate
  |
  |--duplicate_main.go
  |
  |--countLines.go
  |
  |--abc.txt

复制主文件.go

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()]++
        }
    }
  1. go run ch1_dup2.go countLines.go abc.txt
  2. go run *.go abc.txt
  3. go build ./
  4. go build ch1_dup2.go countLines.go
  5. go build *.go
nukf8bse

nukf8bse7#

您可以通过将另一个文件声明为模块来从另一个文件导入函数。请将这两个文件保存在同一个项目文件夹中。第一个文件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 .!演示功能将根据需要从第一个文件开始执行!!

6g8kf2rb

6g8kf2rb8#

作为一个愚蠢的人谁不知道是怎么回事与go模块应该说:
1.创建你的主页. go
1.在同一个目录下在你的终端里写这个
go mod init "您的模块名称"
1.创建一个新目录并进入它
1.创建一个新的. go文件并将目录名写为包名
1.编写任何你想要的函数;请注意,您函数必须以大写字母开头
1.回到主屏幕去吧
import "您的模块名/您的新目录名"
1.最后你需要写的是包的名字和你的函数名在它后面
"新目录的名称"+.+ YourFunction()
1.并将其写入终端
快跑。
你可以写***go run main. go***代替.有时候你不想创建一个目录并且想在同一个目录中创建新的. go文件,在这种情况下你需要知道,用大写字母或不启动你的函数并不重要,你应该运行所有的. go文件
快跑 *.快跑
因为
去跑主街。去
不起作用。

dz6r00yl

dz6r00yl9#

让我试试。
首先
在根目录下,您可以运行go mod init mymodule(注意:mymodule只是一个示例名称,请将其更改为您使用的名称)
然后可能需要运行go mod tidy

文件夹结构如下所示
.
├── go.mod
├── calculator
│   └── calculator.go
└── main.go

用于**./计算器/计算器.go**

package calculator

func Sum(a, b int) int {
    return a + b
}

第二
您可以导入calculator包并在main.go中使用函数Sum(* 注意,函数将使用大写命名 ),如下所示
用于
*./main.转到**

package main

import (
    "fmt"
    "mymodule/calculator"
)

func main() {
    result := calculator.Sum(1, 2)
    fmt.Println(result)
}

在那之后

你可以在根目录下运行这个命令。

go run main.go

结果将在控制台返回3

奖金:用于./go.mod

module mymodule

go 1.19

ps.这是我有史以来的第一个答案。我希望这对你有帮助。

相关问题