[ https://issues.apache.org/jira/browse/THRIFT-4195?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=16009343#comment-16009343 ]
Allen George commented on THRIFT-4195: -------------------------------------- [~jensg] [~jking3] So, not sure what the correct approach is here. Tested this out locally, and it seems like the code in master does the appropriate thing. > Compilation to GO produces broken code > -------------------------------------- > > Key: THRIFT-4195 > URL: https://issues.apache.org/jira/browse/THRIFT-4195 > Project: Thrift > Issue Type: Bug > Components: Go - Compiler > Affects Versions: 0.10.0 > Environment: MacOS 10.12.4 (16E195) > go version go1.8.1 darwin/amd64 > Reporter: Stanislav Baranov > Priority: Critical > Attachments: GoUnusedProtection__.go, sample-consts.go, sample.go, > sample.thrift > > > Sample source file (see attached sample.thrift): > {code} > namespace go reports > typedef string ReportState > const ReportState ReportStateQueued = "QUEUED"; > const ReportState ReportStateCalculating = "CALCULATING"; > const ReportState ReportStateImporting = "IMPORTING"; > const ReportState ReportStateFinished = "FINISHED"; > const ReportState ReportStateFailed = "FAILED"; > struct ReportFilter { > 1: i64 quantity, > 2: i64 dataVersion, > 3: string subscriptionID, > 4: optional string principalID, > 5: optional string createdOn, > 6: optional list<ReportState> states, > } > {code} > after compilation as: > {{thrift -r -v -o ./ -out ./go --gen go:package_prefix="git.4tree.de/" > ./sample.thrift}} > Produces code (see attached sample.go) which contains: > {code} > func (p *ReportFilter) ReadField6(iprot thrift.TProtocol) error { > _, size, err := iprot.ReadListBegin() > if err != nil { > return thrift.PrependError("error reading list begin: ", err) > } > tSlice := make([]ReportState, 0, size) > p.States = tSlice > for i := 0; i < size; i ++ { > var _elem0 string > if v, err := iprot.ReadString(); err != nil { > return thrift.PrependError("error reading field 0: ", err) > } else { > _elem0 = v > } > p.States = append(p.States, _elem0) > } > if err := iprot.ReadListEnd(); err != nil { > return thrift.PrependError("error reading list end: ", err) > } > return nil > } > {code} > When trying to compile this code, GO triggers an error: > {code} > cannot use _elem0 (type string) as type ReportState in append > {code} > at line: > {code} > p.States = append(p.States, _elem0) > {code} > This code compiles normal using thrift 0.9.3 -- This message was sent by Atlassian JIRA (v6.3.15#6346)