亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

golang中reflect包的常用方法

 更新時間:2025年07月02日 15:10:21   作者:草海桐  
Go反射reflect包提供類型和值方法,用于獲取類型信息、訪問字段、調(diào)用方法等,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧

reflect包方法總結(jié)

  p := Person{Name: "小明", Age: 22}
  t := reflect.TypeOf(&p)
  v := reflect.ValueOf(p)

類型 (Type) 方法

方法名描述示例               
Name()獲取類型的名稱t.Name()
Kind()獲取類型的種類(如 struct, int, string 等)t.Kind()
String()返回類型的完整名稱,包括包路徑t.String()

值 (Value) 方法

方法名描述示例               
FieldByName()根據(jù)字段名稱獲取字段的值v.FieldByName("Age")
NumField()獲取結(jié)構(gòu)體的字段數(shù)量v.NumField()
Field()根據(jù)索引獲取字段的值v.Field(i)
Interface()獲取字段的值作為 interface{} 類型v.Field(i).Interface()
String()返回值的字符串表示v.String()
Kind()獲取值的種類(與 Type().Kind() 相同)v.Kind()
Type()獲取值的類型信息v.Type()
Elem()返回指針指向的值reflect.ValueOf(&p).Elem()
SetString()設(shè)置字符串類型的值nameField.SetString("ChenZH")
MethodByName()根據(jù)方法名稱獲取方法的值ptr.MethodByName("String")
Call()調(diào)用方法,傳入?yún)?shù)(此處為 nil)method.Call(nil)
IsValid()檢查值是否有效method.IsValid()
CanSet()檢查字段是否可以設(shè)置nameField.CanSet()

代碼示例:

package main

import (
	"fmt"
	"reflect"
)

type Person struct {
	Name string
	Age  int
}

func main() {
	//Type:類型信息,包括基礎(chǔ)類型(如int, string)、復(fù)合類型(如數(shù)組、切片、結(jié)構(gòu)體)等。
	//Value:實(shí)際值,可以是任何類型的值。
	//Kind:更具體的類型分類,比如int, float64, struct等。

	// 獲取類型信息
	p := Person{Name: "小明", Age: 22}
	t := reflect.TypeOf(p)
	fmt.Println("Type_name:", t.Name())
	fmt.Println("Type_kind:", t.Kind())
	fmt.Println("Type_string:", t.String())

	// 獲取值信息
	v := reflect.ValueOf(p)
	fmt.Println(v.FieldByName("Age"))
	fmt.Println("Value:", v)
	for i := 0; i < v.NumField(); i++ {
		fmt.Println("Field:", i, "Value:", v.Field(i).Interface())
	}
	fmt.Println("Value_String", v.String())
	fmt.Println("Value_Kind", v.Kind())
	fmt.Println("Value_Type", v.Type())

	// 修改字段值(得傳遞指針)
	ptr := reflect.ValueOf(&p).Elem()
	fmt.Println("Ptr_Value:", ptr)
	nameField := ptr.FieldByName("Name")
	if nameField.IsValid() && nameField.CanSet() {
		nameField.SetString("xiaoming")
	}
	fmt.Println("modified name: ", p.Name)

	// 調(diào)用方法
	method := ptr.MethodByName("String")
	if method.IsValid() {
		results := method.Call(nil)
		for _, result := range results {
			fmt.Println("Method result: ", result.String())
		}
	}
}

func (p Person) String() string {
	return fmt.Sprintf("%s is %d year old", p.Name, p.Age)
}

到此這篇關(guān)于golang中reflect包的常用方法的文章就介紹到這了,更多相關(guān)golang reflect包內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家! 

相關(guān)文章

  • golang新手不注意可能會出現(xiàn)的一些小問題

    golang新手不注意可能會出現(xiàn)的一些小問題

    最近在學(xué)習(xí)golang,發(fā)現(xiàn)了一些新手們需要注意的小問題,下面這篇文章主要給大家介紹了關(guān)于golang新手不注意可能會出現(xiàn)的一些小問題,文中通過示例代碼介紹的非常詳細(xì),需要的朋友可以參考借鑒,下面來一起看看吧。
    2017-12-12
  • go語言睡眠排序算法實(shí)例分析

    go語言睡眠排序算法實(shí)例分析

    這篇文章主要介紹了go語言睡眠排序算法,實(shí)例分析了睡眠排序算法的原理與實(shí)現(xiàn)技巧,需要的朋友可以參考下
    2015-03-03
  • GoLang中的sync包Once使用執(zhí)行示例

    GoLang中的sync包Once使用執(zhí)行示例

    這篇文章主要介紹了GoLang中的sync包Once使用執(zhí)行示例,沒有學(xué)習(xí)Once前,大家可能想到 聲明一個標(biāo)識,表示是否初始化過,然后初始化這個標(biāo)識加鎖,更新這個標(biāo)識,Once包主要用于在并發(fā)執(zhí)行代碼的時候,某部分代碼只會被執(zhí)行一次
    2023-03-03
  • Go REFLECT Library反射類型詳解

    Go REFLECT Library反射類型詳解

    這篇文章主要為大家介紹了Go REFLECT Library反射類型詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2022-08-08
  • Golang實(shí)現(xiàn)IO操作

    Golang實(shí)現(xiàn)IO操作

    本文主要介紹了Golang實(shí)現(xiàn)IO操作,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2024-05-05
  • Go語言題解LeetCode1051高度檢查器示例詳解

    Go語言題解LeetCode1051高度檢查器示例詳解

    這篇文章主要為大家介紹了Go語言題解LeetCode1051高度檢查器示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2022-12-12
  • Go語言超時退出的三種實(shí)現(xiàn)方式總結(jié)

    Go語言超時退出的三種實(shí)現(xiàn)方式總結(jié)

    這篇文章主要為大家詳細(xì)介紹了Go語言中超時退出的三種實(shí)現(xiàn)方式,文中的示例代碼簡潔易懂,對我們深入了解Go語言有一定的幫助,需要的可以了解一下
    2023-06-06
  • golang根據(jù)URL獲取文件名的示例代碼

    golang根據(jù)URL獲取文件名的示例代碼

    這篇文章主要為大家詳細(xì)介紹了golang根據(jù)URL獲取文件名,文中的示例代碼講解詳細(xì),對大家的學(xué)習(xí)或工作有一定的幫助,感興趣的小伙伴可以跟隨小編一起學(xué)習(xí)一下
    2024-01-01
  • 一文完全掌握 Go math/rand(源碼解析)

    一文完全掌握 Go math/rand(源碼解析)

    這篇文章主要介紹了一文完全掌握 Go math/rand(源碼解析),本文可以幫助大家快速使用Go Rand.,感興趣的朋友跟隨小編一起看看吧
    2021-04-04
  • GoFrame實(shí)現(xiàn)順序性校驗(yàn)示例詳解

    GoFrame實(shí)現(xiàn)順序性校驗(yàn)示例詳解

    這篇文章主要為大家介紹了GoFrame實(shí)現(xiàn)順序性校驗(yàn)示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2022-06-06

最新評論