Golang如何在不使用Github的情况下使用包
Golang如何在不使用Github的情况下使用包 我正在尝试理解包的使用方法,但在构建时遇到错误。虽然有很多相关讨论,但它们都集中在GitHub上,我无法将其应用到这样简单的任务中。
package main
import "fmt"
func main() {
fmt.Printf("hello, cruel world\n")
}
这段代码可以正常工作,但当我把打印功能移到另一个包时:
/src/main/main.go
package main
import "pkg/print"
func main() {
print.Hello
}
/src/pkg/print.go
package print
import "fmt"
func Hello() {
fmt.Printf("hello, cruel world\n")
}
在任何以下位置都找不到包"pkg/print": /usr/local/go/src/pkg/print (来自 $GOROOT) /Users/sibert/go/src/pkg/print (来自 $GOPATH)
我哪里做错了?路径是正确的。
更多关于Golang如何在不使用Github的情况下使用包的实战教程也可以访问 https://www.itying.com/category-94-b0.html
引用 abhayanoop:
-src -- abc (your project folder) --- main ----- main.go --- print ----- print.go
谢谢!这个方法有效!
更多关于Golang如何在不使用Github的情况下使用包的实战系列教程也可以访问 https://www.itying.com/category-94-b0.html
嗨 Sibert
根据我的理解,有几点需要注意:
-
首先,src 文件夹是存放所有项目的地方。最好先在 src 内为你的项目创建一个文件夹,然后在其中创建 main 和 pkg
-
其次,按照惯例,包名和父文件夹名称应该相同。既然你的包名是 print,那么文件夹名称也应该是 print 而不是 pkg。这样你就可以在 main.go 中导入 “项目文件夹/print”
-
与 Scala 等语言不同,你不能使用 print.Hello:即使没有参数,也应该使用 print.Hello() 并加上空括号
如下所示:
->src
-> abc (你的项目文件夹)
-> main
-> main.go
-> print (注意这里从 pkg 改成了 print)
-> print.go
你的 main.go 现在应该是这样:
package main
import "abc/print" // 从项目文件夹导入路径
func main() {
print.Hello() // 添加了空括号
}
希望这对你有帮助!
你遇到的问题是由于Go模块系统没有正确识别你的本地包。在Go 1.11及以后版本中,推荐使用Go模块来管理依赖,包括本地包。
以下是解决方案:
1. 初始化Go模块 在项目根目录执行:
go mod init your-project-name
2. 修正目录结构和导入路径
推荐的项目结构:
your-project/
├── go.mod
├── main.go
└── pkg/
└── print.go
main.go
package main
import "your-project-name/pkg"
func main() {
pkg.Hello()
}
pkg/print.go
package pkg
import "fmt"
func Hello() {
fmt.Printf("hello, cruel world\n")
}
3. 替代方案:使用相对路径导入
如果你坚持使用传统GOPATH方式,可以这样修改:
main.go
package main
import "./pkg"
func main() {
pkg.Hello()
}
pkg/print.go
package pkg
import "fmt"
func Hello() {
fmt.Printf("hello, cruel world\n")
}
4. 完整的工作示例
使用Go模块的完整示例:
初始化项目:
mkdir myapp
cd myapp
go mod init myapp
创建文件:
main.go
package main
import "myapp/mypkg"
func main() {
mypkg.PrintMessage()
}
mypkg/printer.go
package mypkg
import "fmt"
func PrintMessage() {
fmt.Println("hello, cruel world")
}
构建和运行:
go build
./myapp
关键点:
- 使用
go mod init创建模块 - 导入路径格式为
模块名/包路径 - 包目录名与导入路径的最后部分匹配
- 函数名首字母大写使其可导出
这样就能正确引用本地包而不依赖GitHub了。

