During a particular build, the following build tags are satisfied:

   - ...
   - "unix", if GOOS is a Unix or Unix-like system.
   - ...


It then says:

If a file's name, after stripping the extension and a possible _test 
suffix, matches any of the following patterns:
*_GOOS *_GOARCH *_GOOS_GOARCH 

(example: source_windows_amd64.go) where GOOS and GOARCH represent any 
known operating system and architecture values respectively, then the file 
is considered to have an implicit build constraint requiring those terms 
(in addition to any explicit constraints in the file).

This says that only GOOS and GOARCH are considered; it doesn't say that all 
possible build tags are interpreted when in the filename, and indeed there 
are many that are not.  For example, "foo_gccgo.go" and "foo_go1.12.go" are 
not treated specially. So I think it's fairly clear here, as long as you 
accept that "unix" is neither a GOOS nor a GOARCH.

Aside: finding a comprehensive list of GOOS and GOARCH values is a bit 
tricker. You can run "go tool dist list", or there are third-party 
summaries like
https://gist.github.com/asukakenji/f15ba7e588ac42795f421b48b8aede63

On Thursday, 31 August 2023 at 10:44:14 UTC+1 Peter Galbavy wrote:

> Ah! Got it. Thanks.
>
> Would it perhaps be good to mention this in the docs, here: 
> https://pkg.go.dev/cmd/go#hdr-Build_constraints ?
>
> The bullet points refer to "unix" (which is true) and then a naïve reader, 
> like me, would think the later paragraphs about GOOS also apply.
>
> Peter 
>
> On Thursday, 31 August 2023 at 10:13:12 UTC+1 Brian Candler wrote:
>
>> https://github.com/golang/go/issues/51572
>>
>> On Thursday, 31 August 2023 at 08:57:15 UTC+1 Peter Galbavy wrote:
>>
>>> I have used comment level build constraints for a while but I moved to 
>>> using _linux.go and _windows.go over time as it makes it clearer for 
>>> external viewing.
>>>
>>> A user reported they tried to build on MacOS and of course this didn't 
>>> work. I renamed the _linux.go files to _unix.go suffixes but then when I do 
>>> "GOOS=windows go build" those files were pulled in too. While I would say 
>>> Windows is a POSIX-ish system I would contend it's not UNIX :-)
>>>
>>> I have gone and added "//go:build !windows" to all the renamed files for 
>>> now, but is this intended behaviour?
>>>
>>> Peter
>>>
>>

-- 
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+unsubscr...@googlegroups.com.
To view this discussion on the web visit 
https://groups.google.com/d/msgid/golang-nuts/1cfb5996-93ee-4ce6-94dc-eb7cc80bbc5dn%40googlegroups.com.

Reply via email to