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

完备的网站建设dw怎么做别人可以看的网站

完备的网站建设,dw怎么做别人可以看的网站,咸阳网站建设哪家专业,新能源汽车十大名牌reflect.DeepEqual(x, y)函数 功能是比较x和y是否一致#xff0c;x和y不仅限于基础类型#xff0c;也可以是像array、 slice、 map、 ptr、struct、interface类型#xff0c;在代码中经常能见到。 一起看下是怎么实现的吧~ func DeepEqual(x, y interface{}) bool {if x …reflect.DeepEqual(x, y)函数 功能是比较x和y是否一致x和y不仅限于基础类型也可以是像array、 slice、 map、 ptr、struct、interface类型在代码中经常能见到。 一起看下是怎么实现的吧~ func DeepEqual(x, y interface{}) bool {if x nil || y nil {return x y}v1 : ValueOf(x)v2 : ValueOf(y)if v1.Type() ! v2.Type() {return false}return deepValueEqual(v1, v2, make(map[visit]bool), 0) }先判断x和y是否为空一方为空另一方不为空则肯定不相等两者都为空那就相等。判断类型是否一致如果x和y类型都不一致那肯定不相等。 继续比较 func deepValueEqual(v1, v2 Value, visited map[visit]bool, depth int) bool {if !v1.IsValid() || !v2.IsValid() {return v1.IsValid() v2.IsValid()}if v1.Type() ! v2.Type() {return false}// if depth 10 { panic(deepValueEqual) } // for debugging// We want to avoid putting more in the visited map than we need to.// For any possible reference cycle that might be encountered,// hard(t) needs to return true for at least one of the types in the cycle.hard : func(k Kind) bool {switch k {case Map, Slice, Ptr, Interface:return true}return false}if v1.CanAddr() v2.CanAddr() hard(v1.Kind()) {addr1 : unsafe.Pointer(v1.UnsafeAddr())addr2 : unsafe.Pointer(v2.UnsafeAddr())if uintptr(addr1) uintptr(addr2) {// Canonicalize order to reduce number of entries in visited.// Assumes non-moving garbage collector.addr1, addr2 addr2, addr1}// Short circuit if references are already seen.typ : v1.Type()v : visit{addr1, addr2, typ}if visited[v] {return true}// Remember for later.visited[v] true}switch v1.Kind() {case Array:for i : 0; i v1.Len(); i {if !deepValueEqual(v1.Index(i), v2.Index(i), visited, depth1) {return false}}return truecase Slice:if v1.IsNil() ! v2.IsNil() {return false}if v1.Len() ! v2.Len() {return false}if v1.Pointer() v2.Pointer() {return true}for i : 0; i v1.Len(); i {if !deepValueEqual(v1.Index(i), v2.Index(i), visited, depth1) {return false}}return truecase Interface:if v1.IsNil() || v2.IsNil() {return v1.IsNil() v2.IsNil()}return deepValueEqual(v1.Elem(), v2.Elem(), visited, depth1)case Ptr:if v1.Pointer() v2.Pointer() {return true}return deepValueEqual(v1.Elem(), v2.Elem(), visited, depth1)case Struct:for i, n : 0, v1.NumField(); i n; i {if !deepValueEqual(v1.Field(i), v2.Field(i), visited, depth1) {return false}}return truecase Map:if v1.IsNil() ! v2.IsNil() {return false}if v1.Len() ! v2.Len() {return false}if v1.Pointer() v2.Pointer() {return true}for _, k : range v1.MapKeys() {val1 : v1.MapIndex(k)val2 : v2.MapIndex(k)if !val1.IsValid() || !val2.IsValid() || !deepValueEqual(val1, val2, visited, depth1) {return false}}return truecase Func:if v1.IsNil() v2.IsNil() {return true}// Cant do better than this:return falsedefault:// Normal equality sufficesreturn valueInterface(v1, false) valueInterface(v2, false)} }如果是slice map ptr interface 类型hard 返回true; 如果是array 原始元素类型hard返回false。拿slice类型举个例子会先判断x和y是否为空会判断x和y的长度是否一致判断是否指向同一指针然后递归比较各个元素。注意Person{name1,age1} 是ptr类型Person{name1,age1}是struct类型。注意如果是func类型如果两个func都会nil时认为x和y一致否则被判定为不一致。 大家可以用各种例子试一试debug一下
http://www.dnsts.com.cn/news/69512.html

相关文章:

  • 宁波公司网站开发产品推广软文500字
  • 设计logo网站免百度seo学院
  • 网站模板 修改怎么样做短视频
  • 做设计的一般用什么网站找素材装饰设计素描的秩序化构成包括
  • 小网站推荐一个ui界面
  • 140平米装修全包费用江苏网站建设网站排名优化
  • 网站推广需要几个人做石家庄营销型网站建设费用
  • 网站优化需要什么施工企业安全生产管理规范
  • 网站是数据搭建一个微信小程序要多少钱
  • 武城做网站上海网站seo设计
  • 服装网站建设物流配送系统室内设计网站模板
  • 企业网站建设方案 功能规划wordpress是是是
  • 网站排名优化在线培训wordpress 任务发布插件
  • php网站地图临西网站建设价格
  • 为什么做网站备案的人态度差常州建网站需要多少钱
  • 如何做网站效果更好广州企业网站建设公司
  • 网站建设空间怎么租用大庆建设集团网站
  • 安徽省建设厅门户网站wordpress 文章列表只显示标题
  • 外贸营销型网站建站济南平台公司
  • 碧桂园房地产最新消息windows优化大师免费版
  • 做暖视频网站免费建网站都需要什么
  • 关于营销的网站有哪些内容重庆的企业网站
  • 网站模板哪家好做电台用啥什么网站
  • 做网站诱导网站wordpress 主菜单插件
  • 江苏省交通运输厅门户网站建设管理idzoom室内设计师网
  • 成都网站建设桔子科技造纸公司网站建设
  • 涿州是住房和城乡建设局网站青岛网站制作套餐
  • 制作公司网站备案需要提供什么资料昆山网络推广公司
  • 简洁好看的网站wordpress 敏感词过滤
  • 建筑网站模版无锡网站的优化