I'm stumped on this one. In the project that I'm working on, we generate go code from Thrift. The code gets created in the package A/B/thriftapi (which used to be A/B/thrift which was causing problems because all of the generated code was importing git.apache.org/thrift.git/lib/go/thrift
and causing name collisions).
I generated the code and moved the code into $GOPATH/src/A/B/D
I then tried to build my project and was getting tons of errors of the form:
p.X.Read undefined (type Foo has no field or method Read)
I looked at one of the offending lines:
import (
"A/B/D"
"git.apache.org/thrift.git/lib/go/thrift"
)
func(p *Bar) readField1(iprot thrift.TProtocol) error {
p.X = D.NewFoo()
if err := p.X.Read(iprot); err != nil {
...
}
Since I am using IntelliJ, I CTRL+clicked on the Read()
method and sure enough it jumps to $GOPATH/A/B/D/ttypes.go
to the method
func (p *Foo) Read(iprot thrift.TProtocol) error {
...
}
That's exactly the file I'd expect the method to be in, and it's a method on a pointer to Foo
so no problems there. Everything seems like it should be right, but both in IntelliJ and on the command line I get these problems.
Any ideas what might be going wrong? It's frustrating when it tells me the method doesn't exist, yet will take me right to it if I click on it (and also pops up in the intellisense)
EDIT - Per comment
type Bar struct {
X Foo `thrift:"x,1,required"`
}