反射是指在程式執行期間進行**的訪問和修改的
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 結構體中字段的型別可以是任何型別,包括函式型別,介面型別...