Rumah >pembangunan bahagian belakang >Golang >Dua cara untuk Golang menentukan sama ada kaedah wujud dalam struktur (dengan contoh kod)

Dua cara untuk Golang menentukan sama ada kaedah wujud dalam struktur (dengan contoh kod)

藏色散人
藏色散人ke hadapan
2022-11-28 16:22:165882semak imbas

Artikel ini akan mengajar anda tentang Golang dan bercakap tentang cara Golang menentukan sama ada struktur mempunyai kaedah tertentu, saya harap ia akan membantu semua orang.

Dua cara untuk Golang menentukan sama ada kaedah wujud dalam struktur (dengan contoh kod)

go Menentukan sama ada struktur mempunyai kaedah tertentu

go Kadang-kadang perlu untuk menentukan sama ada struktur tertentu mempunyai kaedah tertentu kaedah , tetapi anda mungkin tiba-tiba berasa keliru, pergi juga boleh menilai seperti php

Ya, walaupun go tidak menyediakan kaedah siap sedia, ia boleh dilaksanakan menggunakan logik sedia ada untuk merangkumnya. [Pembelajaran yang disyorkan: pergi tutorial video]

Pada masa ini terdapat dua kaedah yang boleh digunakan Satu ialah mengetahui kaedah lengkap dan boleh menggunakan kaedah penegasan antara muka untuk menilai, dan yang kedua adalah menggunakan pertimbangan yang lengkap.

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

Atas ialah kandungan terperinci Dua cara untuk Golang menentukan sama ada kaedah wujud dalam struktur (dengan contoh kod). 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