go在方法中修改結構體的值 Go語言中的反射機制

2021-10-14 03:06:25 字數 2551 閱讀 3753

反射是指在程式執行期間進行**的訪問和修改的

var arr [10]int =
見**的定義和賦值資訊,定義乙個變數包含兩個部分:

反射可以在執行時動態獲取程式的各種詳細資訊

(1)空介面與反射

反射獲取inte***ce型別資訊

package main

import (

"fmt"

"reflect"

)//反射獲取inte***ce型別的資訊

func reflect_type(a inte***ce{})

}func main()

編譯輸出:

type is:  float64

float64

a is floot64

(2) 反射修改值空介面資訊

func reflect_set_value(a inte***ce{}) 

}func main()

編譯輸出:

case: 2.1

824633761976

main: 2.1

(3)結構體與反射

//定義結構體

type people struct

func (u people) hello()

func poni(o inte***ce{})

fmt.println("***************==方法********************")

for i := 0; i < t.nummethod(); i++

}func main()

poni(p)

}

編譯輸出:

型別: main.people

字串型別: people

id : intval : 0

name : strin**al : xiaomi

age : intval : 18

***************==方法********************

hello

func(main.people)

// 匿名字段

type boy struct

func main() , "bj"}

t := reflect.typeof(m)

fmt.println(t)

// anonymous:匿名

fmt.printf("%#vn", t.field(0))

// 值資訊

fmt.printf("%#vn", reflect.valueof(m).field(0))

}

編譯輸出:

main.boy

reflect.structfield, anonymous:true}

main.people

// 修改結構體值

func setstructvalue(o inte***ce{})

}func main()

fmt.println("before update:", u)

setstructvalue(&u)

fmt.println("after update:", u)

}

編譯輸出:

before update: 

after update:

//定義結構體

type people struct

func (u people) printargs(arg string)

func main()

v := reflect.valueof(u)

//獲取方法

m := v.methodbyname("printargs")

//構建一下引數

args := reflect.value

//沒引數的情況下 :var args2 reflect.value

//呼叫方法,需要傳入方法的引數

m.call(args)

}

編譯輸出:

printargs: 8888

//修改結構體

type people struct

func main()

編譯輸出:

name1

name2

go 修改結構體方法 go結構體方法

golang中的方法是作用在特定型別的變數上,因此自定義型別,都可以有方法,而不僅僅是struct。定義格式 func var struct name funcname var0,var1.return type package main import fmt type test struct na...

go 結構體和方法

結構體型別的字面量由關鍵字type 型別名稱 關鍵字struct,以及由花括號包裹的若干字段宣告組成。type person struct person 鍵值對的順序與其型別中的字段宣告完全相同的話,我們還可以統一省略掉所有欄位的名稱 person 結構體型別的值字面量時可以只對它的部分字段賦值,甚...

GO中的結構體,方法以及介面

因為go中嗎,沒有類的概念,也不支援繼承這種操作,但是go具有結構體,並且結構體的組合方式比類更具有擴充套件性以及靈活性。type identifier struct 例如我們想宣告乙個學生的結構體型別 type student struct 結構體中字段的型別可以是任何型別,包括函式型別,介面型別...