中文亚洲精品无码_熟女乱子伦免费_人人超碰人人爱国产_亚洲熟妇女综合网

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

網(wǎng)站備案后可以更換域名嗎網(wǎng)絡(luò)營(yíng)銷是學(xué)什么

網(wǎng)站備案后可以更換域名嗎,網(wǎng)絡(luò)營(yíng)銷是學(xué)什么,家具商務(wù)網(wǎng)站策劃案,怎么查詢?cè)诮üこ涛恼履夸?獲取類型和值獲取屬性的類型和值通過(guò)反射修改值獲取方法的名稱和類型調(diào)用方法反射的缺點(diǎn) 獲取類型和值 之前講過(guò)接口nil不一定等于空接口,因?yàn)橐粋€(gè) interface 底層 由 type value 構(gòu)成,只有 type 和 value 都匹配,才能 reflect.Vl…

文章目錄

    • 獲取類型和值
    • 獲取屬性的類型和值
    • 通過(guò)反射修改值
    • 獲取方法的名稱和類型
    • 調(diào)用方法
    • 反射的缺點(diǎn)

獲取類型和值

  • 之前講過(guò)接口nil不一定等于空接口,因?yàn)橐粋€(gè) interface 底層 由 type + value 構(gòu)成,只有 typevalue 都匹配,才能 ==
  • reflect.VlaueOf 就是用來(lái)獲取具體的 reflect.Value
  • reflect.TypeOf 用來(lái)獲取具體的 reflect.Type
func main() {var (a *Ab interface{})fmt.Println(a)if b == nil {fmt.Println("b is nil")}fmt.Println(reflect.TypeOf(b), reflect.ValueOf(b))fmt.Println(reflect.TypeOf(a), reflect.ValueOf(a))b = aif b == nil {fmt.Println("b is nil")} else {fmt.Printf("current b is %v \n", b)fmt.Println("b not eq nil")}fmt.Println(reflect.TypeOf(b), reflect.ValueOf(b))
}

image.png
上面的代碼說(shuō)明了,剛開(kāi)始的空接口 == nil,后來(lái)的接口為啥不等于 nil,因?yàn)?type變了,雖然value 還是 nil

獲取屬性的類型和值

  • 通過(guò) reflect.Value 或者 reflect.TypeNumField 獲取屬性數(shù)量
  • 通過(guò) reflect.TypeField 方法 獲取屬性相關(guān)信息
  • 通過(guò) reflect.ValueField 方法 獲取值相關(guān)信息
package mainimport ("fmt""reflect"
)type A struct {Name stringAge  int
}func main() {var a AgetType := reflect.TypeOf(a)getValue := reflect.ValueOf(a)fmt.Println("field num", getType.NumField())for i := 0; i < getType.NumField(); i++ {field := getType.Field(i)value := getValue.Field(i)fmt.Println("field name is", field.Name, "field value is", value.Interface())}
}

image.png

通過(guò)反射修改值

  • 通過(guò)獲取value的反射對(duì)象即可,reflect.ValueOf 傳入的必須是指針類型,只有原始反射對(duì)象可以進(jìn)行修改,可以通過(guò) reflect.ValueElem 方法取得
  • 通過(guò) reflect.ValueCanset 方法來(lái)判斷是否可以設(shè)置
  • 通過(guò) Set... 系列方法來(lái)設(shè)置具體類型的值
package mainimport ("fmt""reflect"
)type A struct {Name stringAge  int
}func main() {a := A{Name: "old name",}valueOfA := reflect.ValueOf(&a).Elem()nameField := valueOfA.Field(0)if nameField.CanSet() {nameField.SetString("new name")} else {fmt.Println("don't set")}fmt.Println("new value", a.Name)
}
  • 因?yàn)檎{(diào)用 set... 設(shè)置值,需要知道類型,可以通過(guò) reflect.Typekind 方法獲取原始類型
    • 再通過(guò) switch 去匹配類型來(lái)調(diào)用具體的 set... 方法
package mainimport ("fmt""reflect"
)type A struct {Name stringAge  int
}func main() {a := A{Name: "old name",}fmt.Println("old value", a.Name)valueOfA := reflect.ValueOf(&a).Elem()getType := reflect.TypeOf(a)field := getType.Field(0)nameField := valueOfA.Field(0)if nameField.CanSet() {switch field.Type.Kind() {case reflect.String:fmt.Println("string")nameField.SetString("new value")}} else {fmt.Println("don't set")}fmt.Println("new value", a.Name)
}

image.png

獲取方法的名稱和類型

  • 先通過(guò) reflect.TypeNumMethod 方法獲取方法數(shù)量
  • 在通過(guò) reflect.TypeMethod 方法獲取到具體的方法信息 reflect.Method
package mainimport ("fmt""reflect"
)type A struct {Name stringAge  int
}func (receiver *A) SetName(name string) {receiver.Name = name
}func (receiver *A) SetAge(age int) {receiver.Age = age
}func main() {var a A//有方法是依賴指針的所以需要傳指針getType := reflect.TypeOf(&a)num := getType.NumMethod()for i := 0; i < num; i++ {method := getType.Method(i)fmt.Println("method name:", method.Name, "method type:", method.Type)}
}

image.png

調(diào)用方法

  • 通過(guò) reflect.MethodCall 方法即可調(diào)用反射對(duì)象的方法
    • Call 中 接收的參數(shù)為 reflect.Value 的切片
    • 如果反射對(duì)象的方法不需要參數(shù),傳一個(gè) reflect.Value 的空切片即可
    • 如果反射對(duì)象需參數(shù),那么需要由反射對(duì)像參數(shù)的 reflect.Value 組成切片,傳入 Call 完成調(diào)用
package mainimport ("fmt""reflect"
)type A struct {Name stringAge  int
}type Body struct {Like stringDesc string
}func (a A) Pr() {fmt.Println("A pr")
}func (a A) Talk(b Body) {fmt.Printf("Like:%s,Desc:%s", b.Like, b.Desc)
}func main() {var a AgetType := reflect.ValueOf(a)pr := getType.Method(0)//不需要參數(shù)pr.Call([]reflect.Value{})b := Body{Like: "i'm like",Desc: "i'm desc",}talk := getType.Method(1)//Talk 需要傳入 Body struct, 所以反射調(diào)用,需要傳入 由 Body的 reflect.Value 組成切片參數(shù)talk.Call([]reflect.Value{reflect.ValueOf(b),})
}

image.png

反射的缺點(diǎn)

  • 反射慢
    • 不管什么編程語(yǔ)言,反射都慢
    • 反射實(shí)現(xiàn)里有對(duì) reflect.kind 大量的枚舉 + 類型轉(zhuǎn)換 等操作
    • reflect.Value 不能復(fù)用,每次都是返回一個(gè)新的值,其中 typ 還是指針類型,涉及對(duì)指針的頻繁分配,GC

image.png
image.png
image.png

http://www.risenshineclean.com/news/39316.html

相關(guān)文章:

  • 濟(jì)南網(wǎng)站優(yōu)化公司拼多多seo是什么意思
  • 360網(wǎng)站建設(shè)公司哪家好查詢關(guān)鍵詞網(wǎng)站
  • 哈爾濱網(wǎng)站建設(shè)資海海外市場(chǎng)推廣做什么的
  • 中學(xué)網(wǎng)站管理系統(tǒng)下載不受限制的搜索引擎
  • 邯鄲做網(wǎng)站優(yōu)化百度網(wǎng)盤(pán)手機(jī)app下載安裝
  • 寶雞營(yíng)銷型網(wǎng)站開(kāi)發(fā)信息流優(yōu)化師工作內(nèi)容
  • 深喉嚨企業(yè)網(wǎng)站系統(tǒng)網(wǎng)絡(luò)營(yíng)銷渠道策略有哪些
  • 男男互做網(wǎng)站泰國(guó)推廣網(wǎng)站有效的方法
  • 網(wǎng)站建設(shè)合同有效期河北網(wǎng)站seo外包
  • 手機(jī)購(gòu)買(mǎi)網(wǎng)站源碼軟文推廣怎么寫(xiě)
  • 視頻網(wǎng)站如何做推廣搜索引擎大全網(wǎng)站
  • 天津外貿(mào)營(yíng)銷型網(wǎng)站建設(shè)公司seo頁(yè)面鏈接優(yōu)化
  • 平面設(shè)計(jì)班seo優(yōu)化廣告
  • 買(mǎi)cms做網(wǎng)站seo推廣軟件品牌
  • 香港外貿(mào)網(wǎng)站建設(shè)谷歌搜索引擎網(wǎng)址
  • 網(wǎng)站子頁(yè)怎么做如何能查到百度搜索排名
  • 北京大學(xué)學(xué)術(shù)學(xué)風(fēng)建設(shè)網(wǎng)站網(wǎng)站運(yùn)營(yíng)優(yōu)化培訓(xùn)
  • 做物流網(wǎng)站的圖片素材關(guān)鍵詞seo是什么意思
  • 縉云做網(wǎng)站廈門(mén)seo代理商
  • wordpress企業(yè)網(wǎng)站模板下載seo如何提升排名收錄
  • 網(wǎng)站建設(shè)與網(wǎng)頁(yè)設(shè)計(jì)今天高清視頻免費(fèi)播放
  • 鄭州網(wǎng)站推廣¥做下拉去118cr餐飲營(yíng)銷案例100例
  • 網(wǎng)站建設(shè)維護(hù)管理辦法外貿(mào)營(yíng)銷型網(wǎng)站制作公司
  • 北京網(wǎng)站建設(shè)企業(yè)網(wǎng)站制作蘇州網(wǎng)站關(guān)鍵字優(yōu)化
  • 茂名網(wǎng)站制作百度推廣后臺(tái)登錄頁(yè)面
  • 做振動(dòng)盤(pán)的企業(yè)網(wǎng)站中國(guó)軍事新聞最新消息
  • 網(wǎng)站建設(shè)程序源碼青島網(wǎng)站優(yōu)化公司
  • flash做ppt的模板下載網(wǎng)站有哪些西安網(wǎng)站開(kāi)發(fā)制作公司
  • 北京網(wǎng)站制作公司建站體驗(yàn)營(yíng)銷理論
  • 怎樣做網(wǎng)站-百度邯鄲今日頭條最新消息