首页 > 其他分享 >golang 指针判断是否为空

golang 指针判断是否为空

时间:2023-05-19 14:22:07浏览次数:46  
标签:reflect func IsNil vi golang 为空 指针

golang判断指针是否为空的方法:

1、知道类型的情况下,自然是可以使用类型断言后判空。如ai, ok := i.(*int),之后判断ai == nil。

2、不知道是何种类型的指针,就只好借助反射了vi := reflect.ValueOf(i),后使用vi.IsNil()来判断。但如果i里放到不是一个指针,调用IsNil会出异常,则可能要写一个这样的函数来判空

func IsNil(i interface{}) bool {

defer func() {

    recover()

}()

vi := reflect.ValueOf(i)

return vi.IsNil()

}

但有这样强加一个defer的recover确实不好看,于是借助类型判断变成这样

func IsNil(i interface{}) bool {

vi := reflect.ValueOf(i)

if vi.Kind() == reflect.Ptr {

    return vi.IsNil()

}

return false

}

标签:reflect,func,IsNil,vi,golang,为空,指针
From: https://www.cnblogs.com/zzx-blogs/p/17415006.html

相关文章

  • golang 内存 stats 字段解释
    字段解释样例Alloc当前堆中已经分配给对象使用所占用的空间字节数322952TotalAlloc累计堆中已经分配给对象使用所占用的空间字节数,只会增长,不会减少29511472Sys总共从OS申请的字节数,包含运行时的heap、stack和其他内部数据结构的总和,它是虚拟内存空间。不一......
  • 关于JVM指针压缩性能的研究
    关于JVM指针压缩性能的研究摘要JVM的内存对消最小是8bytes所以32G内存的情况下可以使用32位的指针就可以了.32位就是4G在乘以最小的内存extent8bytes的出来可以指向32G的内存区域.如果大于32G,那么必须使用64位的指针.理论上会导致非堆区的内存膨胀与性能劣......
  • Golang -embed结合viper打包静态文件
    代码含有viper独立方式和goembed方式packagemainimport("bytes""embed""fmt""time""github.com/spf13/viper")//go:embedconfig.yamlvarf[]bytefuncmain(){//config:=viper.New()......
  • Golang高性能编程笔记--字符串拼接
    Golang中引入五种字符串拼接方法,分别如下:1.+拼接法2.fmt.Sprintf()3.strings.Builder4.bytes.Buffer5.[]byte代码示例,这里将根据《Go语言高性能编程》中的一节,来看一下这五种具体的方法:packagemainimport( "bytes" "fmt" "math/rand" "strings......
  • Golang - go:embed
    总结GoEmbed有什么用处能够在命令行工具里嵌入WEBgoinstall快速安装,启动web该web可以提供生成代码的平台该web可以提供例如jsontostruct等数据结构转换可以大大提高Go的工具链能力能够将前端资源打包到一个二进制包里,方便部署和安装静态资源访问没有io操作,速度非常......
  • VScode下golang 同一个包下不同文件之间函数调用问题
    VScode下golang同一个包下不同文件之间函数调用问题1.问题发现最近在vscode上学习golang的相关开发,发现这样一个问题:同文件夹下的两个文件,在都处于main包的情况下,无法在mian()里直接调用另一个文件中的函数,会报错:undefined。2.原因分析从语法层面上似乎并无问题,但是Go中main......
  • Golang - viper读取配置文件
    一、介绍Viper是一个方便Go语言应用程序处理配置信息的库。它可以处理多种格式的配置。它支持的特性:设置默认值从JSON、TOML、YAML、HCL和Javaproperties文件中读取配置数据可以监视配置文件的变动、重新读取配置文件从环境变量中读取配置数据从远端配置系统中读取数据,并......
  • 非空注解@NonNull与@NotNull使用错误导致传参为空时报NPE
    背景新上线了一个需求后,发现时不时的有一些NullPointerException报出来,跟踪后发现都是在一个地方报出来的org.springframework.beans.BeanInstantiationException:Failedtoinstantiate[net.lingyejun.mall.domain.book.req.BookInfoReqDto]:Constructorthrewexception;......
  • golang配置读取值viper
    viper简介Viper是Go应用程序的完整配置解决方案,包括12-Factor应用程序。它旨在在应用程序中工作,并且可以处理所有类型的配置需求和格式。它支持:设置默认值从JSON、TOML、YAML、HCL、envfile和Java属性配置文件中读取实时观看和重新读取配置文件(可选)从环境变量中读取从远程......
  • 指针与constexpr
    一、常量表达式:是指值不会改变并且在编译过程就能得到的计算结果的表达式。定义常量表达式变量:constexpr变量类型变量名;例如:constexprintmf=20;/////20是常量表达式constexprintlimit=mf+1;/////mf+1是常量表达式constexprintsz=size();//////错误:size()只有到运行时才......