Go 1.16 and modules

203 views
Skip to first unread message

Amit Saha

unread,
Mar 28, 2021, 8:19:29 PM3/28/21
to golang-nuts
Hi Folks,

I just realized that with Go 1.16, you must create a module via go mod
init, even if you are writing a simple hello world program.

The most surprising aspect to me was that I can only know that's the
case if I don't have a go.mod file anywhere in the parent directory
chain. It becomes quite a bit of a surprise element for folks writing
materials for others to follow.

Was this change documented in the release notes? We do have this:

"Module-aware mode is enabled by default, regardless of whether a
go.mod file is present in the current working directory or a parent
directory. More precisely, the GO111MODULE environment variable now
defaults to on. To switch to the previous behavior, set GO111MODULE to
auto. "

Is that implying the above behavior?

Reto

unread,
Mar 28, 2021, 9:15:25 PM3/28/21
to golang-nuts
On Mon, Mar 29, 2021 at 11:18:28AM +1100, Amit Saha wrote:
> "Module-aware mode is enabled by default, regardless of whether a
> go.mod file is present in the current working directory or a parent
> directory. More precisely, the GO111MODULE environment variable now
> defaults to on. To switch to the previous behavior, set GO111MODULE to
> auto. "
> Is that implying the above behavior?

Yes: https://golang.org/ref/mod#mod-commands

Note that you can still run the hello world programs via `go run` without
having a module.

Amit Saha

unread,
Mar 29, 2021, 12:33:57 AM3/29/21
to golang-nuts
Thanks.

>
> --
> You received this message because you are subscribed to the Google Groups "golang-nuts" group.
> To unsubscribe from this group and stop receiving emails from it, send an email to golang-nuts...@googlegroups.com.
> To view this discussion on the web visit https://groups.google.com/d/msgid/golang-nuts/20210329011453.3dddpz3syc6wv636%40feather.localdomain.

Rich

unread,
Mar 29, 2021, 7:52:06 PM3/29/21
to golang-nuts
I really WANT to use go modules on all my projects, but there are times I just want to write a quick piece of code that I can 'go run'. Its usually just 20 lines, just used to test something out like a rest call to an internal server (can't do that on go playground) and for me go modules just makes it more complex. So what I do is what Reto stated above, set an environment variable for GO111MODULE=OFF.  Now at the command line I can write a quick code sample and just type 'go run sample.go' and it runs.  For my projects where I want go modules I use a Make file:

GO111MODULE=on GOOS=linux GOARCH=amd64 go build $(compilerFlag) -o mygoproject mygoproject.go othergofiles.go...

Axel Wagner

unread,
Mar 29, 2021, 7:56:44 PM3/29/21
to golang-nuts
I understand many criticisms of modules, but I honestly don't really get this one.
You can just do `go mod init foo` in an empty directory, if all you want is some throwaway Go code. It doesn't actually seem very complicated to me, I must say.

Eli Bendersky

unread,
Mar 30, 2021, 12:05:18 AM3/30/21
to Rich, golang-nuts
On Mon, Mar 29, 2021 at 4:52 PM Rich <rma...@gmail.com> wrote:
I really WANT to use go modules on all my projects, but there are times I just want to write a quick piece of code that I can 'go run'. Its usually just 20 lines, just used to test something out like a rest call to an internal server (can't do that on go playground) and for me go modules just makes it more complex. So what I do is what Reto stated above, set an environment variable for GO111MODULE=OFF.  Now at the command line I can write a quick code sample and just type 'go run sample.go' and it runs.  For my projects where I want go modules I use a Make file:

GO111MODULE=on GOOS=linux GOARCH=amd64 go build $(compilerFlag) -o mygoproject mygoproject.go othergofiles.go...

I may have missed it, but could you clarify why you can't just create your sample.go and 'go run' it with Go 1.16? No need to create a module for this.

------------------------
/tmp$ ls go.mod
ls: cannot access 'go.mod': No such file or directory

/tmp$ cat sample.go
package main

import "fmt"

func main() {
   fmt.Println("hello")
}

/tmp$ go version
go version go1.16 linux/amd64

/tmp$ go run sample.go
hello
------------------------

Or is your 'sample.go' importing code from outside the standard library?

Eli



 

   

On Monday, March 29, 2021 at 12:33:57 AM UTC-4 amits...@gmail.com wrote:
On Mon, Mar 29, 2021 at 12:15 PM Reto <re...@labrat.space> wrote:
>
> On Mon, Mar 29, 2021 at 11:18:28AM +1100, Amit Saha wrote:
> > "Module-aware mode is enabled by default, regardless of whether a
> > go.mod file is present in the current working directory or a parent
> > directory. More precisely, the GO111MODULE environment variable now
> > defaults to on. To switch to the previous behavior, set GO111MODULE to
> > auto. "
> > Is that implying the above behavior?
>
> Yes: https://golang.org/ref/mod#mod-commands
>
> Note that you can still run the hello world programs via `go run` without
> having a module.

Thanks.

>
> --
> You received this message because you are subscribed to the Google Groups "golang-nuts" group.
> To unsubscribe from this group and stop receiving emails from it, send an email to golang-nuts...@googlegroups.com.
> To view this discussion on the web visit https://groups.google.com/d/msgid/golang-nuts/20210329011453.3dddpz3syc6wv636%40feather.localdomain.

--
You received this message because you are subscribed to the Google Groups "golang-nuts" group.
To unsubscribe from this group and stop receiving emails from it, send an email to golang-nuts...@googlegroups.com.

Jon Reiter

unread,
Mar 30, 2021, 12:10:54 AM3/30/21
to Axel Wagner, golang-nuts
i think it's gentler to look at this in the context of c's "hello world" program.  the first version was missing both #include and void.  then it got #include. then it got void.  i recall void issues with code from k&r v1 on my compiler in the mid 80s (i do not predate include statements).  i recall a brian kernighan talk where he comments on precisely this point as well.  for me it's not so much "it's easy just do it" but rather "it's fairly easy and worth it for the clarity."

yes i know those are code changes while this is the build process -- this is about quantum of effort required.  having said that: something to help with missing modules in dependencies would be helpful as that is significantly harder.  i was able to adjust c even as a novice.  a casual/beginner today is likely not able to fork-and-update a dependency.


Reply all
Reply to author
Forward
0 new messages