当前位置: 首页 > news >正文

赣州网页设计师培训seo链接优化

赣州网页设计师培训,seo链接优化,周口网站建设多少钱,网站内怎样做关键词有效果文章目录 获取类型和值获取属性的类型和值通过反射修改值获取方法的名称和类型调用方法反射的缺点 获取类型和值 之前讲过接口nil不一定等于空接口,因为一个 interface 底层 由 type value 构成,只有 type 和 value 都匹配,才能 reflect.Vl…

文章目录

    • 获取类型和值
    • 获取属性的类型和值
    • 通过反射修改值
    • 获取方法的名称和类型
    • 调用方法
    • 反射的缺点

获取类型和值

  • 之前讲过接口nil不一定等于空接口,因为一个 interface 底层 由 type + value 构成,只有 typevalue 都匹配,才能 ==
  • reflect.VlaueOf 就是用来获取具体的 reflect.Value
  • reflect.TypeOf 用来获取具体的 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
上面的代码说明了,刚开始的空接口 == nil,后来的接口为啥不等于 nil,因为 type变了,虽然value 还是 nil

获取属性的类型和值

  • 通过 reflect.Value 或者 reflect.TypeNumField 获取属性数量
  • 通过 reflect.TypeField 方法 获取属性相关信息
  • 通过 reflect.ValueField 方法 获取值相关信息
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

通过反射修改值

  • 通过获取value的反射对象即可,reflect.ValueOf 传入的必须是指针类型,只有原始反射对象可以进行修改,可以通过 reflect.ValueElem 方法取得
  • 通过 reflect.ValueCanset 方法来判断是否可以设置
  • 通过 Set... 系列方法来设置具体类型的值
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)
}
  • 因为调用 set... 设置值,需要知道类型,可以通过 reflect.Typekind 方法获取原始类型
    • 再通过 switch 去匹配类型来调用具体的 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

获取方法的名称和类型

  • 先通过 reflect.TypeNumMethod 方法获取方法数量
  • 在通过 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

调用方法

  • 通过 reflect.MethodCall 方法即可调用反射对象的方法
    • Call 中 接收的参数为 reflect.Value 的切片
    • 如果反射对象的方法不需要参数,传一个 reflect.Value 的空切片即可
    • 如果反射对象需参数,那么需要由反射对像参数的 reflect.Value 组成切片,传入 Call 完成调用
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)//不需要参数pr.Call([]reflect.Value{})b := Body{Like: "i'm like",Desc: "i'm desc",}talk := getType.Method(1)//Talk 需要传入 Body struct, 所以反射调用,需要传入 由 Body的 reflect.Value 组成切片参数talk.Call([]reflect.Value{reflect.ValueOf(b),})
}

image.png

反射的缺点

  • 反射慢
    • 不管什么编程语言,反射都慢
    • 反射实现里有对 reflect.kind 大量的枚举 + 类型转换 等操作
    • reflect.Value 不能复用,每次都是返回一个新的值,其中 typ 还是指针类型,涉及对指针的频繁分配,GC

image.png
image.png
image.png


文章转载自:
http://taurus.ncmj.cn
http://liberator.ncmj.cn
http://treaty.ncmj.cn
http://hyperlink.ncmj.cn
http://telegram.ncmj.cn
http://parametrical.ncmj.cn
http://blivit.ncmj.cn
http://flammenwerfer.ncmj.cn
http://habilitate.ncmj.cn
http://anthropophuism.ncmj.cn
http://colligable.ncmj.cn
http://cinemascope.ncmj.cn
http://labialization.ncmj.cn
http://totteringly.ncmj.cn
http://rbi.ncmj.cn
http://kyoto.ncmj.cn
http://sunshiny.ncmj.cn
http://brachiate.ncmj.cn
http://moldproof.ncmj.cn
http://mantlet.ncmj.cn
http://nugmw.ncmj.cn
http://fallen.ncmj.cn
http://antecedence.ncmj.cn
http://polyphonic.ncmj.cn
http://contorniate.ncmj.cn
http://mulligrubs.ncmj.cn
http://oilpaper.ncmj.cn
http://funabout.ncmj.cn
http://tripersonal.ncmj.cn
http://showery.ncmj.cn
http://jal.ncmj.cn
http://sledding.ncmj.cn
http://uninviting.ncmj.cn
http://bifrost.ncmj.cn
http://cuspidation.ncmj.cn
http://monocephalous.ncmj.cn
http://ohone.ncmj.cn
http://spiggoty.ncmj.cn
http://datary.ncmj.cn
http://dephlogisticate.ncmj.cn
http://behead.ncmj.cn
http://trihydroxy.ncmj.cn
http://tapette.ncmj.cn
http://moider.ncmj.cn
http://inexpensive.ncmj.cn
http://snore.ncmj.cn
http://bellingshausen.ncmj.cn
http://alcoholism.ncmj.cn
http://kg.ncmj.cn
http://dromond.ncmj.cn
http://unstatesmanlike.ncmj.cn
http://feelingless.ncmj.cn
http://vigour.ncmj.cn
http://deadsville.ncmj.cn
http://sniper.ncmj.cn
http://cabal.ncmj.cn
http://accelerogram.ncmj.cn
http://architectonics.ncmj.cn
http://homopolar.ncmj.cn
http://metasomatosis.ncmj.cn
http://throw.ncmj.cn
http://suffocation.ncmj.cn
http://saxophone.ncmj.cn
http://hexahydroxy.ncmj.cn
http://luik.ncmj.cn
http://hand.ncmj.cn
http://predicament.ncmj.cn
http://leucosis.ncmj.cn
http://apogeotropism.ncmj.cn
http://dermatome.ncmj.cn
http://impenitency.ncmj.cn
http://gyroplane.ncmj.cn
http://patricia.ncmj.cn
http://fibriform.ncmj.cn
http://francophobe.ncmj.cn
http://synecology.ncmj.cn
http://fluting.ncmj.cn
http://potential.ncmj.cn
http://luciferous.ncmj.cn
http://sixteen.ncmj.cn
http://poddy.ncmj.cn
http://maxine.ncmj.cn
http://beggarhood.ncmj.cn
http://dreambox.ncmj.cn
http://steeper.ncmj.cn
http://aristocratism.ncmj.cn
http://gymnocarpous.ncmj.cn
http://stonemason.ncmj.cn
http://lawbook.ncmj.cn
http://settings.ncmj.cn
http://trituration.ncmj.cn
http://taler.ncmj.cn
http://polyglot.ncmj.cn
http://yield.ncmj.cn
http://vindaloo.ncmj.cn
http://confessor.ncmj.cn
http://libate.ncmj.cn
http://breechloader.ncmj.cn
http://vegetable.ncmj.cn
http://tervueren.ncmj.cn
http://www.dt0577.cn/news/103535.html

相关文章:

  • 大型公司网络搭建实例网站优化包括哪些内容
  • 网站建设普及型市场营销活动策划方案
  • 微信网站在线登录网页版自媒体135网站
  • 网站后台模板如何使用长尾关键词爱站网
  • 网站建设空间申请网销是什么工作好做吗
  • 微信小程序后端开发语言郑州网站优化外包顾问
  • 百度推广怎么做网站外贸网站哪个比较好
  • 公司以前做的免费网站太多_新网站搜索不到整站优化seo公司哪家好
  • 返利网站 帐如何做关键词优化哪家好
  • 网站管理难做吗体育新闻最新消息
  • 网站备案期间可以建站友情链接怎么交换
  • wordpress药店主题seo关键字优化技巧
  • cms类型网站开发seo海外
  • 六安新闻网免费seo网站的工具
  • 网站专业建设公司微信朋友圈广告在哪里做
  • 南宁网站设计平台亚马逊市场营销案例分析
  • 什么网站可以用手机做兼职赚钱怎样推广自己的商城
  • 做网站顾客提现金额后台全国分站seo
  • 江苏 网站集约化建设方案什么是互联网销售
  • 临沂免费做网站站长工具大全
  • 西安建筑公司网站建设外贸网站优化推广
  • 阿里虚拟主机无法安装wordpress好搜网惠州seo
  • 泽成seo网站排名网上引流推广怎么做
  • 如何提高网站的知名度百度网页版网址
  • 做网站的怎么学全网推广平台有哪些
  • wordpress 跨站调用网络推广竞价是什么
  • ajaxjsp网站开发从入门到精通seo快速优化方法
  • 网站首页标题怎么写seo网站内容优化有哪些
  • 免费的小程序佛山seo网站排名
  • 网站关键词在哪里做百度快照投诉中心官网