
golang脱坑笔记
文章平均质量分 55
Altruiste
这个作者很懒,什么都没留下…
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
golang http输出json
文章目录golang http输出json数据使用postman调用后输出的结果golang http输出json数据通常,golang有两种方式输出http数据,一种使用io.Copy的方式,一种是调用responseWriter的write方法,看似是没有直接输出http的方式,但是在研究了Beego的输出之后,发现其实,只要对responseWriter设置header的,设置content-type为application-json,然后在输出数据,这时候客户端收到的就是json格式的数据了话原创 2020-06-06 21:23:44 · 2448 阅读 · 0 评论 -
记录sync.WaitGroup使用过程中的一个问题
问题代码如下,当注释掉consumer3中的语句时,会发生错误在使用sync.WaitGroup时,当把wait()方法放到消费者,也就是channel的接收端的时候,如果接收channel采用仅使用for v:=range c或者v,ok:=<-c时作为channel退出的条件,就会发生错误,原因尚未发现,先在此记录一下package mainimport ( "fm...原创 2019-08-28 20:09:15 · 326 阅读 · 0 评论 -
golang正则表达式提取email地址
package mainimport ( "fmt" "regexp")func main(){ //re:=regexp.MustCompile("ccmouse@gmail.com") texts:= []struct { text string }{ {"My email is ccmouse@gmail.com"}, {"ccmouse@gmail.com...原创 2019-08-28 22:15:37 · 2701 阅读 · 0 评论 -
golang等待多任务完成的方式----使用sync.WaitGroup
在并发过程中,往往需要用一种方式,来通知别的协程,自身任务已经完成,比如协程A发送10个消息后,告诉协程B,我已经发完了。对于go来说,想实现有三种方式主动等待一段时间,比如等个1s,1s后就默认已经发完(实际可能并没有完成) 利用无缓冲channel 利用sync.WaitGroup这里主要将第三种,涉及的方法如下var group sync.WaitGroup // 添加1...原创 2019-08-28 17:10:14 · 805 阅读 · 0 评论 -
golang学习之channel(一)
channel分为有缓冲和无缓冲channel1.有缓冲channel的遍历方式1.range方式,遍历完之后会推出循环package mainimport ( "fmt" "time")var c =make(chan int,10)func main(){ go func(){ for i:=0;i<10;i++{ c<-i // fm...原创 2019-08-28 16:39:05 · 232 阅读 · 0 评论 -
go channel笔记
在《go语言程序设计》中讲到,gochannel发送和接收数据有如下几种方式,channel<-value // 阻塞发送<-channel 接收并将其丢弃x:=<-channel //接收并将其保存x,ok :=channel // 功能同上,同时检查通道是否为空或者关闭这里具体说说第四种场景,在channel为空时,执行x,ok :=chan...原创 2019-08-26 16:10:41 · 419 阅读 · 0 评论 -
进程同步问题---golang模拟+打桩测试
通过设计俩函数,对全局变量自增和自减10000次来重现并发不加锁带来的问题,代码如下,Testpackage mainimport ( "fmt" "time")var i =1func Test()int{ go add() go dec() // sleep 1s,阻塞主协程保证俩协程有足够的执行时间 time.Sleep(1*time.Second) // 正常...原创 2019-07-31 17:00:15 · 1269 阅读 · 0 评论 -
golang生产者---2消费者模型
一开始卡了很久,之前玩过生产者---消费者模型,但是一对一的,遇到1对2的模型,就毫无头绪了,一开始写的造成了死锁或者死循环,甚至造成电脑死机,卡了一个小时,终于想明白了如何解决,说到底还是对channel机制不够了解,1个生产者,两个消费者,可以先定义如下比较简单的场景: 1.生产者生产完数据,比如10个int类型数据 2.生产完后再由消费者取出要想实现这个方案...原创 2019-07-27 23:22:05 · 360 阅读 · 0 评论 -
golang常见的几种加密方式及使用
一、加密类型概述加密通过是否可解密分为可逆加密和不可逆加密,而 可逆加密又分为两种,对称加密和非对称加密,解密需要密钥,如果解密密钥与加密密钥相同,则为对称加密,常见的AES,DES都属于对称加密,反之,如果解密密钥与加密密钥不同,则为非对称加密(公钥和私钥),常见的非对称加密有RSA不可逆加密有:MD5对称加密:AES,DES非对称加密:RSA二、各种加密方式的使用2.1.不可逆...原创 2020-02-18 17:41:29 · 2432 阅读 · 0 评论 -
好用的golang工具系列
Golang 程序员开发效率神器汇总!golang阅读约 10 分钟一. 开发工具1)sql2go用于将 sql 语句转换为 golang 的 struct. 使用 ddl 语句即可。例如对于创建表的语句: show create table xxx. 将输出的语句,直接粘贴进去就行。http://stming.cn/tool/sql2go....2)toml2go...转载 2020-01-20 11:28:50 · 2319 阅读 · 1 评论 -
golang根据域名获取ip
package mainimport ( "fmt" "net" "os")func main() { if len(os.Args) != 2 { fmt.Fprintf(os.Stderr, "Usage: %s hostname\n", os.Args[0]) fmt.Println("Usage: ", os.Args[0], "hostname") ...原创 2019-12-24 11:54:51 · 3527 阅读 · 0 评论 -
golang:JSON包在键和字符串值中转义了特殊的HTML字符
这是encoder包中的一段话// SetEscapeHTML specifies whether problematic HTML characters// should be escaped inside JSON quoted strings.// The default behavior is to escape &, <, and > to \u0026,...原创 2019-12-23 14:11:45 · 1714 阅读 · 0 评论 -
go mod使用
https://www.jianshu.com/p/1da8b06d7b10转载 2019-12-16 13:49:15 · 165 阅读 · 0 评论 -
golang slice往中部添加元素的三种方式
场景如下,有一个切片:a = []int{1,2,4,5,6},想在中部添加一个元素,使得a = []int{1,2,4,5,6},有三种方式1.创建临时切片var a = []int{1,2,4,5,6}var b= a[2:]b = append([]int{3},b[0:]...)a=append(a[0:2],b...)2.利用append支持链式操作的特性var...原创 2019-09-01 13:21:00 · 11510 阅读 · 0 评论 -
关于token的创建、存储以及认证
http请求是种无状态的请求,每一个http请求之前都没有关联,而在日常中,我们常常需要访问一些受限的页面,比如,登陆网易云之后,访问自己收藏的歌单,或者干别的事,每次都带了个http请求,之前说了http是无状态的,就是说服务器只有一次性的记忆,之前登陆成功,但你发起下一次请求时,服务器可不会记得你是否完成了认证,这时候就需要有一种机制,在每次访问时,告诉服务器,xxx已经完成了认...原创 2019-08-13 20:04:29 · 1648 阅读 · 0 评论 -
iris:golang安装包依赖问题
gopkg.in和golang.org下的包来自国外,无法直接下载,要想获得相应的包,只能github手动下载,放到gopath相应目录1.提示缺少gopkg.in/yaml.v2解决方案:gopath下建立对应目录,然后git clonehttps://github.com/go-yaml/yaml.git ,将yaml文件夹改为yaml.v22.golang.org开头的...原创 2019-08-06 21:05:34 · 1653 阅读 · 0 评论 -
go代码覆盖率测试、benchmark性能测试及pprof分析
代码覆盖率测试利用的是gotool工具,先准备两个文件:代码所在及测试文件,(文件在文章最后)一、代码覆盖率测试第一步:进入文件所在目录,输入命令:gotest,结果类似下面这样PASSok ~/nonrepeatingsubstr 0.314s第二步,生成c.out文件:go test -coverprofile=c.out,PASScoverage: 5...原创 2019-08-28 08:41:27 · 684 阅读 · 0 评论 -
govendor使用
https://blog.youkuaiyun.com/yeasy/article/details/65935864转载 2019-08-07 14:30:01 · 168 阅读 · 0 评论 -
go web 编程之cookie
首先先放出golang cookie的结构type Cookie struct { Name string Value string Path string // optional Domain string // optional Expires time.Time // optional RawExpires string /...原创 2019-08-20 14:03:09 · 250 阅读 · 0 评论 -
golang生产者消费者
文章目录golang实现生产者,消费者模型1.借助channel实现2.select+channelgolang实现生产者,消费者模型1.借助channel实现package mainimport( "fmt")func Producer(c chan int){ defer close(c) for i:=0;i<10;i++{ c<-i fmt.Pri...原创 2020-03-22 10:05:18 · 629 阅读 · 0 评论 -
golang使用http上传下载文件
package mainimport( "fmt" "io" "log" "net/http" "os" "strings")func get(w http.ResponseWriter,r *http.Request){ fmt.Println("dwadw") f,err:=os.Open(os.Getenv("STORAGE_ROOT")+"/objects/"+s...原创 2020-03-22 09:53:36 · 1459 阅读 · 0 评论 -
golang简单的http server与client
http serverpackage mainimport ( "encoding/json" "fmt" "io/ioutil" "net/http")type HttpData struct { Flag int `json:"flag"` Msg string `json:"msg"`}func HelloWorld(w http.ResponseWri...原创 2020-03-22 09:48:03 · 446 阅读 · 0 评论 -
记录一个命令行无法执行go tool的问题
在cmd下使用go tool遇到这个问题,意思是找不到这个路径,检查了下路径,这路径是对的,而且在goland 终端下里使用go tool是正常的go tool: no tool directory: open D:\system\go\bin\pkg\tool\windows_amd64: The system cannot find the path specified.网上百度了下...原创 2019-12-19 15:47:48 · 1354 阅读 · 0 评论 -
channel的读取方式
1.对于有缓冲的channel,一个一个读显得有些麻烦,可以采用range的方式ch := make(chan int, 3)ch <- 1ch <- 2ch <- 3for v := range ch { fmt.Println(v)}但上面这段代码有个问题,range并不会因为chanel为空而停止循环,因而发生了死锁,避免的方法有如下三种:...原创 2019-07-11 17:23:23 · 2567 阅读 · 0 评论 -
关于golang的channel死锁分析
死锁常见于有多个协程阻塞,而当主协程中如果有channel发生阻塞,则必然死锁,死锁的直接原因在于channel的读与写没有成对出现,只有读,或者只有写都会造成死锁,特殊情况除外,这个后面会提到。死锁的发生离不开阻塞,channel的阻塞分两种:1.对于无缓冲channel,因为其容量为0,数据只读不写,或者只写不读都会造成堵塞2.对于有缓冲channel,因为设置了容量,在chann...原创 2019-07-11 17:12:03 · 857 阅读 · 0 评论 -
golang脱坑笔记之channel死锁(一)
首先说下死锁发生的场景:从‘干涸’的channel读取数据会发生死锁干涸有两种场景(可能有遗漏,欢迎补充):1.channel被初始化,但未投入数据2.有缓冲的channel中已投入数据,并且被读取完毕后(未及时关闭channel)仍从chanel读取数据时package mainimport "fmt"var ch1 = make(chan int)var ch2 =m...原创 2019-07-11 10:30:52 · 366 阅读 · 0 评论 -
golang两种方式实现生产者—消费者模型
1.仅使用channelpackage mainimport( "fmt")func Producer(c chan int){ defer close(c) for i:=0;i<10;i++{ c<-i fmt.Println("producer:",i) }}func Costomer(c chan int){ hasProduct:=t...原创 2019-07-09 19:06:09 · 887 阅读 · 1 评论