API 문서: http://godoc.org/github.com/samuel/go-thrift
3절 BSD. 라이센스 파일을 참조하세요.
Thrift는 다양한 언어에 대한 RPC 클라이언트 및 서버 바인딩을 생성하는 데 사용할 수 있는 IDL입니다. 이 패키지에는 Go용 클라이언트 및 서버 코덱, 직렬화, 코드 생성이 포함되어 있습니다. 다른 구현에 비해 언어에 더 자연스럽게 매핑하려고 합니다. 예를 들어 Go는 이미 ReadWriteCloser 인터페이스에서 중고품 전송에 대한 아이디어를 가지고 있습니다.
대부분의 유형은 기본 Go 유형에 직접 매핑되지만 몇 가지 단점과 제한 사항이 있습니다.
Go는 Thrift보다 맵 키에 대해 더 제한된 유형 세트를 지원합니다.
집합을 사용하려면 필드를 []type으로 정의하고 "set" 태그를 제공합니다.
StringSet []string `thrift:"1,set"`
[]byte는 Thrift 바이너리 유형이 통신상의 문자열과 동일하기 때문에 문자열로 인코딩/디코딩됩니다.
표준 Go net/rpc 패키지는 RPC를 제공하는 데 사용됩니다. 하지만 한 가지 비호환성은 net/rpc가 RPC 메서드 이름을 지정하기 위해 ServiceName.Method를 사용한다는 것입니다. 이 문제를 해결하기 위해 Thrift ServerCodec은 메서드 이름에 "Thrift"라는 접두사를 붙입니다.
대부분의 Thrift 라이브러리에는 특정 전송 "클래스"가 없습니다. 대신 표준 io.ReadWriteCloser
인터페이스로 사용됩니다. 값이 thrift.Flusher 인터페이스도 구현하는 경우 protocol.WriteMessageEnd
후에 Flush() error
호출됩니다.
프레임 전송은 io.ReadWriteCloser
thrift.NewFramedReadWriteCloser(value)
로 구현하는 값을 래핑하여 지원됩니다.
단방향 요청 지원은 RPC 코덱에서 명시적으로 활성화되어야 합니다. 기본적으로 허용되지 않는 이유는 Go RPC 패키지가 실제로 단방향 요청을 지원하지 않기 때문입니다. 이 문제를 해결하려면 채널을 사용하여 코덱에서 보류 중인 요청을 추적하고 응답을 위조하는 다소 버벅거리는 해킹이 필요합니다.
단방향 요청은 아직 서버 측에서 구현되지 않았습니다.
"parser" 하위 디렉터리에는 Thrift IDL 파서가 포함되어 있고 "generator"에는 Go 코드 생성기가 포함되어 있습니다. 다른 언어를 포함하도록 확장될 수 있습니다.
발전기를 사용하는 방법:
$ go install github.com/samuel/go-thrift/generator
$ generator --help
Usage of generator:
-go.binarystring
Always use string for binary instead of []byte
-go.importprefix string
Prefix for Thrift-generated go package imports
-go.json.enumnum
For JSON marshal enums by number instead of name
-go.pointers
Make all fields pointers
-go.signedbytes
Interpret Thrift byte as Go signed int8 type
$ generator cassandra.thrift $GOPATH/src/