[ 
https://issues.apache.org/jira/browse/THRIFT-3037?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=18112588#comment-18112588
 ] 

Sylwester Lachiewicz commented on THRIFT-3037:
----------------------------------------------

THRIFT-6197 tracks this together with THRIFT-3037, THRIFT-3491, THRIFT-4901, 
THRIFT-5489 and THRIFT-5601. All of them come from the Go generator deciding a 
field's type from the typedef instead of from the type it resolves to, and 
emitting a typedef of a struct as {{type Alias *Inner}} - a defined type that 
carries none of the struct's methods, so the generated package does not compile.

The include shape reported here is covered by TypedefIncludeTest.thrift in the 
fix.

The fix generates a Go type alias ({{type Alias = Inner}}) instead, and is up 
for review at https://github.com/apache/thrift/pull/3812

_This comment was created with AI assistance._

> Can not build Go code when using typedef in IDL
> -----------------------------------------------
>
>                 Key: THRIFT-3037
>                 URL: https://issues.apache.org/jira/browse/THRIFT-3037
>             Project: Thrift
>          Issue Type: Bug
>          Components: Go - Compiler
>    Affects Versions: 0.9.2
>            Reporter: Joe Bruner
>            Priority: Major
>          Time Spent: 2h 40m
>  Remaining Estimate: 0h
>
> {code}
> // Base.thrift
> namespace go a.X.c
> struct Foo {
>     1: required string s
> }
> {code}
> and the dependent file
> {code}
> // Child.thrift
> namespace go a.Y.c
> include "Base.thrift"
> typedef Base.Foo Foo // <---- This is what causes the problem
> struct Bar {
>     1:Foo f  // <-- Will error
>     // 1:Base.Foo f   Need to comment out typedef and use this instead
> }
> {code}
> Compiling the thrift as is works, but when you go to install the a.Y.c 
> package will produce:
> {code}
> /scratch/go/src/a/Y/c/ttypes.go:78: cannot use c.Foo literal (type *c.Foo) as 
> type *Foo in assignment
> /scratch/go/src/a/Y/c/ttypes.go:79: p.F.Read undefined (type *Foo has no 
> field or method Read)
> /scratch/go/src/a/Y/c/ttypes.go:105: p.F.Write undefined (type *Foo has no 
> field or method Write)
> {code}
> If I comment out the typedef and swap the lines in Bar then everything works 
> fine. This appears to only happen in Go.



--
This message was sent by Atlassian Jira
(v8.20.10#820010)

Reply via email to