go实战中的一些坑(2)
这篇主要是纠正上一篇的补坑法…. 第一个坑在上一篇文章我修改错误时是这么来整的 1234567891011121314151617181920212223proChan := make(chan AreaList,len(prolist))for _, pro := range prolist { proChan <- *pro wg.Add(1) go func(){ defer wg.done() pro :=<- proChan statisticsModel, _ := model...
go实战中的一些坑(1)
一个关于goroutine的坑,与解决它的故事… 坑的起源这项目是公司缺人所以我来接手整一下前端,然后在测试一个地图页面的时候感觉到明显的延迟,原本以为是d3的svg地图渲染慢,正想着要不要换成canvas来加快渲染,然后我打开了开发者工具,发现这个接口整整需要4s来获取,这可是本地测试环境啊,这要是上线来整的话那不是凉凉?逐打开项目代码查看,这个接口程序非常简单,代码如下: 1234567891011121314for _, pro := range prolist { statisticsModel, _ := model.Ge...
Gitlab CI/CD 教程
一开始是打算给自己博客整个CI然后自动部署,搞定的差不多之后就开始手痒,打算给公司的一个golang的项目也给CI/CD了, 然后就踏上了GitLab - CI/CD 的不归路。 其实安装过程的教程官网有:GitLab,就几条命令而已 。 Installation 安装下载,根据linux的类型自行选择。 12345678# Linux x86-64sudo curl -L --output /usr/local/bin/gitlab-runner https://gitlab-runner-downloads.s3.ama...
Switch 还是 If , 这是个问题
golang的语法里,选择判断的语句有 switch case if else select case 这三个组合。而 select case 通常是搭配 channel 类型使用的,所以暂时不在这篇文章的讨论范围。 通常来说我们更倾向于使用 switch case 而不是 if else , 因为前者更加优雅清晰 , 而且在 c 中,编译器有对switch 语句进行优化 —>出处 。而 golang 因为没有和c一样生成跳转表,golang 的switch 实现是通过二分法(v1.7.2)来实现的。所以有人测出在超多分支的情况下 , g...
Open Virtual Network 进程作用
ovn 有两个运行进程,以下为作用。 The Daemons ovn-northd Converts from the high-level northbound DB to the run-time southbound DB. 从高层北向数据库转换到南向运行数据库 Generates logical flows based on high-level configuration. 基于高层(抽象)配置生成逻辑流表 ovn-controller Register Chassis and VIFS to southbound ...
go学习笔记(5) — panic,Recover
Don’t Panic ! 并不,只是在玩梗。 Panicpanic 作为内置函数,可以中断原有控制流程。go没有和java一样的异常抛出机制,而是使用了panic和recover机制。需要注意的是,这应当作为最后手段来使用,代码中不应该有或者说极少需要panic的东西。 当程序调用了panic,程序的执行被中断,但是defer的调用会正常执行。 Recover可以让panic了的goroutine恢复过来。recover仅在defer的过程中生效,正常情况调用recover会返回nil。 123456789func panicRecover(...
go学习笔记(4) — iota , array ,slice , map
第四篇,我都没想到我居然有毅力写到第四篇…..go学习笔记(4) — iota , array ,slice , map 关键字IOTAGo 的一个关键字,可以在声明enum的时候用,开始时默认值为0,const 中每增加一行 +1 12345const( x = iota //x=0 y = iota //y=1 z //z=2) 常量声明省略值时,默认和之前的值相同,即 z 隐式地声明为 iota , 所以 y 其实也可以省略。 1234567const( x = iota //x=0 y = iota //y=...
go学习笔记(3) — interface
interfacce 翻译过来即是接口,这是种非常抽象的定义,即鸭子类型。(当一只鸟,会鸭子一样叫,会鸭子一样走路,会鸭子一样飞,我们就把它称作为鸭子) interface示例如下 123456func (h human) sayHi(){ fmt.Printf("Hi I am %s",h.name)}type men interface { sayHi()} 这时候我们定义好了一个 men的接口,并把sayhi()方法添加进了该接口。接下来我们看看这个是怎么使用的。 1234...
go学习笔记(2) — method
go的方法类让我这位php受害者难受的要死 , 但是学习了一段时间之后,不得不说,go的类方法是真的牛批。不扯谈了,开始写文章。 methodGo 中可以把函数当作struct的字段一样处理,带有接收者的函数,成为method 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758package mainimport "fmt"const ( MALE = iota...
go 单元测试
目前最近的工作要接触一些有关于测试方面的知识,但是本人之前并没有做测试的经验,所以开始在网上做收集研究。接下来言归正传。 单元测试go 语言本身就自带了一个建议的测试库叫做 testing ,使用方法蛮简单的 。 比如测试 1234package mainfunc add(i int,i2 int) int{ return i + i2} 123456789101112package mainimport "testing"func Test_add(t *testing.T) { s...