2021
05-23
05-23
golang 后台进程的启动和停止操作
启动命令我们先来个非后台运行的启动命令funcinit(){startCmd:=&cobra.Command{Use:"start",Short:"StartGonne",Run:func(cmd*cobra.Command,args[]string){startHttp()},}startCmd.Flags().BoolVarP(&daemon,"deamon","d",false,"isdaemon?")RootCmd.AddCommand(startCmd)}startHttp方法启动一个http的web服务funcstartHttp(){http.H...
继续阅读 >
xorm支持各种关系数据库,最近使用postgresql时,总是踩到一些坑,在此记录下解决方式。在使用postgresql的array类型时,查询有点问题,xorm的官方文档给出重写的方式,但是不是很清晰:官方文档链接:http://xorm.io/docs也就是说碰到基础库不支持的类型,需要我们去重写ToDB、FromDB方法,废话不多说直接上代码:比如int8[]类型,自定一个Int64ArraytypeInt64Array[]int64func(s*Int64Array)FromDB(bts[]byte)error{if...
最佳方式:根据map的长度,新建一个数组,遍历map逐个压入方法1(效率很高):funcgetKeys1(mmap[int]int)[]int{//数组默认长度为map长度,后面append时,不需要重新申请内存和拷贝,效率很高j:=0keys:=make([]int,len(m))fork:=rangem{keys[j]=kj++}returnkeys}方法2(效率很高):funcgetKeys2(mmap[int]int)[]int{//数组默认长度为map长度,后面append时,不需要重新申请内存和拷贝,效率很高keys...
在对float零值判断时往往只需要和0做==即可,所以曾经int和float都用==0来做对比,比如下方:in:=0.vartmpinterface{}=float32(in)fmt.Println("float0==0:",in==0)fmt.Println("float->interface{}->float",tmp.(float32)==0)switchv:=tmp.(type){casefloat32:fmt.Println("float->interface-.type->float",v==0)}结果:float0==0:truefloat->interface{}-...
我们通常用golang来构建高并发场景下的应用,但是由于golang内建的GC机制会影响应用的性能,为了减少GC,golang提供了对象重用的机制,也就是sync.Pool对象池。sync.Pool是可伸缩的,并发安全的。其大小仅受限于内存的大小,可以被看作是一个存放可重用对象的值的容器。设计的目的是存放已经分配的但是暂时不用的对象,在需要用到的时候直接从pool中取。任何存放区其中的值可以在任何时候被删除而不通知,在高负载下可以动态的扩...