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

大连网站开发费多少钱网站建设计划表

大连网站开发费多少钱,网站建设计划表,泾阳做网站,神马站长平台在 Go 语言中#xff0c;interface{} 类型是一种特殊的接口类型#xff0c;它表示任意类型的值。你可以使用 运算符来检测任意两个 interface{} 类型值的相等性#xff0c;比较的规则和一般的接口类型一样#xff0c;需要满足以下条件#xff1a; 两个 interface{} 值的…在 Go 语言中interface{} 类型是一种特殊的接口类型它表示任意类型的值。你可以使用 运算符来检测任意两个 interface{} 类型值的相等性比较的规则和一般的接口类型一样需要满足以下条件 两个 interface{} 值的动态类型必须相同也就是说它们存储的具体类型必须一致。两个 interface{} 值的动态值必须相等也就是说它们存储的具体值必须可以比较的。 根据 Go 语言规范的描述interface{} 类型的值在内存中是由两个字word组成的一个字存储了动态类型的信息另一个字存储了动态值的信息。如果动态值的大小超过了一个字那么这个字就存储了动态值的指针指向实际的动态值。 Go 编译器是如何判定 interface{} 值是否相等的呢 使用 符号比较两个 interface{} 类型的值时Go编译器会先比较它们的动态类型也就是比较它们的第一个字看是否指向相同的类型信息。如果不相同直接返回 false如果相同则继续比较它们的动态值也就是比较它们的第二个字看是否相等。如果动态值的大小超过了一个字那么这个字就是一个指针需要根据指针找到实际的动态值并且根据动态类型的规则进行比较。 例如如果动态类型是数组那么就需要逐个比较数组的元素如果动态类型是结构体那么就需要逐个比较结构体的字段以此类推。 下面是一个简单的例子演示了如何使用 符号比较两个 interface{} 类型的值 package mainimport fmtfunc main() {var a, b interface{}// 给 a 赋值为 int64 类型的 1a int64(1)// 给 b 赋值为 int64 类型的 2b int64(2)// a和b的动态类型相同, 动态值不同, 输出结果为 falsefmt.Println(a b) // false// 给 b 赋值为 int64 类型的 1b int64(1)// a和b的动态类型相同, 动态值也相同, 此时输出结果为truefmt.Println(a b) // true// 给 b 赋值为 float32 类型的 1b float32(1)// 此时a和b的动态类型不相同, 就不会进行动态值的处理, 输出结果为falsefmt.Println(a b) // false// 给 a,b 赋值为 int 类型的数组a [5]int{1, 2, 3, 4, 5}b [5]int{1, 2, 3, 4, 5}fmt.Println(a b) // true// 给 b 赋值为 int 类型的数组b [5]int{1, 2, 3, 4, 6}fmt.Println(a b) // false// 给 b 赋值为 int 类型的切片b []int{1, 2, 3, 4, 5}// 此时a和b的动态类型已然不相同, 就不会进行动态值的处理, 输出结果为falsefmt.Println(a b) // false// 给 a 赋值为 int 类型的切片a []int{1, 2, 3, 4, 5}// 此时a和b的动态类型和动态值虽然相同, 但是在Go语言中切片类型的值是不能用 符号比较会引发运行时错误//fmt.Println(a b) // panic: runtime error: comparing uncomparable type []int } 运算符通常只能用于比较基本类型和支持 操作的复合类型如数组、结构体等而不能用于比较切片、映射、函数等类型否则会引发编译错误或运行时错误。 那么问题来了如果一定要比较两个切片、映射、函数的相等性该如何操作呢 reflect.DeepEqual 函数原型 // 用于判断两个值是否深度一致 // // 除了类型相同在可以时主要是基本类型会使用但还会比较array、slice的成员 // map的键值对结构体字段进行深入比对。map的键值对对键只使用但值会继续往深 // 层比对。DeepEqual函数可以正确处理循环的类型。函数类型只有都会nil时才相等空切 // 片不等于nil切片还会考虑array、slice的长度、map键值对数。 func DeepEqual(x, y any) bool 对于 reflect.DeepEqual 而言它通过牺牲程序的性能来弥补  运算符无法处理切片、映射、函数的短板对于不支持 操作的类型reflect.DeepEqual 函数会有一套自己的比较规则。 你可以把 reflect.DeepEqual 函数理解成是 运算符的扩展版下面是一个简单的例子演示了如何使用 reflect.DeepEqual 函数 package mainimport fmtfunc main() {var a, b interface{}// 给 a 赋值为 int64 类型的 1a int64(1)// 给 b 赋值为 int64 类型的 2b int64(2)fmt.Println(a b, reflect.DeepEqual(a, b))b int64(1)fmt.Println(a b, reflect.DeepEqual(a, b))b float32(1)fmt.Println(a b, reflect.DeepEqual(a, b))// 给 b 赋值为 int 类型的切片a, b []int{1, 2, 3, 4, 5}, []int{1, 2, 3, 4, 5}fmt.Println(reflect.DeepEqual(a, b)) // trueb []int{5, 4, 3, 2, 1}fmt.Println(reflect.DeepEqual(a, b)) // false }
http://www.pierceye.com/news/688851/

相关文章:

  • 网站建设毕业报告wordpress微信登录页面
  • 外包网站建设费用包括网站备份crm系统有哪些
  • 高端网站设计推广v信haotg8wordpress 付费后查看
  • cms管理手机网站长春做网站好的公司
  • 可信网站认证 技术支持单位沈阳又一烂尾项目复工
  • 南昌网站建设培训学校做幼儿网站的目标
  • 装饰网站建设的背景怎么做原创动漫视频网站
  • 电脑购物网站模板c2c商城网站建设二次开发
  • 自建站有哪些dz论坛网站源码
  • 湖南湘源建设工程有限公司网站牛商网网站做seo好么
  • 郑州网站制作建设南宁网站设计要多少钱
  • 网站地图制作怎么做云南建设网
  • 网站开发项目经验怎么写网站首页做一点开有动画
  • 乔拓云智能建站系统官网注册公司在哪个网站注册
  • lisp 网站开发什么是网站设计
  • 北京市残疾人网上服务平台网奇seo培训官网
  • 福建省建设环卫协会网站自动的小企业网站建设
  • 深圳关键词seo北京网络优化推广公司
  • 旅游网站建设课程设计报告内部优惠券网站建站
  • 郑州网站优化汉狮网络苏州互联网公司集中在哪里
  • 烟台网站建设精通臻动传媒ui培训设计学校
  • 网站推荐你了解我意思吧深圳响应式设计企业网站
  • 网站后期增加产品东平网页设计
  • 免费网站模板的制作方法石台做网站
  • 温州建设网站公司哪家好游戏外包公司要不要去
  • 动力无限西安网站建设wordpress图片到本地
  • 重庆微信营销网站建设seo快照推广
  • dedecms小说网站模板如何以目录形式访问网站
  • 有哪些可以做网站的平台怎样把录的视频做一下传到网站
  • 网站域名如何续费福建建筑人才服务中心