Golang中如何调用不同包中的函数
Golang中如何调用不同包中的函数 我正在尝试创建一个程序,该程序打开一个文件并通过扫描器读取文件。如果文本的第一行包含“1”,则应调用来自不同包的其他函数。
package main
import (
"package"
"bufio"
"fmt"
"log"
"os"
)
func main() {
file, err := os.Open("File path")
if err != nil {
log.Fatal(err)
}
defer file.Close()
scanner := bufio.NewScanner(file)
line := scanner.Text()
if line[0] == '1' {
_ = function1() (这里我试图调用另一个函数)
log.Fatal(err)
} else {
fmt.Println(scanner.Text())
}
if err := scanner.Err(); err != nil {
log.Fatal(err)
}
}
你能告诉我我哪里做错了吗?
更多关于Golang中如何调用不同包中的函数的实战教程也可以访问 https://www.itying.com/category-94-b0.html
我遇到了一个错误,提示我的另一个包在正确的路径下不存在,我的 main.go 包和这个包位于两个不同的文件夹中。
更多关于Golang中如何调用不同包中的函数的实战系列教程也可以访问 https://www.itying.com/category-94-b0.html
第二个包必须导出函数。这要求其名称以大写字母开头,例如 Function。然后你的应用程序必须导入该包,就像 import package 一样,你已经这样做了。最后,你需要以 package.Function() 的形式调用该函数。
我读过它,但我不知道如何创建一个程序,当行以特定数字开头时调用不同的函数。例如:如果行[0]以“1”开头,则调用函数A;如果行以“2”开头,则调用函数B。这些函数位于不同的文件夹中,但在同一个目录下。
在Go中调用不同包的函数,你需要正确导入包并使用包名作为前缀。以下是修正后的代码示例:
package main
import (
"bufio"
"fmt"
"log"
"os"
"yourproject/otherpackage" // 替换为实际的包路径
)
func main() {
file, err := os.Open("file.txt")
if err != nil {
log.Fatal(err)
}
defer file.Close()
scanner := bufio.NewScanner(file)
if scanner.Scan() {
line := scanner.Text()
if len(line) > 0 && line[0] == '1' {
// 调用其他包的函数
result, err := otherpackage.Function1()
if err != nil {
log.Fatal(err)
}
fmt.Println("调用结果:", result)
} else {
fmt.Println(line)
}
}
if err := scanner.Err(); err != nil {
log.Fatal(err)
}
}
其他包中的函数定义示例:
// otherpackage/other.go
package otherpackage
import "errors"
func Function1() (string, error) {
return "函数调用成功", nil
}
主要问题修正:
- 需要先调用
scanner.Scan()读取第一行 - 导入包路径需要正确(替换
"yourproject/otherpackage"为实际路径) - 调用函数时使用
包名.函数名()的格式 - 检查函数返回的错误值
在使用 scanner.Text() 之前,你必须调用 scanner.Scan()。这是预期的用法。
你确认过 scanner.Text() 返回的是文件的第一行吗?
以下是修改后的程序,添加了 Scan 调用:
package main
import (
“package”
“bufio”
“fmt”
“log”
“os”
)
func main() {
file, err := os.Open(“File path”)
if err != nil {
log.Fatal(err)
}
defer file.Close()
scanner := bufio.NewScanner(file)
if !scanner.Scan() { // <- 调用 Scan(),如果到达文件末尾则返回 false
fmt.Println("file is empty")
return
}
line := scanner.Text()
if line[0] == '1' {
_ = function1() (here I am trying to call another function)
log.Fatal(err)
} else {
fmt.Println(scanner.Text())
}
if err := scanner.Err(); err != nil {
log.Fatal(err)
}
}
请注意,你的代码将测试第一个字符是否为 ‘1’,而你最初的问题是说,如果第一行包含 “1”,则要执行一个函数。这并非相同的测试。
看起来你认为文件夹(folder)和目录(directory)是不同的东西,但这两个词指的是同一事物。
函数可以位于同一文件夹的不同文件中,但它们的包必须是 main,以便它们与 main() 函数在同一个包中。同一个包的文件必须位于同一个目录(=文件夹)中。
如果你有多个 Go 文件,必须使用命令 go run *.go 来编译和运行程序。


