Go語言怎麼判斷結構體是否存在某方法?以下這篇文章為大家介紹Golang判斷結構體是否存在某方法的兩種方式(附程式碼範例),希望對大家有幫助!
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中文網其他相關文章!