![](https://img-blog.csdnimg.cn/20200309132645760.jpg?x-oss-process=image/resize,m_fixed,h_224,w_224)
Go
Go
优惠券已抵扣
余额抵扣
还需支付
¥9.90
¥99.00
购买须知?
本专栏为图文内容,最终完结不会低于15篇文章。
订阅专栏,享有专栏所有文章阅读权限。
本专栏为虚拟商品,基于网络商品和虚拟商品的性质和特征,专栏一经购买无正当理由不予退款,不支持升级,敬请谅解。
醒不了的星期八
种一棵树最好的时间是十年前,其次就是现在
展开
-
Go: 协程的生命周期管理
协程的生命周期:1. 定义:协程的创建等全部生命历程的管理。通俗的讲就是“保姆”。它的作用是便于协程的回收利用。goroutine申请的代价很小,但是在go程序中,goroutine的总量是有上限,超过上限,多余出来的协程就得等到前面的协程完成任务后能开始运行。所以适时的进行回收。2. 生命周期分类:协程创建 协程回收: 由Go语言的GC和垃圾回收机制控制的 协程中断: 通过context包实现3. 如何实现:context实现中断package main.原创 2020-06-02 16:51:26 · 2067 阅读 · 0 评论 -
阿里云OSS跨域
如果不考虑CDN回流的话。对于跨域,需要请求协议、域名、端口3者有1个不同,即是跨域。那么怎么解决跨域,原始方法是JSONP,那个时代技术有限,现在都是Cors技术。现在,前端发给后端,后端例如golang可以如下配置:当然,具体用法见官方文档。然后就是vue开发阶段,我的访问url是localhost:3000.前端直传oss,为了分布式考虑,跨域访问了。...原创 2020-04-12 15:30:33 · 1681 阅读 · 0 评论 -
RabbitMQ: centos7安装指南
以后会写篇SpringBoot整合消息服务、SpringBoot的邮件发送、定时任务、批处理、Swagger2、数据校验RabbitmMQ服务器安装:1.安装erlang:(这时一个很古老 的编程语言)wget http://www.rabbitmq.com/releases/erlang/erlang-19.0.4-1.el7.centos.x86_64.rp2....原创 2020-03-20 11:57:25 · 280 阅读 · 0 评论 -
Go: 短地址服务
短地址:将长地址缩短到缩短到一个很短的地址,用户访问这个短地址可以重定向到原本的长地址。设计HTTP Router和Handler 在HTT处理流程中加入Middleware 利用Go的interface实现可扩展的设计 利用Redis的自增长序列生成短地址API接口:POST /api/shorten 把长地址转换为一个短地址 GET /api/info?shortlink...原创 2020-05-06 15:41:29 · 564 阅读 · 0 评论 -
Gin: 优雅的关停服务器
对比区别:1. 原始的关停服务器:2.优雅关闭服务器:ListenAndServe是不阻塞的。监听关闭信号,如果获取到信号就把这个超时的上下文传入server的shutdown()里面,然后才正式退出,监听到信号到真正结束之前我们会首先会关闭这个时间段内重新进入的连接请求,且在超时时间内把之前已经接收到的请求执行完毕。但是kill -9是捕获不到的,有关资料可查看我的...原创 2020-03-17 13:36:42 · 2279 阅读 · 0 评论 -
Go: 从文件中读取配置
用到的包:"github.com/spf13/viper"步骤:1.新建一个yml文件:假如这里配置服务器端口和数据库的配置。类似于springboot的application.yml2. 编写初始化配置函数:并在main()中调用:3. 在实际要从文件中读取配置的地方编写相应的代码:用起来是真香~~...原创 2020-03-04 22:30:29 · 563 阅读 · 0 评论 -
go: jwt配合中间件实现用户认证
实现的效果如下:通过后台下发token实现用户认证:AuthMiddleware.go:package middlewareimport ( "ginEssential/common" "ginEssential/model" "github.com/gin-gonic/gin" "net/http" "strings")/**gin的中间件就是...原创 2020-03-04 21:51:49 · 1186 阅读 · 0 评论 -
gorm的parseTime=true报错 Error 1292: Incorrect datetime value: '0000-00-00' for column 'created_at' at
我的mysql是8.x版本,mysql以前 datetime 的默认值可以设为 '0000-00-00 00:00:00', 新的mysql不能设为这个值,可以把默认值设置为正常的时间就可以了, 比如 '2020-03-0400:00:00'或者去掉sql_model 中的NO_ZERO_DATE配置即可方式详解:【主要演示常用的方式2】方式1:使用se...原创 2020-03-04 20:14:20 · 5650 阅读 · 2 评论 -
GO: 指针数组、数组指针、JSON的序列化和反序列化
指针数组、数组指针:指针数组是一个数组每一个元素都是指针。数组指针是一个指向数组的指针。JSON的序列化和反序列化【encoding/json包】1. 序列化:结构体的序列化 Map的序列化2. 反序列化:反序列化为结构体 反序列化为Map3. Tag标签:[序列化的过程中把它作为json的key来使用]new 和make的区别:...原创 2020-02-17 20:31:33 · 1679 阅读 · 0 评论 -
go:部署阿里云总结
存在以下几个坑:对于原生Go Web需要考虑静态资源的问题,比如模板html 部署到阿里云需要考虑交叉编译和权限Permission 本次尝试还是未能执行build后的.exe文件,而是采取了nohup go run *.go&1.模板静态资源无法打包,所以这里采用本办法把工程全部拷贝到了阿里云ECS,并在Centos上搭建了Go运行环境【这里没有使用Docker】2.li...原创 2020-02-17 01:05:59 · 1303 阅读 · 0 评论 -
Go: 包加载
涉及到Go程序的启动/加载过程。执行main.main()之前,Go引导程序会先对整个程序的包进行初始化。整个执行流程大致为:Go包的初始化特点:包初始化程序从main()引用的包开始,逐级查找包的引用,直到找到没有引用其他包的包,最终生成一个包引用的有向无环图。 Go编译器会将有向无环图转换为一颗树,然后从树的叶子节点开始逐层向上对包进行初始化。 单个包的初始化流程如...原创 2020-02-11 10:21:56 · 865 阅读 · 0 评论 -
Go: Gopher解决windows安装Mysql和Redis难题
安装phpstudy:https://www.xp.cn/然后重启软件:点击管理:创建数据库:然后新建go项目,配置相关的mysql和redis就行了。redis管理:原创 2020-01-15 21:56:31 · 252 阅读 · 0 评论 -
Go: Go Module和Go Proxy解决安装难题
Go从1.11后带来的官方的管理依赖(引用的库)的一个工具:https://github.com/golang/go/wiki/Modules (读完文档)以github上的一个项目为例:最开始官方的方法,我们可能会然后在src文件夹下通过go get或gopm拉取项目。但是一跑就会报什么not-standard import 'xxxxx' in standard packag...原创 2020-01-15 21:33:26 · 745 阅读 · 0 评论 -
Go: 轻量级web框架三部曲(3) 之gin
简单 并发高 分配内存少1.下载框架:gopm get -g -v github.com/gin-gonic/gin2.Hello World:3.请求路由:多种请求类型 绑定静态文件夹(把gin当作静态服务器使用) 参数作为url(RESTFul请求中) 泛绑定(类似nginx的前缀匹配)3.1多种请求类型3.2绑定静态文件夹(把gin...原创 2019-11-24 16:35:38 · 720 阅读 · 0 评论 -
Go: 正则匹配示例
golang是一个非常不错的瑞士军刀。完美的提示,可以让我们编写代码时就判断。在go语言中,针对匹配规则,如果使用"",在里面匹配.这个字符应该用\转义,但是又会被Go语言识别。所以用\\或者使用` ` 来匹配,里面的转移就可以直接用\上述代码是一个简单的匹配电子邮件的正则,语法和其他语言相同...原创 2019-11-15 19:51:28 · 2635 阅读 · 0 评论 -
Go: Beego框架快速入门
beego安装:https://github.com/astaxie/beegohttps://beego.me/beego的安装 bee工具安装bee工具介绍:工具包beego项目创建(为了协助快速开发beego项目而创建的项目) 热编译 开发测试 部署测试是否i成功:go bee versionBeego框架:特点:快速...原创 2019-10-25 21:25:44 · 574 阅读 · 0 评论 -
Go: WebSocket实现消息推送
拉模式和推模式的区别:拉模式的实现原理是客户端定时轮询服务端的接口,获取最新的数据。但是数据更新频率低,则大多数请求是无效的。且在线用户数量多,则服务端的查询负载很高。其定时轮询拉取,无法满足时效性的要求。推模式:仅仅在数据更新时才需要推送。需要维护大量的在线长连接。数据更新后可以立即推送。WebSocket协议与交互:通讯流程:传输原理:协议升级后,继续复...原创 2019-10-22 22:48:19 · 1662 阅读 · 0 评论 -
Go: 并发与并行
并发与并行的区别:并发:指同一时刻,系统通过调度,来回切换交替的运行多个任务,“看起来”是同时进行并行:指同一时刻,2个任务“真正的”同时进行例如多线程就是“看起来的”并发。并发:单核CPU,逻辑上同时执行。并行:多核CPU,物理机上的同时执行。常见的并发模型:进程&线程(Apache) 异步非阻塞(Nginx, Libevent,NodeJS) ...原创 2019-10-22 20:14:49 · 289 阅读 · 0 评论 -
Go: 简单的实现一个区块链模型
区块链:一种特殊的分布式数据库。【节点与连接】没有中心、无管理员 全民记账【不是记数据】:账本在每个区块链节点都有一份,每个节点都可以在遵循区块链协议的前提下往这个账本写入数据。 只能增查、不能改删区块链的分类:公有链 : 比特币 以太坊 EOS 私有...原创 2019-10-22 16:46:54 · 752 阅读 · 0 评论 -
Go: http标准库入门
Go语言作为一门面向服务的交互网络并发的通用语言。对HTTP的封装是比较好的。一些知名的包:Gin、Beego等使用http客户端发送请求 使用http.Client控制请求头部 使用httputil简化工作1.使用httputil简化工作:package mainimport ( "fmt" "net/http" "net/http/httputil")func ...原创 2019-10-20 09:51:01 · 450 阅读 · 0 评论 -
Go:协程和协程之间的双向通道——channel(4)
除了CSP模型,Go语言还有传统的同步机制(通过共享内存进行通信)WaitGroup Mutex Cond互斥量Mutex的使用:数据访问的冲突一时间难以重现。意思是fmt.println(a)读和*a++写冲突了。有可能另外一个人在写的时候我在读。然后,我们试着去加一个锁:有点像java原生的Lock发现就没有data race了:以上代码就实现...原创 2019-10-19 21:35:31 · 323 阅读 · 1 评论 -
Go:协程和协程之间的双向通道——channel(3)
2个channel谁来的快,我收谁.使用Select来进行调度:【在select中可以使用Nil Channel】实现了非阻塞式获取.【外面套for就又是以前的套路了】package mainimport ( "fmt" "math/rand" "time")func generator() chan int { out := make(chan int)...原创 2019-10-19 20:57:00 · 402 阅读 · 0 评论 -
Go:协程和协程之间的双向通道——channel(1)
对应于kotlin,也是有通道的概念的。Go中,channel,我们可以把它想象成一个水管,里面存放的数据可以是int型的数据等。然后2端相互通过这个水管进行数据的传输。channel也是一等公民,也能作为函数的参数和函数的返回值。Go语言的并发是基于CSP(Communication Sequential Process)模型做出来的。channel的语法:其中的v...原创 2019-10-19 19:36:27 · 1045 阅读 · 0 评论 -
Go并发编程学习:Goroutine初体验(2)
之前说过,协程Coroutine除了轻量级“线程” 的含义,还有一层概念:子程序是协程的一个特例。main()调用一个xxx()函数:线程中:xxx()做完了以后才会把控制权交还给main()函数,main()函数继续执行。 【main()---->xxxx()】 协程中:数据和控制权双向的流通【main() <----> xxxx()】,main()和xxx()...原创 2019-10-19 16:43:45 · 186 阅读 · 0 评论 -
Go并发编程学习:Goroutine初体验(1)
Go对并发编程有原生的支持.对于下图的代码可以看到在不断的打印且没停下:改为使用Goroutine后,就不像上面的那种说是调用函数,而是并发的去执行的这个函数,主程序还在往下跑,然后并发的去开了一个函数,开出来的函数里面不断的打印:相当于开了一个线程,但go中开的是协程(kotlin、python等的协程不完全相同)运行后,类比kotlin中的协程,出...原创 2019-10-19 16:14:58 · 199 阅读 · 0 评论 -
Go: 生成文档和示例代码
简单用法:比如有如下代码:对比上面的图就知道这些基本命令的作用了。也可以查看更多用法: go help doc比如查看最常见的fmt.Println:还有个比较重要的是godoc工具:https://godoc.org/golang.org/x/tools/cmd/godoc如果你出现下图的情况,说明新版的golang已经不自带godoc这个插...原创 2019-10-19 14:16:43 · 465 阅读 · 0 评论 -
Go测试与性能调优: 使用pprof进行性能调优的时候遇到的问题[Windows]
go test -bench . -cpuprofile cpu.outgo tool pprof cpu.out提示用不了,需要安装Graphviz工具.1.进入官网:http://www.graphviz.org/下载后2.配置环境变量:找到解压后的安装路径下的bin路径。然后拷贝该路径。添加到PATH中:3.解压后使用:...原创 2019-10-19 13:55:14 · 486 阅读 · 0 评论 -
Go: go get 获取第三方库【国内gopm】
因为网络问题,常常拉不下来(github上的一般能拿下来),所以用国内的一个工具来获取第三方库.gopm:https://gopm.io/1. 拿 github上的包:(前提是安装git)go get -u github.com/gpmgo/gopm稍微等一会儿,然后就可以看到它为我做了几件事:在GOPATH下生成了E:\GoProjects\src\gi...原创 2019-10-17 13:54:52 · 4308 阅读 · 1 评论 -
Go:如何扩充系统类型或者别人的类型
一般是用Java的继承,但是不灵活。Go舍弃了继承。那么,Go是如何扩充系统类型或者别人的类型的呢?定义别名 使用组合1.组合的方式假设别人的包:别人的包没有自己想要的功能,那么就自己扩展一下:2.别名的方式:...原创 2019-10-17 12:25:50 · 360 阅读 · 0 评论 -
GO配置环境变量(Windows)及正确import包
正确配置环境变量!!!需要配置的环境变量:环境变量 说明 GOROOT 指定SDK的安装路径 Path 添加SDK/bin目录 GOPATH 工作目录(GO项目的工作路径) 图形化的安装可以看到自动为我们配置了一些环境变量:步骤1:GOROOT根据GO SDK的安装路径。【有的就跳过设置】步骤2: Path(有的...原创 2019-10-16 20:26:25 · 883 阅读 · 0 评论 -
Go: 值传递 与引用传递
c/c++可以值传递和引用传递python,java等绝大部分类型是引用传递,除了一些系统的内建参数类型。值传递:是拷贝一份,然后传递过去。随便你怎么改引用传递:拷贝地址,同时指向一个地址的内容。例如最简单的写一个交换2个变量的值发现并没有达到预期的效果。用go的指针:还有一个做法:...原创 2019-10-04 13:29:30 · 718 阅读 · 1 评论