Johannes Martinsson created THRIFT-2955: -------------------------------------------
Summary: Using list of typedefs does not compile Key: THRIFT-2955 URL: https://issues.apache.org/jira/browse/THRIFT-2955 Project: Thrift Issue Type: Bug Components: Go - Compiler Affects Versions: 0.9.2 Environment: Using golang 1.4 on linux/amd64 Reporter: Johannes Martinsson Using a list with a typedefed value in a struct does not generate compilable Go code. Here is a small example definition which generates uncompilable code on at least 0.9.2 and git master (as of the reporting of this issue). {code:thrift} namespace go poc typedef i64 X struct Y { 1: list<X> xs } {code} I've extracted some of the relevant snippets of code from the generated Go code. {code:go} type X int64 type Y struct { Xs []int64 `thrift:"xs,1" json:"xs"` } func (p *Y) ReadField1(ipot thrift.TProtocol) error { tSlice := make([]int64, 0, size) for i := 0; i < size; i++ { var _elem0 X // _elem0 declared as X above // [...] temp := X(v) _elem0 = temp // [...] // Trying to append _elem0 (of type X) to p.Xs of type []int64 p.Xs = append(p.Xs, _elem0) } } {code} The issue is that the code is trying to append the typedefed type to a list of the underlying type. I.e. appending {{X}} to a list of {{int64}}. Smallest code change to make the generated code work is to cast {{_elem0}} to {{int64}} in the {{append}} operation. However it might be better to actually have {{p.Xs}} be of type {{[]X}} rather than {{[]int64}}. (Currently I'm manually patching my generated Go code with type casts before appending to these lists.) -- This message was sent by Atlassian JIRA (v6.3.4#6332)