国产亚洲精品福利在线无卡一,国产精久久一区二区三区,亚洲精品无码国模,精品久久久久久无码专区不卡

當(dāng)前位置: 首頁 > news >正文

煩惱可以做網(wǎng)站嗎搜索熱度查詢

煩惱可以做網(wǎng)站嗎,搜索熱度查詢,如何在亞馬遜開店,新都區(qū)建設(shè)局網(wǎng)站Golang 進(jìn)階5—— 反射 注意,該文檔只適合有編程基礎(chǔ)的同學(xué),這里的go教程只給出有區(qū)別的知識點(diǎn) 反射: 反射可以在運(yùn)行時(shí)動(dòng)態(tài)獲取變量的各種信息, 比如變量的類型、 類別等信息。如果是結(jié)構(gòu)體變量,還可以獲取結(jié)構(gòu)體本…

Golang 進(jìn)階5—— 反射

注意,該文檔只適合有編程基礎(chǔ)的同學(xué),這里的go教程只給出有區(qū)別的知識點(diǎn)

反射:

  • 反射可以在運(yùn)行時(shí)動(dòng)態(tài)獲取變量的各種信息, 比如變量的類型、 類別等信息。
  • 如果是結(jié)構(gòu)體變量,還可以獲取結(jié)構(gòu)體本身的信息(結(jié)構(gòu)體的字段、方法)。
  • 通過反射, 可以修改變量的值,可以調(diào)用關(guān)聯(lián)的方法。
  • 使用反射, 需要import(“reflect”)
1.1 main函數(shù)
package mainimport ("fmt""reflect"
)// 利用一個(gè)函數(shù), 函數(shù)的參數(shù)定義為空接口
// 空接口沒有任何方法,所以可以理解為所有類型都實(shí)現(xiàn)了空接口
// 也可以理解為我們可以把任何一種類型賦值給空接口
func testReflect (data interface{}) {// 1、 調(diào)用 TypeOf函數(shù), 返回reflect.Type 類型的數(shù)據(jù)fmt.Println("data type is ", reflect.TypeOf(data))// 2、 調(diào)用 ValueOf函數(shù), 返回reflect.Value 類型的數(shù)據(jù)reVal := reflect.ValueOf(data)fmt.Println("data value is ", reVal)// 3、 如果要獲取具體類型的值, 可以調(diào)用 Int 方法sum := 100 + reVal.Int()fmt.Println("sum is ", sum)// 4、 reVal 轉(zhuǎn)成空接口i2  := reVal.Interface()fmt.Println("i2 is ", i2)// 5、類型斷言n := i2.(int)n2 := n + 200fmt.Println("n2 is ", n2)fmt.Println("i2 type is ", reflect.TypeOf(i2))
}
1.2 輸出結(jié)果
(base) PS E:\Goproject\src\gocode\testproject03> go run .\main\main.go
data type is  int
data value is  10
sum is  110
i2 is  10
n2 is  210
i2 type is  int
1.3 結(jié)構(gòu)體情況
import ("fmt""reflect"
)type Student struct {Name stringAge int
}// 利用一個(gè)函數(shù), 函數(shù)的參數(shù)定義為空接口
// 空接口沒有任何方法,所以可以理解為所有類型都實(shí)現(xiàn)了空接口
// 也可以理解為我們可以把任何一種類型賦值給空接口
func testReflect (data interface{}) {// 1、 調(diào)用 TypeOf函數(shù), 返回reflect.Type 類型的數(shù)據(jù)fmt.Println("data type is ", reflect.TypeOf(data))// 2、 調(diào)用 ValueOf函數(shù), 返回reflect.Value 類型的數(shù)據(jù)reVal := reflect.ValueOf(data)fmt.Println("data value is ", reVal)// 3、 reVal 轉(zhuǎn)成空接口i2 := reVal.Interface()fmt.Println("i2 is ", i2)if s, ok := i2.(Student); ok {fmt.Println("i2 is student:", s.Name)} else {fmt.Println("i2 is not a student")}
}func main () {stu1 := Student{"xiaoxiao", 18}testReflect(stu1)
}
1.4 輸出結(jié)果
(base) PS E:\Goproject\src\gocode\testproject03> go run .\main\main.go
data type is  main.Student
data value is  {xiaoxiao 18}
i2 is  {xiaoxiao 18}
i2 is student: xiaoxiao
1.5 獲取變量類別
import ("fmt""reflect"
)type Student struct {Name stringAge int
}// 利用一個(gè)函數(shù), 函數(shù)的參數(shù)定義為空接口
// 空接口沒有任何方法,所以可以理解為所有類型都實(shí)現(xiàn)了空接口
// 也可以理解為我們可以把任何一種類型賦值給空接口
func testReflect (data interface{}) {// 1、 調(diào)用 TypeOf函數(shù), 返回reflect.Type 類型的數(shù)據(jù)reType := reflect.TypeOf(data)fmt.Println("data type is ", reType)// 2、 調(diào)用 ValueOf函數(shù), 返回reflect.Value 類型的數(shù)據(jù)reVal := reflect.ValueOf(data)fmt.Println("data value is ", reVal)// 3、 獲取變量的類別(大范圍)k1 := reVal.Kind()fmt.Println("data kind is ", k1)k2 := reType.Kind()fmt.Println("data kind is ", k2)// 4、 獲取變量的類型 (小范圍)i2 := reVal.Interface()if n, ok := i2.(Student); ok {fmt.Println("n is ", n)} else {fmt.Println("n is not Student")}}func main () {stu1 := Student{"xiaoxiao", 18}testReflect(stu1)
}
1.6 輸出結(jié)果
(base) PS E:\Goproject\src\gocode\testproject03> go run .\main\main.go
data type is  main.Student
data value is  {xiaoxiao 18}
data kind is  struct
data kind is  struct
n is  {xiaoxiao 18}
1.7 對結(jié)構(gòu)體操作
// 1. 定義結(jié)構(gòu)體
type Student struct {Name stringAge  int
}// 2. 給結(jié)構(gòu)體綁定方法
func (stu Student) Print() {fmt.Print("調(diào)用了Print方法")fmt.Println(stu)
}func (stu Student) GetSum(n1, n2 int) int {return n1 + n2
}func (stu Student) Set(name string, age int) {stu.Name = namestu.Age = age
}func testReflect(data interface{}) {reVal := reflect.ValueOf(data)// 檢查 data 是否是指針,并獲取指向的值if reVal.Kind() == reflect.Ptr {reVal = reVal.Elem()}fmt.Println(reVal)// 獲取結(jié)構(gòu)體中字段的數(shù)量n1 := reVal.NumField()fmt.Println("字段的數(shù)量:", n1)for i := 0; i < n1; i++ {// 輸出字段fmt.Printf("字段 %d 的名字是 %s, 對應(yīng)的值為 %v \n", i, reVal.Type().Field(i).Name, reVal.Field(i))}// 獲取結(jié)構(gòu)體的方法數(shù)量n2 := reVal.NumMethod()fmt.Println("方法的數(shù)量:", n2)// 輸出方法for i := 0; i < n2; i++ {// 輸出方法fmt.Printf("方法 %d 的名字是 %s \n", i, reVal.Type().Method(i).Name)}// 調(diào)用方法, 調(diào)用的方法首字母必須大寫reVal.MethodByName("Print").Call(nil)// 調(diào)用GetSum方法// 定義Value切片var params []reflect.Valueparams = append(params, reflect.ValueOf(10))params = append(params, reflect.ValueOf(20))sum := reVal.MethodByName("GetSum").Call(params)fmt.Println("sum = ", sum[0])
}func main() {stu := Student{Name: "Tom", Age: 18}testReflect(stu) // 傳入 stu 的指針
}
1.8 輸出結(jié)果
(base) PS E:\Goproject\src\gocode\testproject03> go run .\main\main.go
{Tom 18}
字段的數(shù)量: 2
字段 0 的名字是 Name, 對應(yīng)的值為 Tom
字段 1 的名字是 Age, 對應(yīng)的值為 18
方法的數(shù)量: 3
方法 0 的名字是 GetSum
方法 1 的名字是 Print
方法 2 的名字是 Set
調(diào)用了Print方法{Tom 18}
sum =  30
1.9 改值
import ("fmt""reflect"
)// 1. 定義結(jié)構(gòu)體
type Student struct {Name stringAge  int
}// 2. 給結(jié)構(gòu)體綁定方法
func (stu Student) Print() {fmt.Print("調(diào)用了Print方法")fmt.Println(stu)
}func (stu Student) GetSum(n1, n2 int) int {return n1 + n2
}func (stu Student) Set(name string, age int) {stu.Name = namestu.Age = age
}func testReflect(data interface{}) {reVal := reflect.ValueOf(data)// 通過setInt方法修改值n := reVal.Elem().NumField()fmt.Println("結(jié)構(gòu)體中字段個(gè)數(shù)為:", n)reVal.Elem().Field(0).SetString("Jack")reVal.Elem().Field(1).SetInt(30)
}func main() {stu := Student{Name: "Tom", Age: 18}testReflect(&stu) // 傳入 stu 的指針fmt.Println(stu)
}
1.10 輸出結(jié)果
(base) PS E:\Goproject\src\gocode\testproject03> go run .\main\main.go
結(jié)構(gòu)體中字段個(gè)數(shù)為: 2
{Jack 30}
http://m.aloenet.com.cn/news/34459.html

相關(guān)文章:

  • 家教網(wǎng)站建設(shè)的推廣免費(fèi)網(wǎng)站流量
  • 倒計(jì)時(shí)網(wǎng)站模板搜索引擎關(guān)鍵詞seo優(yōu)化公司
  • 上海網(wǎng)站建設(shè)設(shè)計(jì)制作寧波seo排名方案優(yōu)化公司
  • 國內(nèi)出名的設(shè)計(jì)網(wǎng)站有哪些免費(fèi)網(wǎng)站制作軟件平臺(tái)
  • 好姑娘中文在線觀看國語高清免費(fèi)深圳白帽優(yōu)化
  • 廈門網(wǎng)站建設(shè)哪家好百度一級代理商
  • 房地產(chǎn)網(wǎng)站大全東莞日增感染人數(shù)超25萬
  • 青島專業(yè)網(wǎng)站制作團(tuán)隊(duì)肇慶百度快照優(yōu)化
  • 做宣傳圖冊在什么網(wǎng)站外國黃岡網(wǎng)站推廣平臺(tái)
  • 做潤滑油網(wǎng)站圖片直播回放老卡怎么回事
  • 做網(wǎng)站的屬于什么崗位網(wǎng)上推廣賺錢方法
  • wordpress 推薦環(huán)境關(guān)鍵詞seo排名優(yōu)化
  • 自適應(yīng)網(wǎng)站 seo怎么做濟(jì)南網(wǎng)站建設(shè)老威
  • 杭州網(wǎng)站建設(shè)咨詢藍(lán)韻網(wǎng)絡(luò)長尾關(guān)鍵詞挖掘站長工具
  • 中學(xué)生制作的網(wǎng)站網(wǎng)絡(luò)運(yùn)營
  • 做網(wǎng)站需要基礎(chǔ)嗎互聯(lián)網(wǎng)營銷師培訓(xùn)內(nèi)容
  • 品牌設(shè)計(jì)網(wǎng)站怎樣推廣自己的廣告
  • 網(wǎng)站策劃書最后一步怎么做采集站seo提高收錄
  • 寧夏銀川網(wǎng)站建設(shè)游戲app拉新平臺(tái)
  • 怎么做網(wǎng)站賺錢廣告營銷案例分析
  • wordpress openbox主題山東服務(wù)好的seo
  • 做彩票網(wǎng)站要什么接口互聯(lián)網(wǎng)推廣與營銷
  • 平面設(shè)計(jì)專用網(wǎng)站臨安網(wǎng)站seo
  • 內(nèi)力網(wǎng)站建設(shè)公司宣傳軟文
  • 做網(wǎng)站頁面的軟件海淀區(qū)seo搜索引擎
  • 網(wǎng)站建設(shè)常用英語網(wǎng)店運(yùn)營
  • 中山做外貿(mào)網(wǎng)站建設(shè)百度小說排行榜完本
  • 做誘惑類cpa網(wǎng)站經(jīng)驗(yàn)百度賬號注冊平臺(tái)
  • xp做的網(wǎng)站有連接限制seo優(yōu)化網(wǎng)站技術(shù)排名百度推廣
  • 沒有注冊公司怎么做網(wǎng)站性價(jià)比高seo排名