golang快速入门
自己的学习笔记
1Goer
这个作者很懒,什么都没留下…
展开
-
go get私有仓库问题集锦
未提供httpsgo env -w GOINSECURE=gitdemo.com鉴权问题get "gitlab.com/xxx/zz": found meta tag get.metaImport{Prefix:"gitlab.com/xxx/zz", VCS:"git", RepoRoot:"https://gitlab.com/xxx/zz.git"} at //gitlab.com/xxx/zz?go-get=1 verifying gitlab.com/xxx/zz@v0.0.1: gitl原创 2022-02-09 13:38:30 · 1726 阅读 · 0 评论 -
脑图教你搞懂golang中GMP调度关系
原创 2021-04-20 19:04:57 · 327 阅读 · 0 评论 -
go 之 Blank identifier妙用
暂时引入的包或者变量不使用如何不删除也能存在在Go中 如果导入了某个包 但是并有使用它 Go会认为这是个错误的状态 编译过不去 导入包 但是不用它 可能会出现意想不到的情况 而且给编译增加了不必要的麻烦 已经初始化过 但是没有使用的变量会浪费计算资源 并且时间久了之后 或者他人接受后 可能会不注意到这点 而导致严重的bug举例来说 在下面这段代码中 有两个导入的包 以及一个变量 没有被使用:package mainimport ( "fmt" "io")func main()原创 2020-12-04 16:24:23 · 467 阅读 · 0 评论 -
golang 代码检测工具之goimports
安装goimports下载包go get -g -v golang.org/x/tools/cmd/goimports生成bin包go install golang.org/x/tools/cmd/goimports配合IDE(如:以MAC goland为例)1.打开goland,打开Preferences(Command+,);2.打开tools中的File Watchers;3.添加goimports进去即可4.Apply后,ok,在goland菜单栏中找到Tool原创 2020-12-04 15:51:42 · 6578 阅读 · 1 评论 -
gin框架GetHeader报错concurrent map read and map write
一、gin框架GetHeader探究// CanonicalHeaderKey.type Header map[string][]stringfunc (h Header) Get(key string) string { return textproto.MIMEHeader(h).Get(key)}寻根我们发现GetHeader底层的数据存储在map中,就会存在并发读写map的问题二、解决方法在middleware层对数据进行预读取和存储ctx.Set("test","test"原创 2020-11-27 11:24:47 · 852 阅读 · 1 评论 -
golang查看gc是否有异常
# 一、gc分析命令```GODEBUG=gctrace=1 go run *.go```# 二、执行命令,分析内容如下```gc 1 @0.001s 13%: 0.004+2.5+0.023 ms clock, 0.019+0.18/1.7/2.3+0.094 ms cpu, 4->6->6 MB, 5 MB goal, 4 Pgc 2 @0.017s 6%: 0.002+4.1+0.020 ms clock, 0.009+0/3.4/5.6+0.0..原创 2020-11-24 17:29:05 · 540 阅读 · 0 评论 -
go mod问题解决
问题一go list -m: can't compute 'all' using the vendor directory (Use -mod=mod or -mod=readonly to bypass.)解决方法:目前根据提示,我们需要删除代码库下vendor目录才能解决问题rm -rf vendor问题二https://goproxy.cn,direc...原创 2020-06-01 14:44:49 · 6071 阅读 · 1 评论 -
golang版ip2long
func Ip2long(ipstr string) (ip uint32) { r := `^(\d{1,3})\.(\d{1,3})\.(\d{1,3})\.(\d{1,3})` reg, err := regexp.Compile(r) if err != nil { return } ips := reg.FindStringSubmatch(ipstr) if ips == nil { return }原创 2020-05-25 17:51:39 · 465 阅读 · 0 评论 -
golang gin框架学习
书单基础原创 2020-05-25 11:15:59 · 161 阅读 · 0 评论 -
golang阅读清单
Go 阅读清单此项目是一份关于Go的中文博客文章的阅读列表。 灵感来源于:gopher-reading-list。如果有新的文章也欢迎提交PR或issue。此项目只包含文章标题和链接,不会转载文章内容。由于能力、精力有限,提交的文章可能无法一一甄别,对于文章中有遗漏或笔误的地方,可以发起issue讨论。为避免列表过大,对于系列文章,建议只提交系列文章的目录。此列表将分为以下几个部分:基础基础代码组织与风格Web并发Go Modules中级代码设计并发测试Web工转载 2020-05-19 21:01:10 · 232 阅读 · 0 评论 -
golang面试专栏
一、Golang调度器GMP原理与调度全分析二、Golang多线程安全三、golang 上下文包作用四、原创 2020-05-12 10:57:19 · 268 阅读 · 0 评论 -
go好用的命令汇总
一、单测测试单个方法go test -v -run=TestDemo二、生成linux下可执行的bin包CGO_ENABLED=0 GOOS=linux GOARCH=amd64 go build -a -o bin/demo_go app/main.go三、grpc相关proto协议生成clientprotoc -I app/api/proto app/api/proto/*.pr...原创 2020-04-24 14:15:15 · 206 阅读 · 0 评论 -
Go Channel 面试题解析
有一道这样的面试题目:写代码实现两个 goroutine,其中一个产生随机数并写入到 go channel 中,另外一个从 channel 中读取数字并打印到标准输出。最终输出五个随机数。解决思路:package mainimport ( "fmt" "math/rand" "sync")func main() { output := make(chan int) va...原创 2020-04-23 21:57:47 · 1692 阅读 · 0 评论 -
go协程并发问题concurrent map read and map write
最近协程并发写map导致错误:concurrent map read and map write。直接把服务干挂了。原因:加锁锁相关详解请参考:https://blog.youkuaiyun.com/zf766045962/article/details/105431908type Demo struct{ Lock sync.RwMutex}go func() { d.Lock...原创 2020-04-22 22:17:19 · 3487 阅读 · 0 评论 -
golang锁知识之 sync.Mutex 和 sync.RWMutex
当我们的程序就一个线程的时候是不需要用到锁的,但是通常我们实际的代码不会是单个线程的,所有这个时候就需要用到锁了,那么关于锁的使用场景主要涉及到哪些呢?当我们多个线程在读相同的数据的时候则是需要加锁的当我们的程序既有读又有写的时候更是需要加锁的当我们有多个线程在写的时候同样也是需要加锁互斥锁互斥锁:同一个时刻只有一个线程能够拿到锁我们先通过一个例子来演示,如果当多个线程同时更改一个...转载 2020-04-10 13:52:18 · 698 阅读 · 0 评论 -
golang库之copier
github地址https://github.com/jinzhu/copier简介调用同名方法为字段赋值;以源对象字段为参数调用目标对象的方法,从而为目标对象赋值(当然也可以做其它的任何事情);将切片赋值给切片(可以是不同类型哦);将结构体追加到切片中。使用package mainimport ( "fmt" "github.com/jinzhu/copier"...原创 2020-04-04 08:22:33 · 2785 阅读 · 0 评论 -
golang之float类型保留小数点后2位
value, _ = strconv.ParseFloat(fmt.Sprintf("%.2f", 0.2223), 64) fmt.print(value)原创 2020-04-04 08:18:15 · 15333 阅读 · 1 评论 -
golang之int、int6、float32、float64、string之间互转
package mainimport ( "fmt" "strconv")func main() { string := "123" int, err := strconv.Atoi(string) if err != nil { } //string到int64 int64, err := strconv.ParseInt(string, 10, 64) ...原创 2020-03-25 19:35:09 · 9940 阅读 · 0 评论 -
golang相关proto协议
protoc -I app/api/proto app/api/proto/*.proto --go_out=plugins=grpc:app/api/proto/原创 2020-03-24 20:42:01 · 501 阅读 · 0 评论 -
golang之crc32算法解密字符串
根据实验我们知道crc32算法比md5算法快4倍左右,所以研究了下golang的crc32的解密。package mainimport ( "fmt" "hash/crc32")func main() { intValue :=getIntvalKey("Hello,World!") fmt.Print(intValue)}func getIntvalKey(strKe...原创 2020-03-14 11:17:42 · 1749 阅读 · 0 评论 -
字符串哈希算法——BKDRHash之golang实现
package mainimport "fmt"func main() { hashValue := BKDRHash("Hello,World!") fmt.Print(hashValue)}func BKDRHash(str string) uint64 { seed := uint64(131) // 31 131 1313 13131 131313 etc.. has...原创 2020-03-14 10:41:28 · 1683 阅读 · 1 评论 -
go字符串截取
当我在go语言编程过程中第一次碰到需要截取字符串的时候,首先想到的是 strings 包里面可能有相关方法~我还是太年轻了,这些年都被脚本语言惯坏了~好吧,只能自己搞了,思路也很清晰,把字符串转成字节数组,然后使用slice切片得到其中想要截取的一段,最后再通过 T() 强制类型转换还原成字符串,一开始比较简单:s := "abcdefg"s = string([]byte(s)[:3])...转载 2019-05-20 22:05:11 · 11019 阅读 · 4 评论 -
go struct{}的几种特殊用法
参考:https://blog.youkuaiyun.com/kturing/article/details/80557280转载 2019-05-15 10:27:32 · 2969 阅读 · 0 评论 -
golang下划线(underscore) 总结
一、概述“_” 可以简单理解为赋值但以后不再使用,在golang中使用的比较多,使用的场合也很多,稍作总结;二、场景1、import1 import _ "net/http/pprof"引入包,会调用包中的初始化函数,这种使用方式仅让导入的包做初始化,而不适用包中其他功能;2、用在返回值1 for _, v := range Slice {}2 _, err := func()...转载 2019-05-13 16:59:59 · 662 阅读 · 0 评论 -
Golang学习包之【io/ioutil】
概况Package ioutil 实现了一些 I/O 实用程序功能。索引// Discard 是一个 io.Writer 接口,调用它的 Write 方法将不做任何事情// 并且始终成功返回。var Discard io.Writer = devNull(0)//ReadAll 从 r 读取,直到出错或 EOF 并返回它读取的数据。//成功的调用返回 err == nil,而不是 ...转载 2019-04-12 16:13:03 · 3060 阅读 · 0 评论 -
go语言http请求(一)
我们在开发的过程中多多少少会要跟其他服务做交互,很多都是http请求,但是在go语言里面怎么样请求http请求,今天先讲比较初级的。示例如下:GETimport ( "fmt" "net/http" "io/ioutil")func main(){ response,err := http.Get("http://www.baidu.com") if(err!=nil){ ...原创 2019-04-12 15:52:29 · 4946 阅读 · 0 评论 -
golang之import导入包的一些特殊用法
我们学习了golang之后,晓得关键字import是go的包导入语法,而且我们的第一个程序通常都需要输出hello world。示例如下: import( "fmt" ) fmt.Println("hello world")我们看到golang需要输出内容,需要引入包fmt;相对于php就比较麻烦了。上面这种引入方式是比较常见的方式,但是我们通常...原创 2019-04-11 12:44:48 · 2078 阅读 · 0 评论 -
go学习之方法关联到类型func(f *file)method()int{}
很多人可能跟我一样疑惑,为什么go的方法关键字会跟上(f *file),而file是struct结构,我们来看下【Go语言高级编程】这本书是怎么样讲解的?方法方法一般是面向对象编程(OOP)的一个特性,在C++语言中方法对应一个类对象的成员函数,是关联到具体对象上的虚表中的。但是Go语言的方法却是关联到类型的,这样可以在编译阶段完成方法的静态绑定。面向对象编程更多的只是一种思想,下面我们实现...原创 2019-04-10 21:20:09 · 853 阅读 · 0 评论 -
go学习笔记之基础变量注意点
定义变量 vname1, vname2, vname3 := v1, v2, v3这种只能用在函数内部;在函数外部使用则会无法编译通过,所以一般用var方式来定义全局变量变量定义之下划线’_’ _, b := 34, 35_(下划线)是个特殊的变量名,任何赋予它的值都会被丢弃声明的变量未使用则报错Go对于已声明但未使用的变量会在编译阶段报错,比如下面...原创 2018-03-18 21:51:28 · 176 阅读 · 0 评论 -
go学习笔记之常量注意点
常量之字符串在Go中字符串是不可变的,例如下面的代码编译时会报错:cannot assign to s[0] var s string = “hello” s[0] = ‘c’但如果真的想要修改怎么办呢?下面的代码可以实现: s := “hello” c := []byte(s) // 将字符串 s 转换为 []byte 类型 c[0] = ‘c’ ...原创 2018-03-18 21:58:49 · 276 阅读 · 0 评论 -
Go程序设计的一些规则
Go之所以会那么简洁,是因为它有一些默认的行为: 大写字母开头的变量是可导出的,也就是其它包可以读取的,是公有变量;小写字母开头的就是不可导出的,是私有变量。 大写字母开头的函数也是一样,相当于class中的带public关键词的公有函数;小写字母开头的就是有private关键词的私有函数。...原创 2018-03-18 22:01:37 · 366 阅读 · 0 评论 -
[学习笔记之go] 基础篇
go重要概念Go程序是通过package来组织的package (在我们的例子中是package main)这一行告诉我们当前文件属于哪个包,而包名main则告诉我们它是一个可独立运行的包,它在编译后会产生可执行文件 每一个可独立运行的Go程序,必定包含一个package main,在这个main包中必定包含一个入口函数main,而这个函数既没有参数,也没有返回值。...原创 2018-06-15 15:59:09 · 259 阅读 · 0 评论 -
[go学习笔记] 内置函数new以及struct初始化有什么区别?
new() 含义介绍这是一个用来分配内存的内置函数,它的第一个参数是一个类型,不是一个值,它的返回值是一个指向新分配的 t 类型的零值的指针func new(t Type) *Type strut{} 含义介绍直接使用struct{} 来初始化strut时,返回的是一个struct类型的值,而不是指针两者是不一样的编写代码进行对比package mainim...原创 2018-07-09 17:21:25 · 4049 阅读 · 0 评论 -
【go学习笔记】interface妙用
空interface空interface(interface{})不包含任何的method,正因为如此,所有的类型都实现了空interface。空interface对于描述起不到任何的作用(因为它不包含任何的method),但是空interface在我们需要存储任意类型的数值的时候相当有用,因为它可以存储任意类型的数值。它有点类似于C语言的void*类型// 定义a为空接口var a i...原创 2018-07-09 17:42:37 · 1109 阅读 · 0 评论 -
【go学习笔记】理解Go语言的nil 【转】
最近在油管上面看了一个视频:Understanding nil,挺有意思,这篇文章就对视频做一个归纳总结,代码示例都是来自于视频。nil是什么相信写过Golang的程序员对下面一段代码是非常非常熟悉的了:if err != nil { // do something....}当出现不等于nil的时候,说明出现某些错误了,需要我们对这个错误进行一些处理,而如果等于n...转载 2018-07-11 18:20:52 · 12198 阅读 · 0 评论 -
【golang】性能分析工具Pprof
介绍Pprof是golang程序一个性能分析的工具,可以查看堆栈、cpu信息等pprof有2个包:net/http/pprof以及runtime/pprof二者的关系 net/http/pprof包只是使用runtime/pprof包来进行封装了一下,并在http端口上暴露出来。web 服务器假如你的go呈现是用http包启动的web服务器,当你想要查看web服务器的...原创 2018-07-18 11:09:22 · 309 阅读 · 0 评论 -
【golang】panic、defer以及recover 深入浅出
吐糟点Golang这么时尚的语言是没有类似try..catch 这种异常处理机制,而是使用 panic 和 recover处理异常. 其实相当于python的raise介绍golang的异常处理组合 panic,defer,recover,跟java中的try catch finially是类似的。 但是从语言的用户体验来说,不怎么好。 但考虑到golang的场景基本是系统高性能层...转载 2018-07-18 14:27:13 · 359 阅读 · 0 评论 -
【golang学习笔记】之单元测试
介绍编写单元测试规范 1、文件名:_test.go 结尾 2、函数名:Test 开头 3、入参:(t *testing.T) 4、内置库:testing 5、报错信息:使用 testing 内置的方法:Errorf、Error 、Fail、Failed、Fatal、Fatalf、Log、Logf 等执行单元命令执行命令:go test接下来...原创 2018-07-20 17:21:15 · 938 阅读 · 0 评论 -
【golang学习笔记】之实现工厂模式的思考
模式从业务场景中总结出来,然而并不是固定的。起因有一个多平台的抓取需求,必然要提炼一个方法,根据平台类型获取实例,每个实例有各自的实现。这是个典型工厂模式。经典OOP伪代码如下:class siteModel{ url string func factory(siteName, url string){ if siteName == "sit...转载 2018-07-20 22:57:58 · 387 阅读 · 0 评论 -
【golang学习笔记】单元测试之GoConvey
简介GoConvey类似于C/C++语言的测试框架GTest,是一款针对Golang的测试框架,可以管理和运行测试用例,同时提供了丰富的断言函数,并支持很多 Web 界面特性。Golang虽然自带了单元测试功能,并且在GoConvey框架诞生之前也出现了许多第三方测试框架,但没有一个测试框架像GoConvey一样能够让程序员如此简洁优雅的编写测试代码。安装在命令行输入命令:...转载 2018-07-23 12:47:38 · 1591 阅读 · 0 评论