이 기사는 Golang을 배우고 Golang이 구조에 특정 방법이 있는지 여부를 어떻게 결정하는지에 대해 이야기하는 데 도움이 될 것입니다.
go 구조체에 특정 메서드가 있는지 확인
go 때로는 특정 구조체에 특정 메서드가 있는지 판단해야 하지만 갑자기 혼란스러울 수도 있습니다. Go도 PHP처럼 판단할 수 있습니다
네, go는 미리 만들어진 메소드를 제공하지 않지만 기존 로직을 사용하여 구현을 캡슐화할 수 있습니다. [추천 학습: go 비디오 튜토리얼]
현재 사용할 수 있는 방법은 두 가지가 있습니다. 하나는 완전한 방법을 알고 인터페이스 어설션을 사용하여 판단하는 것이고, 두 번째는 반사를 사용하여 판단을 완료하는 것입니다.
판단해야 할 구조 준비:
type RefData struct {} func (this *RefData) Show(data any, name string) string { data2 := data.(string) + "===" + name return data2 }
인터페이스 주장 판단:
refDataExists := false var refDataOb any = &RefData{} if _, ok := refDataOb.(interface { Show(any, string) string }); ok { refDataExists = true }
반사 판단:
import( "reflect" ) // 判断结构体方法是否存在 func MethodExists(in any, method string) bool { if method == "" { return false } p := reflect.TypeOf(in) if p.Kind() == reflect.Pointer { p = p.Elem() } // 不是结构体时 if p.Kind() != reflect.Struct { return false } object := reflect.ValueOf(in) // 获取到方法 newMethod := object.MethodByName(method) if !newMethod.IsValid() { return false } return true } // 使用 refDataExists := MethodExists(&RefData{}, "Show")
위 내용은 Golang이 메소드가 구조에 존재하는지 확인하는 두 가지 방법(코드 예제 포함)의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!