Text file src/cmd/go/testdata/script/work.txt

     1  [short] skip 'runs go run'
     2  
     3  ! go work init doesnotexist
     4  stderr 'go: directory doesnotexist does not exist'
     5  go env GOWORK
     6  ! stdout .
     7  
     8  go work init ./a ./b
     9  cmpenv go.work go.work.want
    10  go env GOWORK
    11  stdout '^'$WORK'(\\|/)gopath(\\|/)src(\\|/)go.work$'
    12  
    13  ! go run  example.com/b
    14  stderr 'a(\\|/)a.go:4:8: no required module provides package rsc.io/quote; to add it:\n\tcd '$WORK(\\|/)gopath(\\|/)src(\\|/)a'\n\tgo get rsc.io/quote'
    15  cd a
    16  go get rsc.io/quote
    17  cat go.mod
    18  go env GOMOD # go env GOMOD reports the module in a single module context
    19  stdout $GOPATH(\\|/)src(\\|/)a(\\|/)go.mod
    20  cd ..
    21  go run example.com/b
    22  stdout 'Hello, world.'
    23  
    24  # And try from a different directory
    25  cd c
    26  go run  example.com/b
    27  stdout 'Hello, world.'
    28  cd $GOPATH/src
    29  
    30  go list all # all includes both modules
    31  stdout 'example.com/a'
    32  stdout 'example.com/b'
    33  
    34  # -mod can only be set to readonly in workspace mode
    35  go list -mod=readonly all
    36  ! go list -mod=mod all
    37  stderr '^go: -mod may only be set to readonly or vendor when in workspace mode'
    38  env GOWORK=off
    39  go list -mod=mod all
    40  env GOWORK=
    41  
    42  # Test that duplicates in the use list return an error
    43  cp go.work go.work.backup
    44  cp go.work.dup go.work
    45  ! go run example.com/b
    46  stderr 'go.work:6: path .* appears multiple times in workspace'
    47  cp go.work.backup go.work
    48  
    49  cp go.work.d go.work
    50  go work use # update go version
    51  go run example.com/d
    52  
    53  # Test that we don't run into "newRequirements called with unsorted roots"
    54  # panic with unsorted main modules.
    55  cp go.work.backwards go.work
    56  go work use # update go version
    57  go run example.com/d
    58  
    59  # Test that command-line-arguments work inside and outside modules.
    60  # This exercises the code that determines which module command-line-arguments
    61  # belongs to.
    62  go list ./b/main.go
    63  env GOWORK=off
    64  go build -n -o foo foo.go
    65  env GOWORK=
    66  go build -n -o foo foo.go
    67  
    68  -- go.work.dup --
    69  go 1.18
    70  
    71  use (
    72  	a
    73  	b
    74  	../src/a
    75  )
    76  -- go.work.want --
    77  go $goversion
    78  
    79  use (
    80  	./a
    81  	./b
    82  )
    83  -- go.work.d --
    84  go 1.18
    85  
    86  use (
    87  	a
    88  	b
    89  	d
    90  )
    91  -- a/go.mod --
    92  
    93  module example.com/a
    94  
    95  -- a/a.go --
    96  package a
    97  
    98  import "fmt"
    99  import "rsc.io/quote"
   100  
   101  func HelloFromA() {
   102  	fmt.Println(quote.Hello())
   103  }
   104  
   105  -- b/go.mod --
   106  
   107  module example.com/b
   108  
   109  -- b/main.go --
   110  package main
   111  
   112  import "example.com/a"
   113  
   114  func main() {
   115  	a.HelloFromA()
   116  }
   117  -- b/lib/hello.go --
   118  package lib
   119  
   120  import "example.com/a"
   121  
   122  func Hello() {
   123  	a.HelloFromA()
   124  }
   125  
   126  -- c/README --
   127  Create this directory so we can cd to
   128  it and make sure paths are interpreted
   129  relative to the go.work, not the cwd.
   130  -- d/go.mod --
   131  module example.com/d
   132  
   133  -- d/main.go --
   134  package main
   135  
   136  import "example.com/b/lib"
   137  
   138  func main() {
   139  	lib.Hello()
   140  }
   141  
   142  -- go.work.backwards --
   143  go 1.18
   144  
   145  use (
   146  	d
   147  	b
   148  	a
   149  )
   150  
   151  -- foo.go --
   152  package main
   153  import "fmt"
   154  func main() {
   155  	fmt.Println("Hello, World")
   156  }
   157  

View as plain text