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

6 回复

我遇到了一个错误,提示我的另一个包在正确的路径下不存在,我的 main.go 包和这个包位于两个不同的文件夹中。

更多关于Golang中如何调用不同包中的函数的实战系列教程也可以访问 https://www.itying.com/category-94-b0.html


第二个包必须导出函数。这要求其名称以大写字母开头,例如 Function。然后你的应用程序必须导入该包,就像 import package 一样,你已经这样做了。最后,你需要以 package.Function() 的形式调用该函数。

我读过它,但我不知道如何创建一个程序,当行以特定数字开头时调用不同的函数。例如:如果行[0]以“1”开头,则调用函数A;如果行以“2”开头,则调用函数B。这些函数位于不同的文件夹中,但在同一个目录下。

你是否已经完成了Go语言之旅并学习了包的相关知识?

网上也有大量关于包的学习资料。例如:

图片

关于Go语言包你需要知道的一切

Go编程语言中包管理和部署的完整概述

阅读时间:12分钟

在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
}

主要问题修正:

  1. 需要先调用scanner.Scan()读取第一行
  2. 导入包路径需要正确(替换"yourproject/otherpackage"为实际路径)
  3. 调用函数时使用包名.函数名()的格式
  4. 检查函数返回的错误值

在使用 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 来编译和运行程序。

回到顶部