[Go菜牛系列]go module与本地包导入

场景需求

假设当前同一个项目中有多个模块,每个模块有单独的go.mo, 结构如下所示:

├── package1
│   ├── go.mod
│   └── main.go
└── package2
    ├── go.mod
    ├── hello
    │   └── hello.go
    └── package2.go
  • package2包相关代码
// package2/package2.go
package package2

import "fmt"

func New(){
	fmt.Println("package2.New")
}
// package2/hello/hello.go
package hello

import "fmt"

func New2(){
	fmt.Println("package2.hello.New2")
}
// package2/go.mod
module package2

go 1.14

如果package1中的main.go需要导入package2的package2.go或hello/hello.go, 应该怎么实现呢?

package1相关代码

// package1/main.go
package main

import (
	"fmt"
	"package2"
	"package2/hello"
)
func main() {
	package2.New()
	hello.New2()
	fmt.Println("package1.main")
}
module package1

go 1.14

require "package2" v0.0.0
replace "package2" => "../package2"

测试结果

$ cd package1
$ go run main.go
package2.New
package2.hello.New2
package1.main

关键点在于package1/go.mod中的

require "package2" v0.0.0               // 表示依赖package2包
replace "package2" => "../package2"     // package2包替换为本地路径相对目录所在的包

你可能感兴趣的:(Golang)