Skip to content

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.(캐스팅할 인터페이스).~ 처럼 사용하면 된다.

See also