Go workspace
在日常项目中,会大量的使用到这些基础包。 项目、基础包之间的关系图常常是这样的:
G项目包FFCGFCG
项目包Go Module
Go workspace
快速开始
创建工作区
Go workspace
workspace
$: mkdir workspace
$: cd workspace
$: go work init
go.work
go 1.18
Go workspacego version >= 1.18
创建项目
demo
$: cd workspace
$: mkdir demo
$: go mod init demo
demo/main.go
package main
import "fmt"
func main() {
fmt.Println("hello, go workspace")
}
github.com/liujianping/foo
$ go get github.com/liujianping/foo
Go Moduledemo/main.go
package main
import (
"fmt"
"github.com/liujianping/foo"
)
func main() {
fmt.Println(foo.Greet("workspace"))
}
demogo run main.godemo
$: go run main.go
main.go:6:2: no required module provides package github.com/x-mod/foo: go.mod file not found in current directory or any parent directory; see 'go help modules'
demogo.workgo.workworkspace
工作区操作
demo
$: cd workspace
$: go work use ./demo
go.work
go 1.18
use ./demo
重新运行项目:
$: cd workspace
$: go run demo/main.go
Go Workspace, 你好! Version 1.0.1
github.com/liujianping/foo
$: cd workspace
$: git clone [email protected]:liujianping/foo.git
现在,工作区目录到结构是这样的:
$: cd workspace
$: tree .
.
├── demo
│ ├── go.mod
│ ├── go.sum
│ └── main.go
├── foo
│ ├── foo.go
│ └── go.mod
└── go.work
foo.go
package foo
import "fmt"
func Greet(name string) string {
return fmt.Sprintf("%s, 你好! Version 2.0.1", name)
}
demo
$: cd workspace
$: go run demo/main.go
Go Workspace, 你好! Version 1.0.1
github.com/liujianping/fooclonego.work
$: cd workspace
$: go work use ./foo
go.work
go 1.18
use (
./demo
./foo
)
再次运行项目:
$: cd workspace
$: go run demo/main.go
Go Workspace, 你好! Version 2.0.1
小结
workspaceGo workspaceGo modulereplaceworkspace