Go:Interface
Example
package main
import "fmt"
type Calculator interface {
plus() int
minus() int
}
//Parameter 정의
type Parameter struct {
n1, n2 int
}
//Parameter 타입에 대한 Calculator 인터페이스 구현
func (r Parameter) plus() int {
return r.n1 + r.n2
}
func (r Parameter) minus() int {
return r.n1 - r.n2
}
func showCalc(calc Calculator) {
fmt.Println(calc.plus())
fmt.Println(calc.minus())
}
func main() {
r := Parameter{30, 20}
showCalc(r)
}
Void Pointer 사용 방법
func _PointCloudDataService_UploadStream_Handler(srv interface{}, stream grpc.ServerStream) error {
return srv.(PointCloudDataServiceServer).UploadStream(&grpc.GenericServerStream[UploadRequest, dataops.UploadStreamResponse]{ServerStream: stream})
}
위와 같이 srv interface{} 인자를 사용하면 void* 같은 효과를 낸다.
캐스팅할 땐, srv.(캐스팅할 인터페이스).~ 처럼 사용하면 된다.