Goroutine + Channel 实践

背景 在最近开发的项目中,后端需要编写许多提供HTTP接口的API,另外技术选型相对宽松,因此选择Golang + Beego框架进行开发。之所以选择Golang,主要是考虑到开发的模块,都需要接受瞬时大并发、请求需要经历多个步骤、处理时间较长、无法同步立即返回结果的场景,Golang的goroutine以及channel所提供的语言层级的特性,正好可以满足这方面的需要。 goroutine不同于thread,threads是操作系统中的对于一个独立运行实例的描述,不同操作系统,对于thread...阅读全文

阅读:38482 评论:5

Golang编程经验总结

如何选择web框架: 首先Golang语言开发web项目不一定非要框架,本身已经提供了Web开发需要的一切必要技术。当然如果想要ruby里面Rail那种高层次全栈式的MVC框架, Golang里面暂时没有,但是不是所有人都喜欢这种复杂的框架。Golang里面一些应用层面的技术需要自己去组装,比如session,cache, log等等. 可选择的web框架有martini, goji等,都是轻量级的。 Golang的web项目中的keepalive 关于keepalive, 是比较复杂的, 注意...阅读全文

阅读:2639 评论:1

go 速学 - 13 - Interface

目录 interface 概念 定义接口 实现接口 作为参数的接口 接口类型转换 嵌入接口 空接口 nil 接口 摘要 定义接口,实现接口,使用接口,作为参数的接口,if 和 switch 中的接口,类型转换,嵌入接口,空接口 interface 概念 只要某个类型拥有该接口的所有方法签名,即算实现该接口,无需显式声明实现哪个接口 接口只有方法声明,无实现,无字段 当接口存储的类型和对象都为 nil 时,接口才为 nil 接口调用不会做 receiver 的自动转换,即指针只能传指针 空接口可以...阅读全文

阅读:2039 评论:0

Go连接MySql数据库too many connections错误解决

这几天用Go写了个简陋的服务器,连接Mysql数据库,提供api给其他程序调用来实现增删改产等服务。Go的版本是1.2,使用的驱动是go-sql-driver/mysql。但是在有一定量的查询结果以后,会出先too many connection的错误。 google了一下,很多文章都建议修改MySql的配置文件:my.ini。文章是这样解释的:MySql的默认连接数是100,当查询数过多时,就会出现这个错误。所以把配置修改: max_connections=1000 这个字段后面的数字就是My...阅读全文

阅读:9473 评论:3

Go中优雅的HTTP服务关闭

虽然写出7x24小时不间断运行的服务是一件很酷的事情,但是我们仍然在某些时候,譬如服务升级,配置更新等,得考虑如何优雅的结束这个服务。 当然,最暴力的做法直接就是kill -9,但这样直接导致的后果就是可能干掉了很多运行到一半的任务,最终导致数据不一致,这个苦果只有遇到过的人才能深深地体会,数据的修复真的挺蛋疼,有时候还得给用户赔钱啦。 所以,通常我们都是给服务发送一个信号,SIGTERM也行,SIGINTERRUPT也成,反正要让服务知道该结束了。而服务收到结束信号之后,首先会拒绝掉所有外部新...阅读全文

2015.01.25 21:04 siddontang
阅读:17531 评论:0

Go语言中隐式接口的冲突问题

Go语言中隐式接口的冲突问题 Go语言中采用的是隐式接口, 只要满足的接口的定义, 就可以当作接口使用. 比如内置的 error 接口: type error struct { Error() string } 隐式接口的好处有很多. 但我个人觉得最主要的一点就是不需要再去画祖宗八代的继承关系图了(松耦合). 但是隐式接口会带来冲突问题. 简单来说, 我也想定义一个自己的 MyError 接口, 里面也有一个 Error() string 方法: type MyError struct { Er...阅读全文

2015-05-19 13:32 chai2010
阅读:4328 评论:0

Mac下golang开发环境配置

go语言在开发效率和运行效率中的优势让很多人青睐,所以有倾向打算转向go语言的开发。 下面介绍在Mac OS X中golang的开发环境配置。 1.安装brew brew是一个mac下的由ruby开发的包管理系统,其官网是http://brew.sh。你只要在你的终端中执行 ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)” 便可将其安装完成。 安装完之后输入命令 br...阅读全文

2015-05-19 23:34 jacklandrin
阅读:38789 评论:0

Go并发编程基础(译)

原文:Fundamentals of concurrent programming 译者:youngsterxyf 本文是一篇并发编程方面的入门文章,以Go语言编写示例代码,内容涵盖: 运行期并发线程(goroutines) 基本的同步技术(管道和锁) Go语言中基本的并发模式 死锁和数据竞争 并行计算 在开始阅读本文之前,你应该知道如何编写简单的Go程序。如果你熟悉的是C/C++、Java或Python之类的语言,那么 Go语言之旅 能提供所有必要的背景知识。也许你还有兴趣读一读 为C++程序...阅读全文

阅读:4790 评论:1

如何从源代码构建 Go 1.5 开发环境

请注意,本文正文含有大量链接。如果是转载或者使用某些不支持超链接的阅读器,就请自行脑补吧。 近期,Go Team 连续放出了几个大招来介绍即将在八月问世的 Go 1.5 这个划时代的版本。Rob 和 Andrew 分别在《Go in Go》和《The State of Go》中详细说明了出现在 Go 1.5 中的重要特性和细节变化。在这个版本中最主要的变化是移除了所有 C 代码,不论是 runtime 还是编译器都使用 Go 语言和一小部分的汇编来实现——也就是人们常说的自举。但是这样做也就意味...阅读全文

阅读:14620 评论:1

Google 镜像站搜集

Google 镜像站搜集 Techzero • 2015-01-31 • 搜集整理 • 394,843 次阅读 • 166 条评论 在特殊的地方和特殊的时间,流畅顺利的打开一个网站也变得如此艰难。 2015.9.4 更新。 以下是直接使用谷歌的方法,如需科学上网请加入交流群53767380,本站交流群为336220319。 本文将不定期维护更新,删除不能用的,增加新的可用网址。欢迎 Ctrl+D 收藏。列表中有些打不开可能是 DNS污染 的原因,可以参考 DNS劫持 DNS污染 介绍 与 公共D...阅读全文

2015-09-06 01:51 Jr小王子
阅读:30119 评论:2

Google 镜像站IP地址

非原版: Glgoo:http://www.glgoo.com/ 九尾搜索:http://www.jwss.com/ 谷粉搜搜:http://www.gfsswy.com/ 谷粉搜搜:http://gufensoso.com/ 谷粉恰搜:http://www.qiasou.com/ 蝴蝶:http://www.xiexingwen.com/ 一哥搜:http://www.egeso.com/ 谷歌搜:http://www.gugesou.com/ 谷壳:http://www.googke.me/...阅读全文

2015-09-08 08:40 Jr小王子
阅读:14336 评论:0

Go语法简略 - 依赖注入

通过对web应用框架背后原理的探索,引入了依赖注入的概念。如果你需要读懂或者写一个框架的话,依赖注入的思想绝对能帮到你。本文记录对依赖注入的探索。 区分依赖和宿主 现在我们把问题简化一下: package main import "fmt" func MethodA(name string, f func(a int, b string)) { fmt.Println("Enter MethodA:", name) f(3030, "zdd") // 给f注入参数 fmt.Println("Ex...阅读全文

阅读:9451 评论:2

Go语言错误处理

近期闲暇用Go写一个lib,其中涉及到error处理的地方让我琢磨了许久。关于Go错误处理的资料和视频已有许多,Go authors们也在官方Articles和Blog上多次提到过一些Go error handling方面的一些tips和best practice,这里仅仅算是做个收集和小结,尽视野所及,如有不足,欢迎评论中补充。(10月因各种原因,没有耕博,月末来一发,希望未为晚矣 ^_^) 一、概述 Go是一门simple language,常拿出来鼓吹的就是作为gopher习以为傲的仅仅2...阅读全文

十月 30, 2015 bigwhite
阅读:12260 评论:0

Go语言TCP Socket编程

Golang的主要 设计目标之一就是面向大规模后端服务程序,网络通信这块是服务端 程序必不可少也是至关重要的一部分。在日常应用中,我们也可以看到Go中的net以及其subdirectories下的包均是“高频+刚需”,而TCP socket则是网络编程的主流,即便您没有直接使用到net中有关TCP Socket方面的接口,但net/http总是用到了吧,http底层依旧是用tcp socket实现的。 网络编程方面,我们最常用的就是tcp socket编程了,在posix标准出来后,socket...阅读全文

十一月 17, 2015 bigwhite
阅读:29947 评论:4

我煞笔的被 bufio.Reader 小坑

最近在用 Go 做一个小型的 gateway 服务。PHP 请求 Go 的 tcp server,然后 Go 根据命令参数开启多个 goroutine 去调度 php-fpm 执行不同的脚本并组合结果返回。 想来只是利用 goroutine 的便利并发执行逻辑,如此简单直接。 不过在测试的时候 PHP 发送 socket 的 json 数据发生了明确的截断,后来发现是我煞笔的被 bufio.Reader 坑了,真是无言以对。 问题重现 因为是长连接,PHP 每次发一段 json ,都会加上换行符...阅读全文

2015-12-09 14:50:06 傅小黑
阅读:11479 评论:5

优秀的 Go 存储开源项目和库

可以看到,今年谷歌家的 Go 编程语言流行度有着惊人的上升趋势,其发展也是越来越好,因此本文整理了一些优秀的 Go 存储相关开源项目和库,一起分享,一起学习。 存储服务器(Storage Server) Go 实现的存储服务器 minio - Minio 是一个与 Amazon S3 APIs 兼容的开源对象存储服务器,分布式存储方案 rclone - “用于云存储的 Rsync” - Google Drive, Amazon Drive, S3, Dropbox, Backblaze B2, ...阅读全文

2017-02-14 19:00:08 编辑部的故事
阅读:17236 评论:2

go1.12下Go mod使用实践

Go Module是Go会在1.12中正式推出的包管理机制。 Go mod 简介 Golang一直存在一个被人诟病的问题是缺少一个官方的包依赖管理工具。从我个人的角度上来看存在两个问题: GOPATH特性对于多工程的情况下,支持不算友好。 GOPATH无法对依赖包进行有效的版本管理,没有任何地方能够表明依赖包的具体版本号,无法简单清晰获取到有效的依赖包版本信息等。 在Go1.11时,官方推出了go mod作为官方的依赖管理工具。而go mod与之前的利用vendor特性的依赖管理工具的不同点在于...阅读全文

2019.06.18 08:33 会飞的鲶鱼
阅读:4078 评论:2

go module 使用教程

如果你还在使用 GOPATH 模式来开发Golang程序,那么你可以参考本文来告别 GOPATH,并带给你一个方便的包管理工具。 关于 go mod 的说明和简单使用,可以参考: 1、Go1.1.1新功能module的介绍及使用请添加链接描述 2、Introduction to Go Modules请添加链接描述 3、Go 1.11 Modules 官方说明文档请添加链接描述 go Modules—Modules是Go 1.11中新增的实验性功能,是一种新型的包管理工具。具体操作:首先要把go升...阅读全文

2020-03-17 12:23:48 chymingyan
阅读:9352 评论:0