Hi Peter,

Thanks for mentioning gotypesalias.  Looking into that, I see that the
go1.23 release notes mention that:

    By default, go/types now produces Alias type nodes for type aliases.
This behavior can be controlled by the GODEBUG gotypesalias flag. Its
default has changed from 0 in Go 1.22 to 1 in Go 1.23.

This is supported by the test below.  By default go vet does not flag the
error, but it does if GODEBUG=gotypesalias=0 (so GODEBUG=gotypesalias=1 was
redundant in your command)

❯ go version
go version go1.23.0 darwin/arm64
echo $GODEBUG

❯ go vet sample.go
❯ GODEBUG=gotypesalias=0 go vet sample.go
# command-line-arguments
# [command-line-arguments]
vet: ./sample.go:15:4: invalid use of type alias B in recursive type (see
go.dev/issue/50729)

However on the Go playground go vet reports the error (
https://go.dev/play/p/fjy9259UHPY).  Does this mean that the Go playground
is configured with GODEBUG=gotypesalias=0? Is that not an issue with the Go
playground?  I think the Go playground should give output consistent with a
local installation.

Also it seems that gopls flags this error too by default, even though go
vet no longer does.  This also appears to me to be an issue, though a lot
harder to diagnose because I can only observe the outcome via the black box
of vscode (or another editor configured with gopls).  I do not know how to
run gopls as a standalone tool on a file (I do not even know if such a
thing is possible).

-- 
Arnaud

On Sun, 25 Aug 2024 at 18:10, peterGo <go.peter...@gmail.com> wrote:

> Arnaud,
>
> $ go version && go run alias.go && go vet alias.go
> go version devel go1.24-96d8ff00c2 Sat Aug 24 00:51:40 2024 +0000
> linux/amd64
> b = {X:0xc00011c190 Y:0xc00011c1a0}
> $
>
> Or
>
> $ go1.23 version && go1.23 run alias.go && GODEBUG=gotypesalias=1 go1.23
> vet alias.go
> go version go1.23.0 linux/amd64
> b = {X:0xc0000141c0 Y:0xc0000141d0}
> $
>
> peter
>
> On Saturday, August 24, 2024 at 5:37:20 PM UTC-4 Arnaud Delobelle wrote:
>
>> Hi all
>>
>> I ran into this error with generic types.  Here is the sample program
>> below, which is my best effort to boil it down to its simplest expression.
>>
>> I can build and run the program fine with go 1.23.0.  However, on line 15
>> vscode reports the error I put in the comment on that line. I do not know
>> how to determine what tool is instructing vscode to report this error (I
>> imagine it's gopls but I have no proof).
>>
>> package main
>>
>> import "fmt"
>>
>> func main() {
>> b := B{X: &A1{X: B{}}, Y: &A2{X: B{}}}
>> fmt.Printf("b = %#v", b)
>> }
>>
>> type A1 struct {
>> X B
>> }
>>
>> type A2 struct {
>> X B // invalid use of type alias B in recursive type (see
>> go.dev/issue/50729)compilerInvalidDeclCycle
>> }
>>
>> type G[T1, T2 any] struct {
>> X *T1
>> Y *T2
>> }
>>
>> type B = G[A1, A2]
>>
>>
>> Here is the same program in the go playground:
>> https://go.dev/play/p/fjy9259UHPY.  If I click "Run" I get this output:
>>
>> # [play]
>> vet: ./prog.go:15:4: invalid use of type alias B in recursive type (see 
>> go.dev/issue/50729)
>> Go vet failed.
>> b = {X:0xc00009e050 Y:0xc00009e060}
>> Program exited.
>>
>>
>> So "go vet" fails, but the program builds and runs OK.  However, if I run
>> "go vet" on my machine, no errors are reported!
>>
>> Can someone explain what is happening? To sum up
>> - the program builds and runs even though an error is reported in vscode
>> and the same error by go vet on the Go playground
>> - go vet reports an error in the Go playground, but not on my machine
>> (they both reportedly run go 1.23.0)
>> - possibly gopls reports this error too?  I do not know if it is the tool
>> that tells vscode of the error on my machine (I run gopls 0.16.1)
>>
>> What I'd like to know:
>> - if someone can tell me how to determine what tool is telling vscode to
>> report this error, it would help me find where to report this issue
>> - if someone could confirm whether the program is indeed supposed to be
>> correct, it would also help me (I suspect it should be correct, as it
>> builds and runs successfully)
>>
>> Thanks in advance
>>
>> --
>> Arnaud
>>
>> PS: Apologies for the html-formatted email, but I couldn't figure out how
>> to paste code into gmail without losing all the indentation
>>
>> --
> 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/3084309c-bac4-4851-ab1f-364568b4400cn%40googlegroups.com
> <https://groups.google.com/d/msgid/golang-nuts/3084309c-bac4-4851-ab1f-364568b4400cn%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/CAJ6cK1Z1tAzmqWdUoLQkh5UZBFZDKvNoBkECsYqbh8mrYgF_uA%40mail.gmail.com.

Reply via email to