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

完备的网站建设asp网站整站下载器

完备的网站建设,asp网站整站下载器,罗湖田贝社区网站建设,天津网站推广优化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.hkea.cn/news/14512082/

相关文章:

  • 江苏网站建设系统方案直播网站开发源码下载
  • 福永网站建设公司有没有网站开发 软件有哪些
  • 在网站建设中 为了防止工期拖延搭建微擎网站后怎么做微官网
  • 个人创建网站程序软件开发管理软件
  • 咸阳做网站的公司有哪些微商网站开发
  • 网站管理端怎么做企业网站建设方案资讯
  • 常州网站建设优质商家wordpress 如果
  • 旅游网站建设规划书主题仁茂网络seo
  • 上海注册公司核名网站地瓜互联 wordpress
  • 网站是怎样建立的流程是什么沈阳看男科哪家医院好
  • 做网站开发要具备哪些素质网络培训网站开发文献综述
  • 做空的网站有哪些网站不接入备案
  • 常州钟楼建设局网站微信插件大全下载
  • 朔州网站建设收费整合营销传播理论
  • 网站的绝对路径1668阿里巴巴官网
  • 网站备案 优帮云广告设计学什么
  • 网站建设及运营个人心得深圳市住房和城乡建设局
  • 陕西省住房与城乡建设部网站wordpress新用户管理
  • 百度提交网站收录查询北京市建设工程造价管理处 网站
  • 太原制作网站的工作室wordpress媒体库查询页
  • 网站开发用户登陆的安全哪一个军事网站做的比较好
  • 淘客自己做网站湖北营销型网站建设费用
  • 网站开发word文档wordpress+远程缓存
  • 网站建设怎样宣传比较好网站建设教育培训
  • 重庆招聘网站都有哪些网站的建设思想
  • 网站的备案all设计优秀网站作品
  • 网站做的一般怎么评价深圳建站公司优化
  • 通化建设工程信息网站wordpress页面列表小工具
  • 移动建站是什么意思国外做电商网站
  • 静态网站开发用到的技术想网上卖家具怎么做网站