go
文章平均质量分 89
飞翔码农
聊聊生活。聊聊PHP OPENRESTY GO
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
golang开发:goroutine在项目中的使用姿势
很多初级的Gopher在学习了goroutine之后,在项目中其实使用率不高,尤其一些跨语言过来的人,对并发编程理解不深入,可能很多人只知道go func(),或者掌控不够,谨慎一些,尽量少使用或者不使用,用的话就是go func(),主要列一下我们这边的主要使用方法。原创 2024-03-10 14:58:05 · 1067 阅读 · 0 评论 -
golang开发:go并发的建议(完)
上次说了一下Go语言布道师 Dave Cheney对Go并发的建议,个人觉得最重要的一条,这次主要想说一下这个。 Never start a goroutine without knowning when it will stop原创 2022-10-08 07:57:19 · 1113 阅读 · 0 评论 -
golang开发:go并发的建议
这个是前段时间看到Go语言的贡献者与布道师 Dave Cheney对Go并发的建议或者叫使用的陷阱(不是我自己的建议),结合自己最近几年对gorotine的使用,再回头看这几条建议,真的会茅塞顿开,觉得特别重要。这篇文章对并发的建议的章节地址https://dave.cheney.net/practical-go/presentations/qcon-china.html#_concurrencyDave CheneyDave Cheney 是 Go 编程语言的开源贡献者和项目成员。David 是.原创 2022-04-05 07:28:27 · 906 阅读 · 0 评论 -
golang开发:Error的使用
Error是Go语言开发中最基础也是最重要的部分,跟其他语言的try catch的作用基本一致,想想在PHP JAVA开发中,try catch 不会使用,或者使用不灵活,就无法感知到程序运行中出现了什么错误,是特别可怕的一件事。Error 基础Golang中 error类型就是一个最基本interface,定义了一个Error()的方法type error interface { Error() string}平常使用中errors.New("error")在Golang中这样定义.原创 2021-07-20 06:47:52 · 1902 阅读 · 1 评论 -
golang开发:http请求redirect的问题
这两天在开发项目的时候遇到了一个问题,请求了一个URL,它会302到另一个地址,本意上只是想检查这个URL是否会做3XX的redirect跳转,结果每次reqeust都会返回最后一跳的结果。后来就看了下源码,了解下请求跳转的机制实现代码看下实现的简单代码func main() { client := &http.Client{} url := "http://www.qq.com" reqest, err := http.NewRequest("GET", url, nil) if.原创 2020-10-27 07:40:40 · 7723 阅读 · 0 评论 -
golang开发:channel使用
channel主要是用于多个goroutine之间通信channel语法channel是引用类型,需要实用make来创建channel,如下make(chan Type, [buffer])chan Type 通道的类型buffer 是可选参数,代表通道缓冲区的大小(省略则代表无缓冲)向channel里面写入数据使用 <- 符号q := make(chan bool)q<-true从channel里面读取数据也是使用 <- 符号,只不过写入的channel在右边,读.原创 2020-09-26 19:38:11 · 1185 阅读 · 0 评论 -
golang开发:select多路选择
select 是 Golang 中的一个控制结构,语法上类似于switch 语句,只不过select是用于 goroutine 间通信的 ,每个 case 必须是一个通信操作,要么是发送要么是接收,select 会随机执行一个可运行的 case。如果没有 case 可运行,goroutine 将阻塞,直到有 case 可运行。select 多路选择select写法上跟switch case的写法基本一致,只不过golang的select是通信控制语句。select的执行必须有通信的发送或者接受,如果.原创 2020-09-26 08:16:03 · 1148 阅读 · 0 评论 -
golang开发:WaitGroup Mutex
CSP 是 Communicating Sequential Process 的简称,中文可以叫做通信顺序进程,是一种并发编程模型,最初于Tony Hoare的1977年的论文中被描述,影响了许多编程语言的设计。golang CSP模型golang语言并没有完全实现了CSP模型的所有理论,仅仅是借用了 process和channel这两个概念。process是在golang语言上的表现就是 goroutine, 是实际并发执行的实体,每个实体之间是通过channel通讯来实现数据共享。最经典的数据.原创 2020-09-15 07:21:26 · 958 阅读 · 0 评论 -
golang开发:环境篇(七) Go mod 使用
Glide用的好好的,为什么要使用Modules在 Go 1.11 中 ,官方加入package management tool,称为Go Modules。Go mod 没有出现之前,用的最多的包管理器就是 govendor、glide等,这些工具都未达到Go对包管理的预期,比如每次下载,比如墙外下载,比如对GOPATH的依赖,比如多版本的控制等等。然后Go Modules就出现了,它不依赖于G...原创 2020-04-15 22:42:04 · 1813 阅读 · 0 评论 -
golang开发:类库篇(五)go测试工具goconvey的使用
为什么要使用goconvey测试程序goconvey 集成go test,go test 无缝接入。管理运行测试用例,而且提供了丰富的函数断言、非常友好的WEB界面,直观的查看测试结果。如果没有goconvey的话,编写一个测试结果,首先运行被测试函数,然后判断被测试函数的运行结果,各种if判断,各种输出提示信息,而且回归测试也比较麻烦。但是如果使用了goconvey这些都就变得无比的简单。...原创 2019-09-17 07:16:42 · 1407 阅读 · 0 评论 -
golang开发:类库篇(四)配置文件解析器goconfig的使用
为什么要使用goconfig解析配置文件目前各语言框架对配置文件书写基本都差不多,基本都是首先配置一些基础变量,基本变量里面有环境的配置,然后通过环境变量去获取该环境下的变量。例如,生产环境跟测试环境使用同一份配置,但是相应的环境下的变量的值是不一样的,通过环境获其取对应的的key value。没明白没关系,举例子的时候就明白了。PHP的框架yaf。golang的框架beego。对配置的书写和...原创 2019-07-20 08:44:13 · 806 阅读 · 0 评论 -
golang开发:类库篇(一) Zap高性能日志类库的使用
为什么要用zap来写日志原来是写PHP的,一直用的error_log,第一次写Go项目的时候,还真不知道该怎么写日志,后来就按照PHP的写法自己不成规范的捣鼓写。去了新公司之后,发现用的是zap。后来查询了解了下zap,前同事反应他们很多大公司都在使用zap写日志,GitHub上star 高达7K多,足以说明它的广泛性稳定性,肯定最主要的是高效性。是Uber开源的高性能的日志库...原创 2019-06-30 04:57:12 · 3466 阅读 · 0 评论 -
golang开发:类库篇(三)命令行工具cli的使用
为什么要使用命令行觉得这个问题不应该列出来,又觉得如果初次进行WEB开发的话,可能会觉得所有的东西都可以使用API去做,会觉得命令行没有必要。其实,一个生产的项目命令行是绕不过去的。比如运营需要导出报表、统计下付费用户、服务不稳定修改下订单状态等等,再者,命令行的工具基本都是内部使用,调试日志可以随意点,退一万步来说,即使有问题了,还可以再次修改。不像API是是随机性的,有些业务发生错误和异常...原创 2019-07-14 18:53:44 · 958 阅读 · 0 评论 -
golang开发:(一)开发环境搭建vagrant+VirtualBox
开发环境介绍不管何种开发语言,目前用的比较多的开发环境基本就是Vagrant+VirtualBox搭建的虚拟开发环境,这种开发环境的好处就是一次搭建处处可用,各个平台和系统都可以使用。开发团队中,可以自己制作一个box,让团队的成员方便安装,保证每个人的开发环境都是一致的。Vagrant可以创建一些共享目录,让物理机和虚拟机使用共享的目录,虚拟机只提供开发环境。这样的话,开发环境随处可用。代码...原创 2019-06-08 23:01:49 · 519 阅读 · 0 评论 -
golang开发:(二)安装 Golang
当然了我们的安装都是在vagrant里面安装,vagrant ssh。不用虚拟机了,本机安装当然也可以。Mac 安装访问下载地址,下载 go1.12.5.darwin-amd64.pkg,双击下载文件,一路默认安装点击下一步,这个时候go已经安装到你的系统中,默认已经在PATH中增加了相应的~/go/bin,这个时候打开终端,输入goGo is a tool for managing G...原创 2019-06-08 23:03:24 · 188 阅读 · 0 评论 -
vagrant root 登录虚拟机
这个问题本来觉得是个特别简单的问题,昨天弄的时候折腾了半晚上。所以打算记录下过程,主要也被网上的各种信息误导了。1先看下我这vagrant配置信息Vagrant.configure("2") do |config| config.vm.box = "base" config.vm.box_check_update = false config.vm.network "forw...原创 2019-06-08 23:04:44 · 2944 阅读 · 0 评论 -
golang开发:环境篇(三)开发利器Goland安装与激活
这节主要介绍下golang开发的最主要的IDE,Goland。可以有效提高开发效率。用过一段时间 IntelliJ+GO插件,其实功能上跟goland差不多。不过团队的其它开发者基本都是Goland,后来为了统一各种格式和开发规范,也就换成了Goland。IDE的使用,功能基本都类似,哪个方便使用哪个。最好团队都使用一样的IDE。下载安装Goland下载地址:https://www.jet...原创 2019-06-09 07:59:56 · 2050 阅读 · 0 评论 -
golang开发:环境篇(四)包管理器 glide的使用
glide 是golang项目开发中是特别重要的软件,没有它,golang的项目可能都无法发布。为什么要使用glide平时我们开发Go项目的时候,使用第三方的包的时候都直接使用go get 去获取第三方的包,但是go get获取到的包是项目的develop分支,我们开发的时候倒是可以不怎么关注。但是如果到了生产环境,直接使用go get 是有很大风险的,因为,众所周知,develop是开...原创 2019-06-15 13:14:56 · 502 阅读 · 0 评论 -
golang开发:环境篇(五)实时加载工具gin的使用
gin 工具是golang开发中非常有用且有效的工具,有效的提高了开发调试go程序的效率。为什么要使用gin我们知道golang是编译型语言,这就表示go程序的每次改动,如果需要查看改动结果都必须重新编译一次,即go build .像我们从事go web的开发,可能是从其他解释型语言跨过来的,就特别的不适应这种调试开发,改完代码需要编译go build。然后,gin的出现就为了解决这种需...原创 2019-06-19 21:56:25 · 1345 阅读 · 0 评论 -
golang开发:环境篇(六) Go运行监控Supervisord的使用
为什么要使用Supervisord17年第一次写Go项目的时候,用Go开发项目倒没没费多大劲,很快就开发完成了。到了在测试环境部署的时候,由于不知道有 Supervisord 这个软件,着实花了些功夫。总不能跟开发环境一样,直接执行编译生成的二进制文件吧,即使 后台执行了,万一它挂了,没人知道,即使测试人员发现了,开发还得登录到服务器再次启动下这个二进制文件。很明显这个解决方案没有任何意义,后来...原创 2019-06-22 08:53:40 · 982 阅读 · 0 评论 -
golang开发:类库篇(二) Redis连接池的使用
为什么要使用连接池一个数据库服务器只拥有有限的连接资源,一旦所有的连接资源都在使用,那么其它需要连接的资源就只能等待释放连接资源。所以,在连接资源有限的情况下,提高单位时间的连接的使用效率,缩短连接时间,就能显著缩短请求时间。所以就有了连接池的概念,在初始化时,创建一定数量的连接,先把所有连接存起来,然后,谁需要使用,从这里取走,干完活立马放回来。 如果请求数超出连接池容量,那么就排队等待、退...原创 2019-07-09 07:07:28 · 717 阅读 · 0 评论 -
golang高并发的理解
前言GO语言在WEB开发领域中的使用越来越广泛,Hired 发布的《2019 软件工程师状态》报告中指出,具有 Go 经验的候选人是迄今为止最具吸引力的。平均每位求职者会收到9 份面试邀请。想学习go,最基础的就要理解go是怎么做到高并发的。那么什么是高并发?高并发(High Concurrency)是互联网分布式系统架构设计中必须考虑的因素之一,它通常是指,通过设计保证系统能够同时并行处...原创 2019-03-10 07:17:58 · 4774 阅读 · 0 评论
分享