用GO写一个文件传输工具
https://github.com/foolishway/file-transfer阅读全文
https://github.com/foolishway/file-transfer阅读全文
一、规则 1、测试文件必须以 _test.go 结尾 2、测试函数名必须以 TestXxxxx 开始(Xxxx为对应的需要测试的函数) 3、使用 go test 命令开启测试 文件名以_test 结尾,函数以Test 开头,在执行 go test 命令时会自动匹配测试文件很执行测试函数 二、约定 1、有时候我们将测试文件(以_test.go 结尾的文件)放在需要测试的源文件同个目录(包)下,但更好的做法是专门创建一个包用于测试,一般约定包目录以_test结尾(如测试 xxx 包时我们可以建一个 ...阅读全文
新版的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 此时速度...阅读全文
前言 在公司内部使用 Jenkins 做 CI/CD 时,经常会碰到项目构建失败的情况,一般情况下通过 Jenkins 的构建控制台输出都可以了解到大概发生的问题,但是有些特殊情况开发需要在 Jenkins 服务器上排查问题,这个时候就只能找运维去调试了,为了开发人员的体验就调研了下 web terminal,能够在构建失败时提供容器终端给开发进行问题的排查。 效果展示 支持颜色高亮,支持<kbd>tab</kbd>键补全,支持复制粘贴,体验基本上与平常的 terminal 一致。 基于 doc...阅读全文
本文对Java、Go和Rust之间的对比并非完全是基准测试,更多的是比较输出的可执行文件大小、内存使用情况、CPU使用率、运行时要求,当然会有一个小基准测试用于获取RPS数据,使得更容易理解这些数值。为了尝试更合理比较这三者,我在这次比较中分别用每种语言写了个Web服务。该Web服务非常简单,提供了3个REST端点。三个Web服务的存储库托管在GitHub[1]上。制品大小介绍下我是如何构建二进制文件的。在Java示例中,我使用maven-shade-plugin[2]插件并使用mvn pack...阅读全文
花了将近一周的时间,将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-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() { } ...阅读全文
这里列举的Go语言常见坑都是符合Golang语法的,可以正常的编译,但是可能是运行结果错误,或者是有资源泄漏的风险。 可变参数是空接口类型 当参数的可变参数是空接口类型时,传人空接口的切片时需要注意参数展开的问题。 func main() { var a = []interface{}{1, 2, 3} fmt.Println(a) fmt.Println(a...) } // 不管是否展开,编译器都无法发现错误,但是输出是不同的: // [1 2 3] // 1 2 3 数组是值传递 在函数调...阅读全文
今天我们来了解一下 Go 语言的协程并发机制,这也可能是 Go 语言最为吸引人的特性了,了解它的原理和底层机制对于掌握 Go 语言大有裨益,话不多说开始吧!并发和并行并发和并行都是为了充分利用 CPU 多核计算资源所提出来的概念,相信我们或多或少都对二者的概念有所了解:并发指的是在同一时间段内,多条指令在 CPU 上同时执行;并行指的是在同一时刻内,多条指令在 CPU 上同时执行。并发程序并不要求 CPU 具备多核计算的能力。在同一时间段内,多个线程会被分配一定的执行时间片,在 CPU 上被快速...阅读全文
他是第一期 Talent plan 的学员,也是第一期易用性挑战赛优秀参赛选手,拥有多个身份的他成为了 TiDB 新晋 Committer,他就是来自 Execution SIG 的马钰杰(mmyj)。 他是游戏云玩家,也喜欢研究电子产品,总是第一时间入手,也逃不过第一时间吃灰。目前在星火网校做后台开发,工作中接触最多的语言是 Golang。他自称是个典型的程序员,但在采访的间隙突然让我稍等他一下,去给女友煮汤圆,着实让小编酸了一把~ 今天,让我们来看看 mmyj 在 TiDB 社区的心路历程吧...阅读全文
作者 | 李志信导读:有了上一篇文章《Dubbo-go 源码笔记(一)Server 端开启服务过程》的铺垫,可以类比客户端启动于服务端的启动过程。其中最大的区别是服务端通过 zk 注册服务,发布自己的ivkURL并订阅事件开启监听;而客户应该是通过zk注册组件,拿到需要调用的serviceURL,更新invoker并重写用户的RPCService,从而实现对远程过程调用细节的封装。配置文件和客户端源代码1. client 配置文件helloworld 提供的 demo:profiles/clie...阅读全文
值类型和引用类型区别值类型:使用变量指向内存的值,内存分配通常在栈中,发生赋值和参数传递时是把这个数据的值(可能多个数据,如数组包括数据域和长度)一起拷贝一份。引用类型:引用类型数据是使用变量的内存地址,或内存地址中第一个字所在的位置,这个内存地址被称之为指针,这个指针实际上也被存在另外的某一个字中。为什么要把数组、切片、字符串三种类型一起讲呢?因为它们的数据结构具有紧密联系,在底层他们的内存结构是一样的,只是他们在上层因为语法的原因表现不一样。数组和字符串是值类型,切片是引用类型。数组数组是由...阅读全文
Go命令行有常用的这几个命令: go build 编译包和依赖 go run 编译和运行go程序 go install 编译并安装包和依赖 go get 将依赖下载到当前依赖并安装 go help来看都可以编译构建, go help 对于它们之间的区别,刚刚上手的同学可能比较容易混淆,下面我们就通过思维导图的方式来看看这些命令的异同。 image.png go build go build是这几个命令的基础,go build <命令源码文件/.>会生成目标系统的可执行文件 image.png 或...阅读全文
李乐问题描述 下午15点左右,QA反馈灰度环境大量请求超时。kibana查询灰度网关日志,确实存在部分请求响应时间超过60秒,HTTP状态码504。进一步分析日志,所有504请求的上游地址都是xxxx:80。 目前该服务部署了两套环境,k8s + kvm,k8s环境上游ingress(即Nginx)端口80,kvm环境上游Golang服务端口19001。且,k8s环境该服务只部署一个pod。是单单k8s环境服务有问题吗? 登录到k8s服务终端,手动curl请求(healthCheck接口,...阅读全文
安装beego框架安装beego框架的前提是已经配置好的Go的开发环境,这个网上有很多教程,大家可以参考下,不太难的.主要需要注意以下几个地方:// 这是在环境配置的时候需要注意的 export GOPATH=/Users/xxxx/go export GOBIN=$GOPATH/bin export PATH=$PATH:$GOBIN直接进行安装的话可能会遇到一些问题,像我就失败了我的解决办法是修改以下几个配置,然后就可以了go env -w GO111MODULE=on go env -w ...阅读全文
# 使用toml配置文件连接数据库 ## toml配置文件的内容 ```toml [dbservers.test] host = "127.0.0.1" port = 5432 dbname = "test" user = "loginuser" password = "123456" [dbservers.dborm] host = "127.0.0.1" port = 5432 dbname = "test" user = "loginuser" pa...阅读全文
首先我们来看一段代码:package main import ( "fmt" "unsafe" ) func main() { var a int var b int8 var c int16 var d int32 var e int64 slice := make([]int, 0) slice = append(slice, 1) fmt.Printf("int:%dnint8:%dnint16:%dnint32:%dnint64:%dn", unsafe.Sizeof(a), unsaf...阅读全文
一、前言 Go语言在设计上对同步(Synchronization,数据同步和线程同步)提供大量的支持,比如 goroutine和channel同步原语,库层面有 - sync:提供基本的同步原语(比如Mutex、RWMutex、Locker)和 工具类(Once、WaitGroup、Cond、Pool、Map) - sync/atomic:提供变量的原子操作(基于硬件指令 compare-and-swap) -- 引用自《Golang package sync 剖析(一): sync.Once》...阅读全文