Rumah  >  Artikel  >  pembangunan bahagian belakang  >  Bagaimanakah bahasa Go menentukan sama ada kaedah tertentu wujud dalam struktur? Dua cara untuk memperkenalkan

Bagaimanakah bahasa Go menentukan sama ada kaedah tertentu wujud dalam struktur? Dua cara untuk memperkenalkan

青灯夜游
青灯夜游ke hadapan
2023-02-14 19:32:304296semak imbas

Bagaimana untuk menentukan sama ada kaedah wujud dalam struktur dalam bahasa Go? Artikel berikut akan memperkenalkan kepada anda dua cara dalam Golang untuk menentukan sama ada kaedah tertentu wujud dalam struktur (dengan contoh kod saya harap ia akan membantu anda).

Bagaimanakah bahasa Go menentukan sama ada kaedah tertentu wujud dalam struktur? Dua cara untuk memperkenalkan

go Kadang-kadang anda perlu menilai sama ada struktur tertentu mempunyai kaedah tertentu, tetapi anda mungkin tiba-tiba berasa keliru. Go juga boleh menilai seperti PHP

Ya , walaupun go tidak menyediakan kaedah sedia, anda boleh menggunakan logik sedia ada untuk merangkum pelaksanaan.

Pada masa ini terdapat dua kaedah yang tersedia Satu ialah mengetahui kaedah lengkap dan boleh menggunakan penegasan antara muka untuk menilai.

Sediakan struktur yang perlu dinilai:

type  RefData  struct  {}

func  (this  *RefData)  Show(data  any,  name  string)  string  {
  data2  :=  data.(string)  +  "==="  +  name

  return  data2
}

Penghakiman penegasan antara muka:

refDataExists := false
var refDataOb any = &RefData{}
if _, ok := refDataOb.(interface {
    Show(any, string) string
}); ok {
    refDataExists = true
}

Penghakiman refleksi:

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")

[Pembelajaran yang disyorkan: pergi tutorial video]

Atas ialah kandungan terperinci Bagaimanakah bahasa Go menentukan sama ada kaedah tertentu wujud dalam struktur? Dua cara untuk memperkenalkan. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
Artikel ini dikembalikan pada:learnku.com. Jika ada pelanggaran, sila hubungi admin@php.cn Padam