Golang测试--单元测试

一、规则 1、测试文件必须以 _test.go 结尾 2、测试函数名必须以 TestXxxxx 开始(Xxxx为对应的需要测试的函数) 3、使用 go test 命令开启测试 文件名以_test 结尾,函数以Test 开头,在执行 go test 命令时会自动匹配测试文件很执行测试函数 二、约定 1、有时候我们将测试文件(以_test.go 结尾的文件)放在需要测试的源文件同个目录(包)下,但更好的做法是专门创建一个包用于测试,一般约定包目录以_test结尾(如测试 xxx 包时我们可以建一个 ...阅读全文

简书 2020-11-11 12:32:49 hellocassiel

1-2020最新版beego快速代理安装无需gopath

新版的golang已经完全不需要gopath,如果你习惯以前的方式也可以。目前大多数使用go mod。 本文使用的是win10. 1,golang设置到最新版 2,开启gomod设置代理 go env -w GO111MODULE=on go env -w GOPROXY=https://goproxy.cn,direct··· 3,安装beego和bee go get -u github.com/astaxie/beego go get -u github.com/beego/bee 此时速度...阅读全文

简书 2020-11-11 12:32:49 大华日记

通过浏览器连接docker容器

前言 在公司内部使用 Jenkins 做 CI/CD 时,经常会碰到项目构建失败的情况,一般情况下通过 Jenkins 的构建控制台输出都可以了解到大概发生的问题,但是有些特殊情况开发需要在 Jenkins 服务器上排查问题,这个时候就只能找运维去调试了,为了开发人员的体验就调研了下 web terminal,能够在构建失败时提供容器终端给开发进行问题的排查。 效果展示 支持颜色高亮,支持<kbd>tab</kbd>键补全,支持复制粘贴,体验基本上与平常的 terminal 一致。 基于 doc...阅读全文

简书 2020-11-11 12:32:43 mklee

Java、Go和Rust间的比较

本文对Java、Go和Rust之间的对比并非完全是基准测试,更多的是比较输出的可执行文件大小、内存使用情况、CPU使用率、运行时要求,当然会有一个小基准测试用于获取RPS数据,使得更容易理解这些数值。为了尝试更合理比较这三者,我在这次比较中分别用每种语言写了个Web服务。该Web服务非常简单,提供了3个REST端点。三个Web服务的存储库托管在GitHub[1]上。制品大小介绍下我是如何构建二进制文件的。在Java示例中,我使用maven-shade-plugin[2]插件并使用mvn pack...阅读全文

51CTO博客 2020-11-08 20:56:25 分布式实验

Golang 源码系列 - sync package

花了将近一周的时间,将sync源码包过了一遍,重点在于实现,以后需要补充踩坑和适用场景。 ​sync.atomic​ ​Golang 源码系列 - sync.atomic ​sync.WaitGroup​ Golang 源码系列- sync.WaitGroup ​sync.Mutex​ Golang 源码系列- sync.Mutex ​sync.RWMutex​​ Golang 源码系列- sync.RWMutex ​sync.Map​ Golang 源码系列- sync.Map 【WIP】 ​...阅读全文

简书 2020-11-11 08:32:40 梦工厂

2020-11-10:golang中的接口,类型不空,值为空,如何判断是nil?

福哥答案2020-11-10: reflect.ValueOf(接口变量).IsNil(),用这个即可判断。对于值类型,会panic。两种方法如下: 1.异常判断:recover捕获。 2.类型判断:reflect.ValueOf(接口变量).Kind()获取类型。 golang代码如下: package main import ( "fmt" "reflect" ) type Person struct { Name string } func (*Person) GetName() { } ...阅读全文

简书 2020-11-11 01:32:42 福大大架构师每日一题

Golang基础--常见坑

这里列举的Go语言常见坑都是符合Golang语法的,可以正常的编译,但是可能是运行结果错误,或者是有资源泄漏的风险。 可变参数是空接口类型 当参数的可变参数是空接口类型时,传人空接口的切片时需要注意参数展开的问题。 func main() { var a = []interface{}{1, 2, 3} fmt.Println(a) fmt.Println(a...) } // 不管是否展开,编译器都无法发现错误,但是输出是不同的: // [1 2 3] // 1 2 3 数组是值传递 在函数调...阅读全文

简书 2020-11-11 01:32:41 DevilRoshan

一文了解 Go 并发模型

今天我们来了解一下 Go 语言的协程并发机制,这也可能是 Go 语言最为吸引人的特性了,了解它的原理和底层机制对于掌握 Go 语言大有裨益,话不多说开始吧!并发和并行并发和并行都是为了充分利用 CPU 多核计算资源所提出来的概念,相信我们或多或少都对二者的概念有所了解:并发指的是在同一时间段内,多条指令在 CPU 上同时执行;并行指的是在同一时刻内,多条指令在 CPU 上同时执行。并发程序并不要求 CPU 具备多核计算的能力。在同一时间段内,多个线程会被分配一定的执行时间片,在 CPU 上被快速...阅读全文

51CTO博客 2020-11-10 18:58:17 分布式实验

TiDB Committer | 男友力 max 的典型工程师马钰杰

他是第一期 Talent plan 的学员,也是第一期易用性挑战赛优秀参赛选手,拥有多个身份的他成为了 TiDB 新晋 Committer,他就是来自 Execution SIG 的马钰杰(mmyj)。 他是游戏云玩家,也喜欢研究电子产品,总是第一时间入手,也逃不过第一时间吃灰。目前在星火网校做后台开发,工作中接触最多的语言是 Golang。他自称是个典型的程序员,但在采访的间隙突然让我稍等他一下,去给女友煮汤圆,着实让小编酸了一把~ 今天,让我们来看看 mmyj 在 TiDB 社区的心路历程吧...阅读全文

简书 2020-11-10 20:32:44 PingCAP

Dubbo-go 源码笔记(二)客户端调用过程

作者 | 李志信导读:有了上一篇文章《Dubbo-go 源码笔记(一)Server 端开启服务过程》的铺垫,可以类比客户端启动于服务端的启动过程。其中最大的区别是服务端通过 zk 注册服务,发布自己的ivkURL并订阅事件开启监听;而客户应该是通过zk注册组件,拿到需要调用的serviceURL,更新invoker并重写用户的RPCService,从而实现对远程过程调用细节的封装。配置文件和客户端源代码1. client 配置文件helloworld 提供的 demo:profiles/clie...阅读全文

Segmentfault 2020-11-13 19:32:33 阿里巴巴云原生

Go基础编程:数组、切片、字符串

值类型和引用类型区别值类型:使用变量指向内存的值,内存分配通常在栈中,发生赋值和参数传递时是把这个数据的值(可能多个数据,如数组包括数据域和长度)一起拷贝一份。引用类型:引用类型数据是使用变量的内存地址,或内存地址中第一个字所在的位置,这个内存地址被称之为指针,这个指针实际上也被存在另外的某一个字中。为什么要把数组、切片、字符串三种类型一起讲呢?因为它们的数据结构具有紧密联系,在底层他们的内存结构是一样的,只是他们在上层因为语法的原因表现不一样。数组和字符串是值类型,切片是引用类型。数组数组是由...阅读全文

Segmentfault 2020-11-13 11:32:33 一夕烟云

Golang中的常用命令

Go命令行有常用的这几个命令: go build 编译包和依赖 go run 编译和运行go程序 go install 编译并安装包和依赖 go get 将依赖下载到当前依赖并安装 go help来看都可以编译构建, go help 对于它们之间的区别,刚刚上手的同学可能比较容易混淆,下面我们就通过思维导图的方式来看看这些命令的异同。 image.png go build go build是这几个命令的基础,go build <命令源码文件/.>会生成目标系统的可执行文件 image.png 或...阅读全文

简书 2020-11-10 15:35:16 李小西033

Golang之HTTP服务『假死』问题排查

李乐问题描述  下午15点左右,QA反馈灰度环境大量请求超时。kibana查询灰度网关日志,确实存在部分请求响应时间超过60秒,HTTP状态码504。进一步分析日志,所有504请求的上游地址都是xxxx:80。  目前该服务部署了两套环境,k8s + kvm,k8s环境上游ingress(即Nginx)端口80,kvm环境上游Golang服务端口19001。且,k8s环境该服务只部署一个pod。是单单k8s环境服务有问题吗?  登录到k8s服务终端,手动curl请求(healthCheck接口,...阅读全文

Segmentfault 2020-11-12 16:32:33 LNMPR源码研究

golang流程

github地址:https://github.com/golang官网地址:https://golang.org/1:下载,2:安装,3:配置,4:代码,5:编译,6:结果,7:发布1:下载,2:安装,3:配置:https://www.runoob.com/go/go-environment.html4:代码:https://www.runoob.com/go/go-tutorial.html5:编译:go build运行:go run main.go注意:环境变量GOOS和GOARCH,其中...阅读全文

简书 2020-11-10 13:32:42 鱼世界

空数组和空对象

在实际项目中,往往需要事先声明一个空数组或者一个空对象,用于防止因为缺少数据而导致的报错。以php举例,声明一个空数组很简单, $array = [],就完成了数组变量$array的创建.而要想创建一个空对象,就不像数组那样那么简单了。我整理了一下php创建空对象的几种方法,比较正规的有以下两种:1: $object = new StdClass(); 2: $object = (object)[]; 还有几种比较另类的声明方法,虽然也能用,但却显得多余了一些 1: class object {...阅读全文

Segmentfault 2020-11-12 10:32:32 付霖

Mac环境下安装配置beego框架

安装beego框架安装beego框架的前提是已经配置好的Go的开发环境,这个网上有很多教程,大家可以参考下,不太难的.主要需要注意以下几个地方:// 这是在环境配置的时候需要注意的 export GOPATH=/Users/xxxx/go export GOBIN=$GOPATH/bin export PATH=$PATH:$GOBIN直接进行安装的话可能会遇到一些问题,像我就失败了我的解决办法是修改以下几个配置,然后就可以了go env -w GO111MODULE=on go env -w ...阅读全文

Segmentfault 2020-11-11 22:32:33 Redefine

【golang】sync.WaitGroup详解

一、前言 Go语言在设计上对同步(Synchronization,数据同步和线程同步)提供大量的支持,比如 goroutine和channel同步原语,库层面有 - sync:提供基本的同步原语(比如Mutex、RWMutex、Locker)和 工具类(Once、WaitGroup、Cond、Pool、Map) - sync/atomic:提供变量的原子操作(基于硬件指令 compare-and-swap) -- 引用自《Golang package sync 剖析(一): sync.Once》...阅读全文

Segmentfault 2020-11-12 11:32:32 去去1002