> 백엔드 개발 > Golang > Go 언어는 구조에 특정 메소드가 존재하는지 여부를 어떻게 결정합니까? 소개하는 두 가지 방법

Go 언어는 구조에 특정 메소드가 존재하는지 여부를 어떻게 결정합니까? 소개하는 두 가지 방법

青灯夜游
풀어 주다: 2023-02-21 19:44:16
앞으로
4323명이 탐색했습니다.

Go 언어의 구조에 메소드가 존재하는지 어떻게 확인하나요? 다음 기사에서는 Golang에서 특정 메소드가 구조에 존재하는지 확인하는 두 가지 방법을 소개합니다(코드 예제 포함).

Go 언어는 구조에 특정 메소드가 존재하는지 여부를 어떻게 결정합니까? 소개하는 두 가지 방법

go 때로는 특정 구조에 특정 메소드가 있는지 판단해야 하지만 갑자기 혼란스러울 수도 있습니다. Go도 PHP처럼 판단할 수 있습니다

그렇습니다. 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")
로그인 후 복사

[추천 학습: go 비디오 튜토리얼]

위 내용은 Go 언어는 구조에 특정 메소드가 존재하는지 여부를 어떻게 결정합니까? 소개하는 두 가지 방법의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

관련 라벨:
원천:learnku.com
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿