zoukankan      html  css  js  c++  java
  • go中interface{}判nil

    在go中的nil只能赋值给指针、channel、func、interface、map或slice类型的变量

    interface 在底层,interface作为两个成员来实现,一个类型和一个值假设为type 和value

    type存储类型 ,value存储类型的值

    只有内部类型都为nil,总的interface才是空的。

    	var inter interface{} = nil
    	if inter==nil{
    		fmt.Println("empty")
    	}else{
    		fmt.Println("not empty")
    	}
    

      结果为 empty

     nil为untyped类型,赋值给interface,则type和value都是nil,比较的结果是true

      其他有类型的赋值给inter,结果是false,例如

    var inter interface{} = (*int)(nil)
    	if inter==nil{
    		fmt.Println("empty")
    	}else{
    		fmt.Println("not empty")
    	}  

     结果为 not empty

    对interface{}判空的方法是使用反射的方式进行判断

    
    
    var inter interface{} = (*int)(nil)
    if IsNil(inter){
    		fmt.Println("empty")
    	}else{
    		fmt.Println("not empty")
    	}
    
    
    func IsNil(i interface{}) bool {
    	vi := reflect.ValueOf(i)
    	if vi.Kind() == reflect.Ptr {
    		return vi.IsNil()
    	}
    	return false
    }
    

     结果为 empty

  • 相关阅读:
    如何搭建企业级中台系统
    Linux上安装git
    Jenkins的CI持续集成
    docker安装jenkins
    在线思维导图网站
    K8s容器编排
    MySQL存储引擎
    tomcat8 进入不了Manager App 界面 403 Access Denied
    IdeaVim-常用操作
    Node.js 安装及环境配置之 Windows 篇
  • 原文地址:https://www.cnblogs.com/9527s/p/13359225.html
Copyright © 2011-2022 走看看