> Maybe it shouldn't.

By my knowledge, the version specified in go.mod doesn't prevent APIs newer 
than the version to be used. This is design.

=====

OK. It looks a Go project with version declared as 1.15 in go.mod and 
importing "embed" also compiles okay with Go toolchain 1.16
So the key distinction is whether there are "//go:embed" directives are 
used.
Here, I tested four setups (all with version declared as 1.15 in go.mod and 
compile with Go toolechain 1.16:
1. a source file importing "io/fs". It compiles okay.
2. a source file importing "embed" but not using "//go:embed". It also 
compiles okay.
3. a source file importing "embed" and using "//go:embed". It fails to 
compile with an error "go:embed requires go1.16 or later (-lang was set to 
go1.15; check go.mod)"
4. a source file importing using "//go:embed" and not importing 1.16 new 
packages. It fails to compile with an error "usage: //go:embed pattern...".

I don't know whether or not it is intended to let the latter two cases 
report different errors.





On Tuesday, March 2, 2021 at 8:25:53 AM UTC-5 axel.wa...@googlemail.com 
wrote:

> Maybe it shouldn't.
>
> FWIW, there is one significant difference, which is that `//go:embed` 
> needs support from the go tool and compiler to work. That is, the files 
> need to be read and we need to emit initialization code for the variables 
> holding the embedded files. So, a go toolchain that is not aware of 
> embedding can't possibly compile the code (correctly).
>
> On Tue, Mar 2, 2021 at 2:19 PM tapi...@gmail.com <tapi...@gmail.com> 
> wrote:
>
>> What is the difference between "embed" and "io/fs"?
>> A Go project with version declared as 1.15 in go.mod and using "io/fs" 
>> compiles okay with Go toolchain 1.16.
>>
>> On Tuesday, March 2, 2021 at 7:50:15 AM UTC-5 axel.wa...@googlemail.com 
>> wrote:
>>
>>> Okay, sorry for the multiple, quick mails, but:
>>> I would even say it *has* to be done the way it is. Because otherwise 
>>> compilation will *not* fail, if you declare a wrong go version to use. That 
>>> is, if you use `//go:embed`, declare your used version as go 1.15 and test 
>>> it yourself using go 1.16, your module is broken. Users of your module that 
>>> only have go 1.15 will break and get a crypting error message about `embed` 
>>> being missing, instead of a reasonable message that their go version is not 
>>> fresh enough.
>>> I don't understand why you'd want a broken module to compile.
>>>
>>> On Tue, Mar 2, 2021 at 1:46 PM Axel Wagner <axel.wa...@googlemail.com> 
>>> wrote:
>>>
>>>> Sorry, I have to walk that back - my test code was wrong, you are 
>>>> correct, compilation fails.
>>>> The point still stands - they require 1.16, so they set that, not 1.15. 
>>>> Either way - compilation will fail, why does it matter if it fails because 
>>>> `embed` doesn't exist before 1.16, or whether it fails because 
>>>> `//go:embed` 
>>>> is not supported before 1.16?
>>>>
>>>> On Tue, Mar 2, 2021 at 1:42 PM Axel Wagner <axel.wa...@googlemail.com> 
>>>> wrote:
>>>>
>>>>> There would be no advantage to that - all features are either 
>>>>> available, or not available, depending on which version you use. There is 
>>>>> no "go 1.16 without `embed`". It also needs to be set in `go.mod`, 
>>>>> because 
>>>>> you might compile modules written for different go versions into one 
>>>>> binary 
>>>>> - so which language version to use is part of the module description.
>>>>> So, no. Putting a language version into `go.mod` seems to be exactly 
>>>>> the right way to do this.
>>>>>
>>>>> On Tue, Mar 2, 2021 at 12:21 PM tapi...@gmail.com <tapi...@gmail.com> 
>>>>> wrote:
>>>>>
>>>>>> BTW, I think the embedding functionality introduced in Go 1.16 should 
>>>>>> not be viewed as a feature.
>>>>>> It should be viewed as an API change instead.
>>>>>>
>>>>>
>>>>> I don't understand what you mean by this. There is no intrinsic 
>>>>> difference between the two. In this particular case, the `embed` package 
>>>>> adds an API to support a new feature "embedding static files in go 
>>>>> binaries".
>>>>>  
>>>>>
>>>>>> Now Go projects using embedding and setting go directive verison as 
>>>>>> v1.15 in go.mod fail to compile with Go toolchain 1.16.
>>>>>>
>>>>>
>>>>> They shouldn't do that. If they use `embed`, they require at least go 
>>>>> 1.16, so they set that.
>>>>> I can't reproduce your claim that setting `go 1.15` and using embed 
>>>>> will fail to compile with a Go 1.16 toolchain. It works fine for me.
>>>>>
>>>>> IMO, this is unnecessary, for the "//go:embed" directive always 
>>>>>> requires importing the "embed" package.
>>>>>>
>>>>>> On Tuesday, March 2, 2021 at 6:14:23 AM UTC-5 tapi...@gmail.com 
>>>>>> wrote:
>>>>>>
>>>>>>> Would be better to use compile flags to control each language 
>>>>>>> features individually?
>>>>>>>
>>>>>> -- 
>>>>>> 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/c8e1bd96-78e2-434a-a0cc-4356382e49fcn%40googlegroups.com
>>>>>>  
>>>>>> <https://groups.google.com/d/msgid/golang-nuts/c8e1bd96-78e2-434a-a0cc-4356382e49fcn%40googlegroups.com?utm_medium=email&utm_source=footer>
>>>>>> .
>>>>>>
>>>>> -- 
>> 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/3bc3bcfc-48d5-47c8-abb0-8fd3197765b8n%40googlegroups.com
>>  
>> <https://groups.google.com/d/msgid/golang-nuts/3bc3bcfc-48d5-47c8-abb0-8fd3197765b8n%40googlegroups.com?utm_medium=email&utm_source=footer>
>> .
>>
>

-- 
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/9acdb3f8-839e-4712-927b-4002fb469c90n%40googlegroups.com.

Reply via email to