Go语言中文网 为您找到相关结果 242

[Golang]Map的一个绝妙特性

补充说明:一些评论的人对本文中的一些内容感到很困惑,但是我不想让大家感到我言语不清,所以在此澄清一下:是的, 默认情况下,向一个hash表插入的元素是没有固定顺序的。但是因为很多原因,比如有一些帖子就指出了不是所有的map都是hash表(而且有些语言还有有顺序的hash表,比如java的TreeMap), 我还是能够了解为什么很多人(尤其是对Go map实现机制比较了解的人)会假定遍历map元素的顺序和向map插入元素的顺序是相同的。我原来的例子是我自己想出来的,并没有演示出大多数版本的Go关于这方面的特点(尽管我听说对于1.3版本可能是可以工作的)。所以我把代码更新了一下,你可以把代码复制到你的编辑器或者Go Playground来看看效果。Go确实是从随机偏移位置来开始map的元素遍历...阅读全文

博文 2015-03-06 12:00:01 abv123456789

ubuntu下最新版golang安装教程

相信打算安装golang的同学们早已看了很多安装教程了,网上的主流方法有两种,一种是 sudo apt-get install golang-go 简单暴力,但是由于现在很多golang的库已经要求 >1.1 ,而 apt-get 安装的是 1.02 ,也建议大家安装最新版的golang,因此推荐手动安装,教程本身没有问题,但是由于某些特殊原因,可能导致安装失败甚至卡在莫名奇妙的地方。在卡了一个中午后,我还是写下这篇文章总结下要注意的地方。 以ubuntu wiki的 安装教程 为例: 安装gcc工具,因为golang有些功能是使用c写的,所以构建golang的编译是必须的 $ sudo apt-get insta...阅读全文

博文 2014-10-06 07:32:32 stonxer

使用 Go 语言实现优雅的服务器重启

Go被设计为一种后台语言,它通常也被用于后端程序中。服务端程序是GO语言最常见的软件产品。在这我要解决的问题是:如何干净利落地升级正在运行的服务端程序。 目标: 不关闭现有连接:例如我们不希望关掉已部署的运行中的程序。但又想不受限制地随时升级服务。 socket连接要随时响应用户请求:任何时刻socket的关闭可能使用户返回'连接被拒绝'的消息,而这是不可取的。 新的进程要能够启动并替换掉旧的。 pseudo翻译于 3周前 2人顶 顶 翻译的不错哦! 原理 在基于Unix的操作系统中,signal(信号)是与长时间运行的进程交互的常用方法. SIGTERM: 优雅地停止进程 SIGHUP: 重启/重新加载进程 (例如: nginx, sshd, apache) 如果收到SIGHUP信号,优雅...阅读全文

博文 2014-12-20 09:00:00 pseudo, Garfielt, Ley

go语言为什么没有min/max(int, int)函数

golang为什么没有min/max(int, int)函数 我们知道go语言math包里面定义了min/max函数,但是是float64类型的,而并没有整数类型的min/max。 go语言的math包里面定义的min/max函数如下: math.Min(float64, float64) float64 math.Max(float64, float64) float64 事实上我们更经常要比较的是两个整数的场景: math.Min/Max(int, int), or math.Min/Max(int64, int64) 那么,为什么go语言不提供整数类型的min/max这两个函数呢? 下面的这篇文章给了一个解释: https://mrekucci.blogspot.jp/2015/07/...阅读全文

博文 2017-10-31 09:04:44 CodeGeek

如何优雅地关闭Go channel

本文译自:How To Close Channels in Golang Elegantly。几天前,我写了一篇文章来说明golang中channel的使用规范。在reddit和HN,那篇文章收到了很多赞同,但是我也收到了下面几个关于Go channel设计和规范的批评: 在不能更改channel状态的情况下,没有简单普遍的方式来检查channel是否已经关闭了 关闭已经关闭的channel会导致panic,所以在closer(关闭者)不知道channel是否已经关闭的情况下去关闭channel是很危险的 发送值到已经关闭的channel会导致panic,所以如果sender(发送者)在不知道channel是否已经关闭的情况下去向channel发送值是很危险的 那些批评看起来都很有道理(实际...阅读全文

博文 2017-02-24 07:50:55 天唯

golang sync.Pool试用说明及注意事项

Go tip 是 Go 语言的实验分支,包含了很多尚在讨论,但很有可能会加入 stable 分支的特性。“Go tip 在做什么”(原文地址:What's happening in Go tip)分析总结了 Go 语言尚在开发中的一些重要特性。 本文译自:What's happening in Go tip (2014-01-10) 现在是 2014 年了,刚刚经历了圣诞和新年前夜,Go 团队就已经开始为下一个发布版本而工作了。也因此,“Go tip 在做什么”系列也重开了。 作为这个系列的最新一篇,这篇文章将会有些小调整。最重要的调整是,不会再遵循每周一篇文章的发布周期。一周里可能有几篇文章,也可能一篇都没有。这个调整,一部分由于个人原因,一部分也因为这样可以更灵活的追踪 Go 的改变。这...阅读全文

go-tour练习解答

go-tour对于想学习golang的人来说是一个很好的教程。 首先go-tour是有web版本,但是需要FQ。如果不能FQ的,也可以在google code上自己下载go-tour源码,go build,run一下,在自己的机器上就可以跑这个教程了。 提醒下,如果是后者,这篇文章中的程序对应的import包就需要进行相应修改了。 下面给出我的go-tour中的Exercise的解答(在web上已经测试通过) Exercise: Loops and Functions 第一个循环10次: package main import ( "fmt" ) func Sqrt(x float64) float64 { z := float64(1) for i := 0; i <= 10; i++ {...阅读全文

博文 2014-10-04 19:26:16 yjf512

为什么Go在中国这么流行?

文章根据谷歌的trends,国内Go相关网站的Alexa以及Baidu的golang搜索排名等分析Go在中国流行的可能原因。其中提到本社区:studygolang.com 是中国Go社区的领跑者。 看到这篇文章很激动,很久没有维护该社区了,接下来会好好维护,争取做成Golang在国内最好、最大的社区。 文章地址:[why-is-go-popular-in-china](http://herman.asia/why-is-go-popular-in-china) ...阅读全文

[Golang] 从零开始写Socket Server(2): 自定义通讯协议

在上一章我们做出来一个最基础的demo后,已经可以初步实现Server和Client之间的信息交流了~ 这一章我会介绍一下怎么在Server和Client之间实现一个简单的通讯协议,从而增强整个信息交流过程的稳定性。 在Server和client的交互过程中,有时候很难避免出现网络波动,而在通讯质量较差的时候,Client有可能无法将信息流一次性完整发送,最终传到Server上的信息很可能变为很多段。 如下图所示,本来应该是分条传输的json,结果因为一些原因连接在了一起,这时候就会出现问题啦,Server端要怎么判断收到的消息是否完整呢?~ 唔,答案就是这篇文章的主题啦:在Server和Client交互的时候,加入一个通讯协议(protocol),让二者的交互通过这个协议进行封装,从而使S...阅读全文

博文 2015-10-16 12:00:01 ahlxt123

PHP和Golang使用Thrift1和Thrift2访问Hbase0.96.2(ubuntu12.04)

目录: 一、Thrift1和Thrift2的简要介绍 1) 写在前面 2) Thrift1和Thrift2的区别 二、Thrift0.9.2的安装 1) 安装依赖插件 2) Thrift0.9.2的编译 3) Thrift0.9.2编译后,配置成可执行文件 三、Hbase0.96.2的安装 1) Hbase的介绍 2) Hbase的安装 3) Hbase基于源码的Thrift生成接口文件 四、PHP和Golang使用Thrift1和Thrift2访问Hbase 1) PHP基于Thrift1访问Hbase 2) Golang基于Thrift2访问Hbase 五、常见问题 六、扩展阅读 目录: 一、Thrift1和Thrift2的简要介绍 1) 写在前面 从Hbase0.94.11开始有两套t...阅读全文

博文 2014-10-07 22:38:36 lion.net

go实现抓妹子图片

1:学习练手用的 2:我也是看到http://www.oschina.net/code/snippet_2362573_48180这篇文章后发现妹子图这个网站结构比较简单,实现起来easy 3:代码还有很多优化的地方,怕老板看见只能回家搞了 4:欢迎指正 直接上代码 package main import ( "bytes" "fmt" "io/ioutil" "net/http" "os" "regexp" "strconv" ) const ( PATH string = "~/meizi" //文件存储路径 STARTURL string = "http://www.mzitu.com/model" //妹子图模块列表页url CONCURRENCY int = 3 //并发下载数 )...阅读全文

博文 2015-06-18 09:02:10 vspeter

一些不常见的Go命令参数详解

你是刚开始使用Go工具么?或者你想扩展知识?这篇文章将会描述每个人都需要知道的Go工具参数。免责声明:这篇文章可能会有些偏见。这篇文章描述了我个人会用到的Go工具参数,还有一些是我周围的人遇到的问题。如果你还有别的想法,在Twitter联系我。$ go build -x-x会列出来go build调用到的所有命令。如果你对Go的工具链好奇,或者使用了一个跨C编译器,并且想知道调用外部编译器用到的具体参数,或者怀疑链接器有bug;使用-x来查看所有调用。$ go build -x WORK=/var/folders/00/1b8h8000h01000cxqpysvccm005d21/T/go-build600909754 mkdir -p $WORK/hello/perf/_obj/ mkdi...阅读全文

博文 2016-10-11 02:00:00 abv123456789

Go语言的前景分析

本文为原创文章,转载注明出处,asdfasdfasdf 欢迎扫码关注公众号flysnow_org或者网站http://www.flysnow.org/,第一时间看后续精彩文章。觉得好的话,顺手分享到朋友圈吧,感谢支持。 这段时间比较忙,相信很多朋友大概都知道,如果不知道的话,可以参考我上篇文章跨维度的打击,是可以直接秒杀的,里面有介绍,大家可以看看。 抓住时代的趋势 在上篇文章中,也就是那个跨维度的打击,是可以直接秒杀的中,提到这个时代的问题,这次针对go语言的前景分析,其实我也想讲一下时代的问题。还记得2010年的时候,那个时候移动互联网时代刚刚兴起,很多以前做java的,也就是做J2EE的人(当时J2EE是红海),抓住了这个机会进行的转型,然后得到红利,甚至实现了人生的转变,这个真的不是...阅读全文

博文 2018-10-16 09:34:41 飞雪无情

[翻译] Go(#golang) 实现的状态机

春节前,粗略研究了一下微信的公共帐号。用 Golang 实现了一个简单的 package wechat,用于接入微信公共帐号。当时就在思考,微信的文字交互过程如果要实现有一定逻辑的复杂过程,可能需要使用到状态机。然后,就看到了这篇文章:《State machines in Go (#golang)》。非常合时宜啊!翻译于此,以飨读者! ——–翻译分隔线——– Go(#golang) 实现的状态机 我已经用 Go 代替 Python 重写了一个关键的服务组件。由于 Python 的解释器不是线程安全的,所以在解析的时候使用了全局锁。Go 与 Python 不同,它内建了并发支持,并且是静态编译的。 首先要实现一个状态机。Python 的版本是基于 David Mertz 的这篇文章。 Mert...阅读全文

博文 2014-10-09 16:18:31 mikespook

在Go包里添加C代码并且不使用CGO(不需要gcc)

如果go代码里使用了cgo,那么编译的时候电脑上必须按照gcc才能正确编译 这篇文章展示了如何用c写一个包让go调用并且不需要使用cgo A 需要注意的: 1. C代码天生的不安全 2. Go1的兼容性保证不包括C代码 3. C函数不能inline 4. 逃逸分析不能跟踪传递到C函数里的value (逃逸分析:http://kenwublog.com/jvm-optimization-escape-analysis) 5. C编译器(5c,6c,8c)没有对应的Go编译器优化做的好,因此生成的代码也许没有Go代码优化的那么好 6. C代码是plan9风格的,与C89较相似 B 返回的方式 第一个例子是一个简单的返回true的函数:True void ·True(bool res) { res...阅读全文

博文 2015-01-13 22:16:22 varding

golang积累-接口指针与结构体指针

对go做过开发的朋友都很熟悉interface。这几天在网上看到了篇文章,谈到了interface与nil判等的问题。题是好题,就进一步了解了一下。 原题如下: Nil接口并不是有Nil指针的接口 type Cat interface { Meow() } type Tabby struct {} func (*Tabby) Meow() { fmt.Println("meow") } func GetACat() Cat { var myTabby *Tabby = nil // Oops, we forgot to set myTabby to a real value return myTabby } func TestGetACat(t *testing.T) { if GetACa...阅读全文

博文 2016-10-03 10:00:02 qq_26981997

goprotobuf基本使用

如果你对Google Protocol Buffer不了解,可以先看下我这篇文章里收集的中文资料:关于Google Protocol Buffer的中文资料 源码地址:https://code.google.com/p/goprotobuf/ 详细的介绍:https://code.google.com/p/goprotobuf/source/browse/README 介绍: This software has two parts: a ‘protocol compiler plugin’ that generates Go source files that, once compiled, can access and manage protocol buffers; and a libr...阅读全文

博文 2014-10-09 16:52:15 Rhino(犀牛)

Go语言实现整型自增id生成器

最近需要实现一个自增序列的增长功能,原来的做法是从数据库中实现自增长就可以了,可是最近用的sequel pro死活找不到从指定值开始自增长的设置,只能自己通过代码查找数据库最后一项然后加一,这样每次需要增加数据的时候都要去查找以便,很是不方便,最近看到这篇文章,获益匪浅,作者提供的程序还能直接用,哈哈哈,赶紧mark了,谢谢作者。 原文出处:https://mikespook.com/2012/06/golang-channel-%E6%9C%89%E8%B6%A3%E7%9A%84%E5%BA%94%E7%94%A8/ 查看原文后会有很多意外收获呢 package main import ( "fmt" "time" "strconv" "reflect" ) type AutoInc s...阅读全文

博文 2017-08-10 09:05:01 大雁儿

golang入门篇-基础类型

golang有如下基本类型: 整数类型: int8、int16等等 浮点类型:float32、float64 布尔类型:bool 复数类型: complex64、complex128 字符串类型: string 字符类型: byte、rune 整数类型 整型转换 golang中的编译器不会做隐式的类型转换,int和int32是俩种不同的类型。 var value2 int32 value1 := 64 // value1将会被自动推导为 int类型 value2 = value1 // 编译错误 value2 = int32(value1) // 强制类型转换编译通过 在做强制类型转换时,需要注意数据长度被截短而发生的数据精度损失(比如将浮点数强制转为整数)和值溢出(值超过转换的目标类型的值...阅读全文

博文 2017-10-07 19:31:38 u010990172

说说c, c++ 和 go

今天接触到了Go语言, 请原谅我现在才接触到Go, 之前听云风大神说起过, 但我总把它和易语言混淆了, 导致我没有更早的了解到这个语言. 就在一年多前, 那个时候的我还是对C++无比的热爱, 认为c++是做后台服务器的不二选择. 那个时候总认为c 跟 c++是一家的, 所以我总爱标榜自己为c/c++程序员. C++虽然完全兼容了C(这是优点, 也是C++致命的缺陷), 但是C++跟C的设计思想可以说是很不一样的, 具体说起来可以参见云风关于C++和C的一些讨论. 对C++的认识随着自己做聚能推项目不断加深, 我了解几乎所有c++的特性, 但说实在的, 我能用上的特性真的不多. 我也试图研究那些神一般的模板元编程, 但我实在是研究不下去, 因为我觉得这么复杂的的实现, 只是为了那么一点点的效率...阅读全文

博文 2014-10-04 19:26:53 winkyao

如何利用golang 反射值来定义一个变量

之前写java的时候就已经知道了有反射这个概念,看过一遍文章专门介绍了一下java的反射机制,不过现在忘记了。 今天写一个通用函数的时候要对传入的参数经行类型判断,还要定义与其像同类型的变量经行取址运算,baidu, google,golang reflect包也看了好久,也没看到将返回值来定义个变量的办法。最后在一篇博客中得到灵感—–>点击可以看看。 这篇文章中没有告诉怎么将反射值去定义一个变量,但看完之后思考一下,既然要返回一个类型,但是类型又是不确定的,若存在这样一个返回变量的函数,则其返回类型必是Interface,在官网文档里找返回类型是Interface的函数,就是它了,它是Value类型的一个函数,所以就不能使用reflect.TypeOf(i interface{})来操作了...阅读全文

博文 2016-03-28 05:00:01 Tangs_

Go 读取控制台输入

这是一个快速简单的教程,主要内容是如何在 Go 程序中读取控制台的输入。在这个教程中,我们将创建一个非常简单的脚本,这个脚本可以读取用户的输入并打印出来。 ## 读取整个句子 我们使用 `while` 循环,在 Go 语言中相当于没有任何参数的 `for` 循环,这样就可以让程序一直运行了。在这个例子中,每次输入一个字符串并按下 `enter` 键,我们会通过 `\n` 这个关键字符来区分字符串,如果你想对比刚才输入的字符串,我们还需要调用 replace 方法来去除掉 `\n` 然后再进行比较。 > 如果你想让这个程序在 Windows 系统下运行,那么你必须将代码的 `text` 替换为 `text = strings.Replace(text,"\r\n","",-1)` 因为 Win...阅读全文

博文 2018-11-11 22:28:19 xmge

Go圣经-学习笔记入门bufio.Scanner

上一篇 Go圣经-学习笔记入门bufio 下一篇 Go圣经-学习笔记入门bufio.Writer 由bufio.Reader引出的问题 由上篇文章《Go圣经-学习笔记入门bufio》,我们可以知道,bufio.Reader结构体中所有读取数据的方法,都包含了delim分隔符,这个用起来很不方便,所以Google对此在go1.1版本中加入了bufio.Scanner结构体,用于读取数据。 使用DEMO: func main(){ scanner:=bufio.NewScanner( strings.NewReader("ABCDEFG\nHIJKELM"), ) for scanner.Scan(){ fmt.Println(scanner.Text()) // scanner.Bytes()...阅读全文

博文 2017-10-22 00:31:10 cdh0805010

Golang+MySQL 事务

准备知识:MySQL事务 1 基本操作 sql.Tx tx会从连接池中取一个空闲的连接,直至调用commit或者rollback才会释放 tx, err := db.Begin() // 创建tx对象 tx.Query(command1) tx.Exec(command2) tx.Commit() 2 并发 事务只有一个连接,事务内的操作是串行的 db, _ := sql.Open(...) rows, _ := db.Query("SELECT id FROM tt_users") for rows.Next(){ var ( user_id int openid string ) rows.Scan(&user_id) db.QueryRow("SELECT openid FROM tt...阅读全文

博文 2018-08-08 14:34:53 埃尔温薛定谔不养猫

Go 开发进程说明

Go in Go随着 Go 1.5 版本的开发,现在整个系统都是使用 Go 编写的(有一小部分汇编)C 已经成为过去时了。注: gccgo 仍然很强大 这篇文章主要探讨原始编译器 gcc为什么之前用 C 编写?启动(而且 Go 的主要目的不是作为一个编译器实现语言)为什么编译器使用 Go 重写?不单单是验证,我们还有更多实际的原因:Go 比 C 容易编写(实际上)Go 比 C 容易调试(即使没有调试器的情况下)Go 将成为你唯一需要会的语言,鼓励贡献 Go 有更好的模块化,工具链,测试工具,配置工具等等Go 很简单就能进行并行操作虽然看起来很多优势,但是还是夸的太早了:)设计文档: golang.org/s/go13compiler 为什么运行时也是用 Go 重写?我们有自己的 C 编译器来...阅读全文

博文 2015-05-29 12:00:00 叶秀兰

mac idea golang 配置

mac idea golang 配置 今天只写了最关键的地方 基本配置可以参见这篇文章 http://www.cnblogs.com/clivelee/p/3870186.html 由于golang plugin背墙了 所以idea1.4无法配置 1. 进入https://github.com/go-lang-plugin-org/go-lang-idea-plugin/releases/ 下载最新的插件 注意——-mac 直接下完整的zip文件 1.0.0 2. 打开plugins -》install plugin from disk 从硬盘安装 直接选择刚才下的zip文件 3 file - project structure - Sdks 配置go sdk 4 大功告成 $(functi...阅读全文

博文 2015-06-17 20:01:44 csapr1987

如何利用一个数据库中间件扩展MySQL集群

上次写了一篇有关kingshard架构设计的[文章](https://github.com/flike/kingshard/blob/master/doc/KingDoc/architecture_of_kingshard_CN.md),得到了很多热心网友的关注。其中有网友提到:希望再写一篇关于如何利用kingshard搭建一个可扩展的MySQL集群的文档。利用假期时间,写了一篇kingshard使用指南,在这篇文章中,我将结合自己对MySQL Proxy的理解,为大家讲述如何正确使用kingshard数据库中间件。 感兴趣的同学,请移步: https://github.com/flike/kingshard/blob/master/doc/KingDoc/how_to_use_ki...阅读全文

How Stacks are Handled in Go

文章从C中的线程栈引入问题,讲述Go的处理方式。 第一阶段处理方式:Segmented stacks(分段栈); 现阶段处理方式:Stack copying 想了解 Goroutine 、 Stack 和 GC 内部实现的可以看看这篇文章以及相关文章 [1.How Stacks are Handled in Go](http://blog.cloudflare.com/how-stacks-are-handled-in-go/) [2.Contiguous stacks](https://docs.google.com/document/d/1wAaf1rYoM4S4gtnPh0zOlGzWtrZFQ5suE8qr2sD8uWQ/pub) [3.Conve...阅读全文

google go 语言介绍(一)

翻译自golang.org 介绍 这是一篇为熟悉c或c++语言的开发人员提供的介绍go语言的基础教程。本文不是综合性的语言指南,而更接近于语言规范。在你阅读本教程后,你可以继续阅读“如何更有效率的编写Go程序”这篇文章,更深入的了解这门语言应该如何被使用。同时,这里还提供了一个Go语言的三天教程:第一天,第二天,第三天。 接下来将通过一系列适度的例子程序来展现这门语言的关键特性。所有的程序都存放在/doc/progs/目录中。 程序片断都标注了该片断在原始文件中的行号。为了代码的清晰,空白行将被保留。 Hello,World 让我们以一种常用的方式开始我们的教程: 05 package main 07 import fmt "fmt" // Package implementing form...阅读全文

博文 2014-10-04 19:26:20 fffvvvzz

Golang语言标准库http/url的Values的详细介绍

/*640*60,创建于2013-5-24*/ var cpro_id = "u1290382"; Golang标准库http/url Values 今天我们更新文章,主要推广的还是GO语言,当然现在热门搜索的还是Golang,今天我们主要讲解的就是Golang标准库里边的net/url的下边的这些 [php] type Values func ParseQuery(query string) (m Values, err error) func (v Values) Add(key, value string) func (v Values) Del(key string) func (v Values) Encode() string func (v Values) Get(key st...阅读全文

博文 2017-02-09 18:38:04 widuu

Go语言,编译时不生成bin目录的原因

今天照着例程想把工程管理好好研究下,忽然发现怎么都不自动生成bin目录,google半天,发现这篇文章 https://golang.org/doc/code.html 原来是GOBIN环境变量的问题,如果设置了这个环境变量,则不生成bin目录,可执行文件都存到GOBIN里了,删去,再试,ok了。 还是有必要把google的文档好好吃透下...阅读全文

博文 2015-06-17 23:02:26 zha_stef

Golang并发模型:并发协程的优雅退出

goroutine作为Golang并发的核心,我们不仅要关注它们的创建和管理,当然还要关注如何合理的退出这些协程,不(合理)退出不然可能会造成阻塞、panic、程序行为异常、数据结果不正确等问题。这篇文章介绍,如何合理的退出goroutine,减少软件bug。 goroutine在退出方面,不像线程和进程,不能通过某种手段强制关闭它们,只能等待goroutine主动退出。但也无需为退出、关闭goroutine而烦恼,下面就介绍3种优雅退出goroutine的方法,只要采用这种最佳实践去设计,基本上就可以确保goroutine退出上不会有问题,尽情享用。 1:使用for-range退出 for-range是使用频率很高的结构,常用它来遍历数据,range能够感知channel的关闭,当chan...阅读全文

博文 2018-12-04 15:34:49 大彬

Go语言的前景分析

本文为原创文章,转载注明出处,欢迎扫码关注公众号flysnow_org或者网站http://www.flysnow.org/,第一时间看后续精彩文章。觉得好的话,顺手分享到朋友圈吧,感谢支持。 GO语言前景分析 这段时间比较忙,相信很多朋友大概都知道,如果不知道的话,可以参考我上篇文章跨维度的打击,是可以直接秒杀的,里面有介绍,大家可以看看。 抓住时代的趋势 在上篇文章中,也就是那个跨维度的打击,是可以直接秒杀的中,提到这个时代的问题,这次针对go语言的前景分析,其实我也想讲一下时代的问题。还记得2010年的时候,那个时候移动互联网时代刚刚兴起,很多以前做java的,也就是做J2EE的人(当时J2EE是红海),抓住了这个机会进行的转型,然后得到红利,甚至实现了人生的转变,这个真的不是夸张的。...阅读全文

博文 2018-10-17 19:42:35 飞雪无情

关于Go 和Erlang的一些想法

关于Go 和Erlang的一些想法 原文链接:http://blog.erlware.org/some-thoughts-on-go-and-erlang/ 以下为本人翻译,仅用于交流学习,版权归原作者所有,转载请注明出处,请不要用于商业用途。 更新: 我发现我这篇文章没有把观点说明白。我并不是说Go不行或者应该改进,因为它跟Erlang是不一样的。我想说的是在可用性和低延迟不可缺少的高并发后端领域来说,Go仍然不能替代Erlang。 需要注意的是,我写这篇文章并不是要关于某一种语言比如Julia。我听说不仅仅在新项目里,还有在一些老项目要替换新语言里,Go慢慢成了Erlang的替代者。没有人说Julia也是这样,但是Go和Node.js却被一些人看作是Erlang的友好的替代者。Erlan...阅读全文

博文 2015-04-27 15:00:30 wang8118

布隆过滤器

这篇文章可能涉及到一些拓扑知识,可以参考之前的文章: 常见哈希函数FNV和MD5 Golang binary包——byte数组如何转int? 布隆过滤器的原理不算复杂。对数据进行查找,简单点的可以直接遍历;对于拍好顺序的数据,可以使用二分查找等。但这些方法的时间复杂度都较高,分别是O(n)和O(logn)。无法对大量乱序的数据进行快速的查找。 哈希,将给定的数据通过哈希函数得到一个唯一的值,此值可以作为数据的唯一标识,只要通过该标识,再通过哈希函数逆向计算,就能还原出来原始的数据。在前面的网址压缩的调研分析里面介绍的压缩网址的方法,其实也就是一种哈希,只不过借助了数据库的支持。 布隆过滤器就是借助了哈希实现的过滤算法。通过将黑名单的数据哈希之后,可以得到一个数据。申请一个数组空间,长度是黑名...阅读全文

一步一步教你写BT种子嗅探器之一---原理篇

之前看到 lantern 这个十分火的翻墙工具,其利用了P2P的思想,就想了解一下P2P相关的协议。看了下最流行的BT协议官方文档,就产生了实现BT协议的想法,顺便根据协议实现了一个BT种子嗅探器。 也有人将BT种子嗅探器称为BT种子爬虫,个人觉得其行为特性和传统的web爬虫相差较大,反而和嗅探器很类似,因此暂且称之为BT种子嗅探器吧。 接下来将写一系列文章来介绍其原理和具体实现方式。这篇文章先提纲挈领,介绍其工作原理,以对全局有一个把握。后序的文章再介绍具体细节。 背景知识 在讲原理之前首先你得具备BitTorrent(简称BT)协议的一些基本知识,以便于理解接下来要讲的嗅探器。BT协议其实是一个协议簇,BEP-3 是其基本协议内容,其他的大部分都是围绕这个来进行扩展或补充。要想从BT网络...阅读全文

博文 2017-02-09 08:32:12 shiyanhui

Go语言 如果查询度量内存和GC使用状况

创文章,转载请注明出处:服务器非业余研究http://blog.csdn.net/erlib 作者Sunface 这篇文章会陆续总结一些内存、Gc度量的方法 首先是通过 stats := &runtime.MemStats{} runtime.ReadMemStats(stats) 这个来获取一个stat,里面包含了内存和垃圾回收的信息:GC时间分布slice,GC总时间,GC次数等等 type Garbage struct{ a int } func notify(f *Garbage) { stats := &runtime.MemStats{} runtime.ReadMemStats(stats) fmt.Println("Last GC was:", stats.LastGC) g...阅读全文

博文 2015-06-17 23:07:37 abv123456789

golang实现权重轮询调度算法(Weighted Round-Robin Scheduling)

最近在看golang连接mysql数据库的例子(Go-MySQL-Driver),但是想到连接数据库肯定会有连接多从库的需求,而且每个从库的权重也会不一样,参考<<权重轮询调度算法(Weighted Round-Robin Scheduling)>>这篇文章写了一个golang版本的权重轮询调度算法,请大家指教,不多说了直接上代码: package main import ( "fmt" "time" ) var slaveDns = map[int]map[string]interface{}{ 0: {"connectstring": "root@tcp(172.16.0.164:3306)/shiqu_tools?charset=utf8", "weight": 2}, 1: {"co...阅读全文

博文 2016-11-03 02:00:03 Lancerio

Go模块简明教程(Go语言依赖包管理工具)

Go模块是Go语言的依赖包管理工具。 Go模块的使用 1、Go1.11及以后版本才能使用。 2、Go1.11需要设置环境变量 GO111MODULE 为 on(新特性开关,按照Go语言惯例,mod首次在go1.11版本中使用,go1.12及以后版本这个设置应该不会用了)。 mod是模块英文modules的简写。 列举一些常用的命令行: go help mod查看帮助。 go mod init <项目模块名称>初始化模块,会在项目根目录下生成 go.mod 文件。参数<项目模块名称>是非必写的,但如果你的项目还没有代码编写,这个参数能快速初始化模块。如果之前使用其它依赖管理工具(比如dep,glide等),mod会自动接管原来依赖关系。 go mod tidy根据go.mod文件来处理依赖关系...阅读全文

博文 2018-08-25 14:34:57 wuyumin

Golang的TCP和UDP实现

这篇文章介绍了Golang如何实现TCP和UDP传输,转自Mina Andrawos的Implementing UDP vs TCP in Golang。欢迎大家访问[我的博客](http://zuozuohao.github.io/),代码可以在[@Zuozuohao](https://github.com/Zuozuohao/GolangGOFPatterns)下载。 Go被称为可移植的系统编程语言,以其简洁的语法、易于部署和良好的性能受到后端程序员的欢迎。网络通信是后端服务软件的一个重要功能,目前存在大量的应用层的通信协议能够满足这个功能需求。构建这些协议的技术基础或是TCP、或是UDP,在这篇文章将简要介绍两种协议的Go语言实现。 TCP IN GO TCP作为HT...阅读全文

go error 扩展

golang没有提供枚举支持,但是枚举在一些业务场景中却是十分重要的。举个简单的例子:发表帖子,需要对帖子做一些校验。这时我们可能就需要定义一些异常变量,这些常量自然是维护在枚举中语意更强,使用更加灵活。下面我简单介绍一下 http://www.threeperson.com 异常枚举实现思路。 #### iota 给const绑定序列值 ----------------- ```` type ErrorCode int const ( INTERNAL_ERROR ErrorCode = 1 + iota NOT_LOGIN NOT_EXIST_ARTICLE_ERROR ARTICLE_TITLE_LEN_OVERFLOW ARTICLE_CATEG...阅读全文

用Golang写一个搜索引擎 (0x00)--- 从零开始

很早就想写一系列的这样的文章了,之前在一个电商公司做搜索,对搜索引擎有一些认识,来到一个新的创业公司以后非常高兴还有机会继续做这方面的事情,虽然领域已经变了,而且不是做搜索了,但是技术还是那些技术,并且有机会接触到了Go语言,对于一个将近10年C/C++的程序员来说,Go的一些特质让我觉得非常舒服,可参见我之前的这篇文章。 从公司项目衍生出了一个自己的搜索引擎项目,然后有了这篇文章。 先聊聊目标吧,我希望实现一个这样的搜索引擎 使用Go语言实现,方便部署,最好就用一个二进制文件搞定一些,不需要安装任何依赖。 类似一个电商的搜索引擎,支持多字段的检索,不仅仅是文本的全文索引,还需要包括过滤功能(比如价格区间过滤),汇总功能(比如结果集中品牌数量汇总),基本的统计功能。 索引器和搜索器在一起,主...阅读全文

博文 2016-07-11 13:50:21 吴yh坚

golang time操作整理

这里的内容大部分是从他人处整理得到 http://my.oschina.net/1123581321/blog/190942 时间戳 当前时间戳 fmt.Println(time.Now().Unix()) # 1389058332str格式化时间 当前格式化时间 fmt.Println(time.Now().Format("2006-01-02 15:04:05")) # 这是个奇葩,必须是这个时间点, 据说是go诞生之日, 记忆方法:6-1-2-3-4-5 # 2014-01-07 09:42:20时间戳转str格式化时间 str_time := time.Unix(1389058332, 0).Format("2006-01-02 15:04:05") fmt.Println(str_...阅读全文

博文 2016-03-02 16:00:07 shenlanzifa

Golang视角下的设计模式

这篇文章想聊聊Golang语言下的设计模式问题,我觉得这个话题还是比较有意思的。Golang没有像java那样对设计模式疯狂的迷恋,而是摆出了一份“看庭前花开花落,望天空云卷云舒”的姿态。 单例模式: Gloang的单例模式该怎么写?随手写一个,不错,立马写出来了。但这个代码有什么问题呢?多个协程同时执行这段代码就会出现问题:instance可能会被赋值多次,这段代码是线程不安全的代码。那么如何保证在多线程下只执行一次呢?条件反射:加锁。。。加锁是可以解决问题。但不是最优的方案,因为如果有1W并发,每一个线程都竞争锁,同一时刻只有一个线程能拿到锁,其他的全部阻塞等待。让原本想并发得飞起来变成了一切认怂串行化。通过check-lock-check方式可以减少竞争。还有其他方式,利用sync/a...阅读全文

博文 2017-09-21 10:04:57 ieasy_tm

使用Javascript做弹出框的具体步骤

在学习JavaScript的过程中,有些童鞋可能会对如何用JavaScript实现弹出框存在各种各样的疑问,今天小编就和大家分享一个在一个web前端培训网站上看到的一篇关于弹出框的干货文章给还在JavaScript魂斗路上中的小伙伴们。 弹出框在页面中是不可缺少的一部分,我们今天来实现简单的弹出框效果。 ![图片1.png](http://studygolang.qiniudn.com/160219/a60c0643f23b91275b21de4746d50031.png) 首先我们来分析弹出框的部件。简单弹出框分为头、内容、尾部。 头部中有标题和关闭按钮,内容就可以图文、媒体、iframe、flash等等,尾部就是按钮(确认,取消等等),这个例子尾部我就不加入按钮了,这个...阅读全文

如何避开 Go 中的各种陷阱 [译]

Go 语言有一些我们常说的「坑」,有不少优秀的文章解释讨论过这些「坑」。这些文章所讨论的东西非常重要,尤其对 Go 的初学者来说,时不时就有人掉进这些小「坑」里。 但有个问题让我困惑了很久,为什么我几乎没碰到过这些文章里讨论的绝大部分「坑」?真的,大多数比较知名的比如 “nil interface” 或者 “slice append” 等我从来就没觉得困惑过。我从开始使用 Go 一直到现在总是以某种方式避开了这些形形色色的问题。 后来发现,我足够幸运的读了不少解释 Go 数据结构内部实现的文章并且学习了一些 Go 内部运行原理的基础知识。这些知识足够让我对 Go 有了深刻的认识,同时也避免了掉进各种各样的坑里。 记住维基百科的定义,「坑 是…有效的构造…但同时是反直觉的」 所以,你只有两个选...阅读全文

博文 2016-11-23 06:27:19 newt0n