# This test exercises that vendoring works properly using the workspace in the # the work_prune test case. go work vendor cmp vendor/modules.txt modules.txt.want cmp vendor/example.com/b/b.go b/b.go cmp vendor/example.com/q/q.go q1_1_0/q.go go list -m -f '{{.Version}}' example.com/q stdout '^v1.1.0$' go list -f '{{.Dir}}' example.com/q stdout $GOPATH[\\/]src[\\/]vendor[\\/]example.com[\\/]q go list -f '{{.Dir}}' example.com/b stdout $GOPATH[\\/]src[\\/]vendor[\\/]example.com[\\/]b [short] skip rm b rm q1_0_0 rm q1_1_0 go run example.com/p stdout 'version 1.1.0' -- modules.txt.want -- ## workspace # example.com/b v1.0.0 => ./b ## explicit; go 1.18 example.com/b # example.com/q v1.0.0 => ./q1_0_0 ## explicit; go 1.18 # example.com/q v1.1.0 => ./q1_1_0 ## go 1.18 example.com/q -- go.work -- go 1.18 use ( ./a ./p ) -- a/go.mod -- module example.com/a go 1.18 require example.com/b v1.0.0 replace example.com/b v1.0.0 => ../b -- a/foo.go -- package main import "example.com/b" func main() { b.B() } -- b/go.mod -- module example.com/b go 1.18 require example.com/q v1.1.0 -- b/b.go -- package b func B() { } -- b/b_test.go -- package b import "example.com/q" func TestB() { q.PrintVersion() } -- p/go.mod -- module example.com/p go 1.18 require example.com/q v1.0.0 replace example.com/q v1.0.0 => ../q1_0_0 replace example.com/q v1.1.0 => ../q1_1_0 -- p/main.go -- package main import "example.com/q" func main() { q.PrintVersion() } -- q1_0_0/go.mod -- module example.com/q go 1.18 -- q1_0_0/q.go -- package q import "fmt" func PrintVersion() { fmt.Println("version 1.0.0") } -- q1_1_0/go.mod -- module example.com/q go 1.18 -- q1_1_0/q.go -- package q import "fmt" func PrintVersion() { fmt.Println("version 1.1.0") }