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

3 回复

引用 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了。

回到顶部