Golang 如何判断数组某个元素是否存在(isset)
如,现在需要判断命令行是否传了参数,即os.Args[1]是否存在
如果使用下述的判断:
packagemain import( "fmt" "os" ) funcmain(){ ifos.Args[1]!=""{ fmt.Println("aaa") }else{ fmt.Println("bbb") } }
会报错:
indexoutofrange
panic:runtimeerror:indexoutofrange goroutine1[running]: main.main() /root/workspace/go/testn.go:9+0x100 exitstatus2
正确处理方法:通过遍历的方式判断key=1是否存在
packagemain import( "fmt" "os" ) funcmain(){ vartargetstring//用来获取最终需要的os.Args[1] fork,v:=range(os.Args){ ifk==1{//假设需要获取os.Args[k],k=1 target=v } } iftarget!=""{//不为空则表示os.Arg[1]存在 fmt.Printf("os.Arg[1]=%s",target) } }
补充:golang怎么判断是否传递了数值
起因
今天在做项目的时候有个需求就是状态必须传递,在golang中接收到json参数解析到结构体中数值类型不传递有一个默认的0,但是状态也可以传递0,怎么来判断是否传递了这个数值呢?
解决办法
方法一:
在解析之前给结构体默认值,案例如下:
varjsonBlob=[]byte(`[ {"Name":"Platypus","Order":"Monotremata"} ]`) typeAnimalstruct{ Namestring Orderstring ID int } animals:=&Animal{ID:-9999} err:=json.Unmarshal(jsonBlob,animals) iferr!=nil{ fmt.Println("error:",err) } fmt.Printf("%+v",animals)
方法二:
使用额外的结构体+指针类型,如果不传递解析为nil而不是0,如下:
typeNodeXXXstruct{ Datestring`json:"date"` Count*int32`json:"count"` }
方法三:
别人已经写好了库,自己使用就行
https://godoc.org/gopkg.in/guregu/null.v3
以上为个人经验,希望能给大家一个参考,也希望大家多多支持毛票票。如有错误或未考虑完全的地方,望不吝赐教。