You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Go主文件中访问子目录函数?附模块导入解析

Go跨包调用问题解决与模块导入底层逻辑

一、需要修改的内容

  1. 调整test.go的函数可见性
    Go规定只有首字母大写的函数才能被其他包访问,因此要把hloFunc改为HloFunc:
package folder1

import "fmt"

// 首字母大写后变为导出函数,允许跨包调用
func HloFunc() {
    fmt.Println("Hello Function from sub directory")
}
  1. 修正main.go的导入与调用代码
    去掉导入路径末尾的多余斜杠,并且调用时必须加上包名前缀:
package main

// 导入路径末尾无需添加斜杠
import "testModule/folder1"

func main() {
    // 通过「包名.函数名」的格式调用导出函数
    folder1.HloFunc()
}

二、模块与包导入的底层逻辑

  • 模块(Module):go.mod里的module testModule是整个项目的根标识,所有子目录的包路径都以此为前缀,比如folder1目录的包路径就是testModule/folder1,导入时必须使用完整的包路径。
  • 包(Package):同一目录下的所有Go文件必须声明相同的包名(比如folder1下的test.go用package folder1),包是Go代码的基本组织单元。
  • 访问权限规则:小写开头的标识符(函数、变量、类型等)属于包内私有,只能在当前包内部使用;只有大写开头的标识符才是“导出”状态,允许被其他包引用。
  • 调用规则:导入其他包后,必须通过「包名.导出标识符」的方式访问,包名默认对应目录名称(导入时未指定别名的情况下)。

内容的提问来源于stack exchange,提问作者Arjun Malhotra

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.15 09:01:31