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

[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语言为什么没有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 语言实现优雅的服务器重启

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 系列教程 —— 9. 循环

这是 Go 语言系列教程的第 9 部分。 循环语句是用来重复执行某一段代码。 `for` 是 Go 语言唯一的循环语句。Go 语言中并没有其他语言比如 C 语言中的 `while` 和 `do while` 循环。 ## for 循环语法 ```go for initialisation; condition; post { } ``` 初始化语句只执行一次。循环初始化后,将检查循环条件。如果条件的计算结果为 `true` ,则 `{}` 内的循环体将在 post 语句之后执行。post 语句将在每次成功循环迭代后执行。在执行 post 语句后,条件将被检查。如果为 `true`, 则循环将继续执行, 否则 for 循环将终止。(译注:这是典型的 for 循环三个表达式,第一个为初始化表达式...阅读全文

博文 2017-12-12 06:16:25 polaris

Go语言爬虫

之前写爬虫都是用的python语言,最近发现go语言写起来也挺方便的,下面简单介绍一下。这里说的爬虫并不是对网络中的很多资源进行不断的循环抓取,而只是抓通过程序的手段都某些网页实现特定的信息抓取。可以简单分成两个部分:抓取网页,对网页进行解析。抓取网页。一般是向服务器发送一个http get/post请求,得到response。go提供的http包可以很好的实现。get方法:1resp, err := http.Get(“http://www.legendtkl.com") post方法:12resp, err := http.Post(“http://example.com/upload”, “image/jpg”, &buf)resp, err := http.PostForm(...阅读全文

博文 2017-07-02 19:22:57 Tao Kelu

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

如何优雅地关闭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的fallthrough与switch的坑

创 Golang的fallthrough与switch的坑 梦朝思夕 关注 0人评论 544人阅读 2017-06-06 16:08:19 最近写Golang的是发现一个fallthrough与switch的坑:switch value.(type) { case int: fallthrough case int64: //...... }编译就报错:cannot fallthrough in type switchWHAT????在type switch 中不能使用fallthrough只能修改代码:switch value.(type) { case int , int64: //...... } ©著作权归作者所有:来自51CTO博客作者梦朝思夕的原创作品,如需转载,请注明出处,否则...阅读全文

博文 2018-07-02 12:10:31 梦朝思夕

golang 获取网页内容,并存入文件中

package main import ( "fmt" "log" "net/http" "os" ) func main() { resp, err := http.Get("http://domain/path") if err != nil { fmt.Println(err) log.Fatal(err) } if resp.StatusCode == http.StatusOK { fmt.Println(resp.StatusCode) } defer resp.Body.Close() buf := make([]byte, 1024) f, err1 := os.OpenFile("path.txt", os.O_RDWR|os.O_CREATE|os.O_APPEND, o...阅读全文

博文 2015-03-31 03:00:00 benlightning

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 大雁儿

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在中国这么流行?

文章根据谷歌的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 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圣经-学习笔记入门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

微信公众号文章采集mlog-wxbot

mlog-wxbot,微信公众号文章采集。 **功能简介** * 机器人关注技术相关的公众号,当这些公众号推送文章的时候,机器人就能够收到消息,然后将消息对应的文章内容抓取下来,通过该方式能第一时间获取到自己关注的公众号中的新文章。 * 在抓取到微信的文章之后,会利用百度 ai 自动为文章分组打标签。 * 然后根据配置会将文章推送到指定的接口,以实现文章发表功能。 **存在的问题** * 因为微信机器人使用的是网页版微信 api,所以要求你的微信号码能够登录网页版微信,并不是所有的微信号码都支持登录网页版本微信,使用请用你的微信号码到这里( [https://wx.qq.com/](https://mlog.club/redirect?url=https%3A%2F%...阅读全文

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

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 埃尔温薛定谔不养猫

[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

Go struct

// xuhh_go_struct project main.go /* tips : 具有相同字段序列(字段名,类型,标签,顺序)的匿名struct 属于同一类型 struct 值类型。 赋值和传参都会复制全部内容。 struct 可以内嵌,但是不能同时内嵌同一类型和其指针类型 struct 可以匿名字段,字段包括任何类型。 struct 在内嵌多个类型的时候,需要注意如果不同类型之间拥有相同字段名的时候,调用这些类型的字段的时候 需要加上类型名。 相同的struct 可以进行 == != = 操作。 */ package main import ( . "fmt" ) type Class struct { strClassname string nClassNum int strAdr...阅读全文

博文 2015-06-18 09:09:12 xuheazx

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

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命令参数详解

你是刚开始使用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

golang for,range的坑

for,range 的k,v变量在整个遍历过程中共用,不能直接进行引用传递,即地址传递,但循环内定义的变量只能为当前循环所使用。 错误代码: package main import ( "encoding/json" "log" "time" ) type test struct { Name string `bson:"name" json:"name" yaml:"name"` // Command name (unique on the profile) } func (test test) String() string { out, err := json.Marshal(test) if err != nil { return err.Error() } return strin...阅读全文

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(#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

图解Golang的GC算法

虽然Golang的GC自打一开始,就被人所诟病,但是经过这么多年的发展,Golang的GC已经改善了非常多,变得非常优秀了。以下是Golang GC算法的里程碑:v1.1 STWv1.3 Mark STW, Sweep 并行v1.5 三色标记法v1.8 hybrid write barrier经典的GC算法有三种: 引用计数(reference counting)、 标记-清扫(mark&sweep)、 复制收集(CopyandCollection)。Golang的GC算法主要是基于 标记-清扫(markandsweep)算法,并在此基础上做了改进。因此,在此主要介绍一下标记-清扫(mark and sweep)算法,关于引用计数(reference counting)和复制收集(copy ...阅读全文

博文 2019-03-12 13:13:13 互联网技术窝

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语言的前景分析

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

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

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包里添加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

vscode 的配置golang代码提示

经过网上查找解决方法,也按照这篇文章修改了vscode 的配置,但依然无法进行代码提示。 参考:https://www.cnblogs.com/Dennis-mi/p/8280552.html { "go.autocompleteUnimportedPackages": true, "go.useCodeSnippetsOnFunctionSuggest": true, "go.gopath": "/home/chensl004/Workspace/go/", "go.useCodeSnippetsOnFunctionSuggestWithoutType": true, "go.inferGopath": true, "go.gotoSymbol.includeImports": true,...阅读全文

说说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_

布隆过滤器

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

Go语言学习培训靠谱吗

互联网二十多年,已到十字路口。区块链出现前的互联网被称为古典互联网,而应用区块链技术的互联网才进入了后互联网时代。2017年9月,中国政府网络发表文章《我国区块链产业有望走在世界前列》,支持区块链技术发展,并向13亿中国人民普及了区块链技术,未来区块链技术在中国大有作为。而作为区块链技术的首选编程语言——go语言,自然是要被提上很多程序员的日程的,那go语言学习培训靠谱吗?学完能找到工作吗?​Go的目标是希望提升现有编程语言对程序库等依赖性(dependency)的管理,这些软件元素会被应用程序反复调用。由于存在并行编程模式,因此这一语言也被设计用来解决多处理器的任务。Go语言作为服务器编程语言,很适合处理日志、数据打包、虚拟机处理、文件系统、分布式系统、数据库代理等;网络编程方面,Go语言...阅读全文

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

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

博文 2018-12-08 15:34:42 shitaibin

如何利用一个数据库中间件扩展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...阅读全文

Golang 语言基础之六: string, pointer

Golang 语言基础之六: string, pointer Golang 语言基础系列: Golang 语言基础之一: type, variable, constant Golang 语言基础之二: for, ifelse, switch Golang 语言基础之三: array, slice Golang 语言基础之四: map, range Golang 语言基础之五: function Golang 语言基础之六: string, pointer Golang 语言基础之七: struct, method Golang 语言基础之八: interface Golang 语言基础之九: error, panic, recover Golang 语言基础之十: goroutine, ch...阅读全文

博文 2017-02-10 13:40:49 Xiaohui Wang

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

[golang]一个复杂的中文编码问题

今天在网上遇到一个问题,觉得挺有意思,就帮人解答了。 需求 在编码为Latin1的MySQL数据库中插入中文数据,由另一个系统将Latin1编码的字符串转码为GBK后作为短信内容发出。 简单版解答 import ( "golang.org/x/text/encoding/charmap" "golang.org/x/text/encoding/simplifiedchinese" ) func Convert(src string) (string, error) { gbk, err := simplifiedchinese.GBK.NewEncoder().Bytes([]byte(src)) if err != nil { return "", err } latin1, err :=...阅读全文

博文 2017-09-16 03:04:56 一桶冷水

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

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...阅读全文

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

检测 Go 程序中按值传递的 locks

`go tool vet -copylocks` 命令简介 Go 语言安装包附带 [vet](https://golang.org/cmd/vet/) 命令行工具。该工具能对程序源码运行一套启发式算法以发现可疑的程序结构,如无法执行的代码或对 `fmt.Printf` 函数的错误调用(指 arguments 没有对齐 format 参数): ```go package main import "fmt" func f() { fmt.Printf("%d\n") return fmt.Println("Done") } ``` ``` > go tool vet vet.go vet.go:8: unreachable code vet.go:6: missing argument for ...阅读全文

博文 2018-08-28 08:57:53 mbyd916

深入理解golang中bufio.SplitFunc

前言 golang的bufio包里面定以的SplitFunc是一个比较重要也比较难以理解的东西,本文希望通过结合简单的实例介绍SplitFunc的工作原理以及如何实现一个自己的SplitFunc。 一个例子 在bufio包里面定义了一些常用的工具比如Scanner,你可能需要读取用户在标准输入里面输入的一些东西,比如我们做一个复读机,读取用户的每一行输入,然后打印出来: package main import ( "bufio" "fmt" "os" ) func main() { scanner := bufio.NewScanner(os.Stdin) scanner.Split(bufio.ScanLines) for scanner.Scan() { fmt.Println(scan...阅读全文

博文 2018-10-14 00:34:40 goland

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 叶秀兰