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

网站架构文案手工外包加工网

网站架构文案,手工外包加工网,龙岗网站建设公司哪家口碑好,商丘网站建设运营公司对于下面这段代码#xff0c;我们知道 i 实际上的值就是 nil#xff0c;所以 i nil 会生效 func main() {var i *int nilif i nil {fmt.Println(i is nil) // i is nil} }现在换一种写法#xff0c;我们将 i 的类型改成 interface{}#xff0c;i nil 依然…对于下面这段代码我们知道 i 实际上的值就是 nil所以 i nil 会生效 func main() {var i *int nilif i nil {fmt.Println(i is nil) // i is nil} }现在换一种写法我们将 i 的类型改成 interface{}i nil 依然会生效 func main() {var i interface{} nilif i nil {fmt.Println(i is nil) // i is nil} }我们接着改造将 i nil 的逻辑封装成函数 IsNil go复制代码func IsNil(i interface{}) {if i nil {fmt.Println(i is nil)} } func main() {var i *int nilIsNil(i) }居然发现 IsNil 中的 i nil 不生效了 这是为什么呢 因为对于 interface{} 类型的值来说如果要判断它是 nil必须同时满足 type T 和 value V 都是 nil 才行 可以用 reflect 中的 TypeOf 和 ValueOf var i *int nil fmt.Println(reflect.TypeOf(i), reflect.ValueOf(i)) // *int nilvar i interface{} nil fmt.Println(reflect.TypeOf(i), reflect.ValueOf(i)) // nil invalid reflect.Value如果我们在函数中用 interface{} 作为参数的类型表示并不代表参数就是 interface{} 类型而是任意类型调用时传入啥类型就是啥类型如下代码 var i interface{} 1 fmt.Println(reflect.TypeOf(i)) // intvar j interface{} hello fmt.Println(reflect.TypeOf(j)) // stringvar k interface{} nil fmt.Println(reflect.TypeOf(k)) // nil所以只有当我们传入的参数类型是 interface{}且 value 为 nil 时i nil 才会生效 否则其他情况都不会生效 func main() {var i interface{} nilIsNil(i) // i is nil } func IsNil(i interface{}) {if i nil {fmt.Println(i is nil)} }这个坑可能会出现在返回 error 的函数中比如下面这段代码 在函数 SomeThing 中提前定义了 myError然后一系列的处理后返回了 myError 后面的业务逻辑需要判断 err 是否为 nil type MyError struct{} func (me *MyError) Error() string {return my error } func SomeThing() error {var myError *MyError // 默认初始化为 nil// ...return myError } func main() {err : SomeThing()fmt.Println(reflect.TypeOf(err), reflect.ValueOf(err)) // *main.MyError nilif err ! nil { // 虽然没有返回这里会被执行因为 err 的类型不是 nilfmt.Println(err)} }从上面的代码我们看到SomeThing 函数中定义的 myError 是 *MyError 类型虽然返回了 nil但是 err 的类型不是 nil所以 err ! nil 会生效不符合预期 如果修改这个问题呢当我们需要返回 nil 时显示指明返回 nil如下代码 type MyError struct{} func (me *MyError) Error() string {return my error } func SomeThing() error {var myError *MyError // 默认初始化为 nil// ...return nil } func main() {err : SomeThing()fmt.Println(reflect.TypeOf(err), reflect.ValueOf(err)) // nil invalid reflect.Valueif err ! nil { // 这段代码不会被执行fmt.Println(err)} }总结需要返回 nil 时要显示返回 nil不要用指针类型的零值
http://www.hkea.cn/news/14380513/

相关文章:

  • 怎么注销建设银行网站用户名专科医院网站建设
  • 湖南网站营销优化开发长沙市住房和城乡建设部网站
  • 营销型网站建设主要教学内容wordpress cdn登录
  • 如何做网站的关键词wordpress果酱
  • 高新网站开发1年经验asp建设的网站
  • 福建宁德建设局网站丰台青岛网站建设
  • 网站是用虚拟机做还是服务器网站建设产品展示型的
  • 做qq代刷网站企业网站如何备案流程
  • 赣州网站设计哪家强做设计的什么网站能挣钱
  • 做网站的有哪些学校聊城做网站的公司新闻
  • wordpress 新建主题seo查询官方网站
  • 网站搭建手机淄博桓台网站建设方案
  • 快速建企业网站昆明学习网站建设
  • 网站建设捌金手指下拉七wordpress 七牛
  • 广州哪家网站建设服务好asp手机网站
  • 网上购物的网站有哪些网站建设详情页
  • 电脑网站手机版怎么做wordpress京东客
  • 做特殊任务的网站医院门户网站建设方案
  • 电子商务网站建设试题及答案如何给网站做二维码
  • 怎么和网站合作推广海外品牌推广
  • 编写网站策划方案百度网站名片
  • 酒店官方网站的功能建设手机免费建设网站制作
  • 如何在工商局网站做企业年报池州网站建设价格
  • ppt 如何做网站交互式赶集招聘网
  • 网站建设免费软件adspower浏览器
  • 沧州网站艰涩很沧州外贸网站建设
  • 如何建立一个手机网站线上引流的八种推广方式
  • 电话销售网站建设郑州网页设计制作
  • 洛阳网站建设多少钱wordpress importer
  • 网站怎么上传购物网站后台流程图