Golang

beego 如何不同环境用不同的runmode

Use different runmode of beego.

qwding

1 minute read

beego runmode修改 除了配置文件设置runmode,想切换环境时候需要手动改,太麻烦,而且容易忘 想通过如下两种方法尝试,均无效: flag,但是beego本身并没有flag,简直行不通 官方文档里个的方法是 beego.Runmode = “dev”, 但其实这个方法很鸡肋,很蛋疼,因为读配置文件早在程序运行前执行了,而如果再程序里修改runmode,你在init里用的参数必然还是默认写的,用着基本蛋疼。 我在我本地beego 1.7的环境里又尝试了一下,发现已经没有这个方法了,可能作者也觉得确实蛋疼给删了吧。 环境变量改变 尝试将配置文件的runmode指定为环境变量,然后指定具体模式。发现居然成功了。不管怎么样,确实这个办法还是一个不错的解决方案了 加上docker更好用 因为本来用docker,这样直接在Dockerfile里设置ENV,部署线上的时候,直接用构建好的镜像启动就ok了,什么都不用改了。 懒人使人进步

How golang slice Semi - pointer.

golang slice怎么个半指针传递

2 minute read

起因 刷leetcode的77题时候,使用了递归方法,并且使用数组时候如下 result := make([][]int, 0, length+1) recursive([]int{}, 1, n, k, result) 第一次使用了cap声明slice,这样的好处是append时候在length后添加数据,并且保证长度够,append时候不会重新申请地址 但是跑的时候发现,recursive()后,在返回到此段代码,居然什么都没有!result值没变。 什么? slice不是传说的指针传递么? 先看下官方数组结构样子 当然,一直知道数组是半指针,就是将数组的地址的值传进去。在函数里是改变不了指针的值,但是可以操作指针指向的数据,详细的google有很多 我想象的是这样:函数收到的是数组的头地址(就是图最上面的指针),length和cap等数据,这样可以完全接管数组的操作了 但是上述起因里出现的问题却不是这样,到底是什么原因呢?于是写了测试代码 func main() { result := make([]int, 0, 10) addr := &result fmt.Println("result:", result, "addr:", unsafe.Pointer(addr)) for i := 0; i < 10; i++ { functions(result) result = append(result, i) //appendData(result,i) } fmt.Println("result:", result, "addr:", unsafe.Pointer(addr)) } func functions(arr []int) { addr := &arr if len(arr) > 0 { fmt.