[翻译]冰激淋制造商和数据竞态

Dave 总是会给我们带来这种很浅显有趣,又意义深刻的文章。原文在此:Ice cream makers and data races。 ————翻译分隔线———— 冰激淋制造商和数据竞态 Dave Cheney 这是一篇关于数据竞态的文章。本文的相关代码在 Github 上:github.com/davecheney/benandjerry。 这个例子模拟了两个冰激淋制造商 Ben 和 Jerry 随机接待他们的客户。 package main import "fmt" type IceCrea...阅读全文

mikespook 的博客 2017-01-07 19:00:09 mikespook

[翻译]十条有用的 Go 技术

原文在此,实用总结。 ————翻译分隔线———— 十条有用的 Go 技术 这里是我过去几年中编写的大量 Go 代码的经验总结而来的自己的最佳实践。我相信它们具有弹性的。这里的弹性是指: 某个应用需要适配一个灵活的环境。你不希望每过 3 到 4 个月就不得不将它们全部重构一遍。添加新的特性应当很容易。许多人参与开发该应用,它应当可以被理解,且维护简单。许多人使用该应用,bug 应该容易被发现并且可以快速的修复。我用了很长的时间学到了这些事情。其中的一些很微小,但对于许多事情都会有影响。所有这些都仅...阅读全文

mikespook 的博客 2017-01-07 19:00:09 mikespook

[翻译] channel 独木难支

原文在此。遗憾的是文章只提出了问题,并没明确提供如何解决这些问题。但无论如何,对于这种可以引起反思的文章,是不能放过的。另外,我得承认,似乎高层次的分布式系统的抽象,用函数式语言的范式来表述更容易一些(实现上其实未必)。 ————翻译分隔线———— channel 独木难支 或者说为什么流水线作业没那么容易 勇敢和聪明的 Golang 并发模型。 @kachayev 撰写 概述 Go 被设计用于更容易的构建并发系统,因此它有运行独立的计算的 goroutine 和用于它们之间通讯的 channe...阅读全文

mikespook 的博客 2017-01-07 19:00:08 mikespook

[翻译]理解 Go 语言的内存使用

许多人在刚开始接触 Go 语言时,经常会有的疑惑就是“为什么一个 Hello world 会占用如此之多的内存?”。Understanding Go Lang Memory Usage 很好的解释了这个问题。不过“简介”就是“简介”,更加深入的内容恐怕要读者自己去探索了。另外,文章写到最后,作者飘了,估计引起了一些公愤,于是又自己给自己补刀,左一刀,右一刀…… ————翻译分隔线———— 理解 Go 语言的内存使用 2014年12月22日,星期一 温馨提示:这仅是关于 Go 语言内存的简介,俗话...阅读全文

mikespook 的博客 2017-01-07 19:00:07 mikespook

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

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

mikespook 的博客 2017-01-07 19:00:06 mikespook

Thoughs on goRBAC

Code refactoring is not an easy job, but it has to be done in most of the times. I just completed the lightweight role based access control library: goRBAC’s refactoring. There are some feedbacks and questions about the design and usage. I think it w...阅读全文

mikespook 的博客 2017-01-07 19:00:04 mikespook

golang的位运算操作符的使用

& 位运算 AND | 位运算 OR ^ 位运算 XOR &^ 位清空 (AND NOT) << 左移 >> 右移 感觉位运算操作符虽然在平时用得并不多,但是在涉及到底层性能优化或者使用某些trick的时候还是比较有意思。 &(AND) |(OR) 就不提了最常用的东西 会编程就会。 &操作的话是当 两个数需要同时为1的时候才会保留。 例如 0000 0100 & 0000 1111 => 0000 0100 => 4 | 操作的话是当 两个数同时为1或者1个为1一个不为1的时候会保留。 例如 ...阅读全文

开源中国博客 2017-01-07 16:00:02 henrylee2cn

Golang:make,slice和append的一个小细节

这两天写代码的时候遇到了这么一个问题,就是向slice追加元素的这么一个简单的小问题,却由于疏忽,堵了好久,现在分享一下,避免以后再犯。 代码开始是这么写的: urls := make(map[string]string, 3) // 这里随便个例子 urls["baidu"] = "www.baidu.com" urls["google"] = "www.google.com" urls["csdn"] = "www.csdn.net" names := make([]string, len(...阅读全文

开源中国博客 2017-01-07 15:00:42 这里好像没有人

使用golang的标准库搭建网站--4.关于静态资源处理的问题

建网站不可避免的要使用各种各样的静态资源,这一节,就来看看,如何加载css,js图片等等这些资源。 在之前的基础上构造一简单的个HTML的测试文件 <HTML> <head> <title>Hello World</title> <link href="static/core.css" type="text/css" rel="stylesheet" /> </head> <body> <div id="header"> <p>this is header</p> </div> <div id=...阅读全文

开源中国博客 2017-01-07 15:00:41 这里好像没有人

使用golang的标准库搭建网站--3.模板函数

和大多数语言的的模板语法类似:{{.Name | FuncName}} go本身自带了一些模板函数,我们现在来看一看如何自定义模板函数: 先来看一个函数声明: func (t *Template) Funcs(funcMap FuncMap) *Template Funcs函数就是用来创建我们模板函数的函数了,它需要一个FuncMap类型的参数,继续看手册 type FuncMap map[string]interface{} 官方文档里是这么解释的 FuncMap is the type of...阅读全文

开源中国博客 2017-01-07 15:00:41 这里好像没有人

使用golang的标准库搭建网站--5.处理COOKIE

合理的使用cookie可以极大的提高网站的用户体验,这一篇文章主要来讨论一下,go中是如何处理cookie的。 声明 Go语言中通过net/http包中的SetCookie来设置: //设置cookie的方法声明 http.SetCookie(w ResponseWriter, cookie *Cookie) //Cookie的声明 type Cookie struct { Name string Value string Path string Domain string Expires ti...阅读全文

开源中国博客 2017-01-07 15:00:40 这里好像没有人

使用golang的标准库搭建网站--2.模板解析

模板的解析 既然是搭建网站, fmt.Fprintf(w, "Hello world, this is my first page!") 这种方式肯定就不能用了,得解析模板才行。 模板解析用到的包是”html/template”,先导包,然后改写Index函数: //先导入html/template包 import "html/template" func Index(w http.ResponseWriter, r *http.Request) { //解析指定模板文件index.html t...阅读全文

开源中国博客 2017-01-07 15:00:39 这里好像没有人

用go run命令启动main package中的多个文件

通常在main package中只有一个main.go文件,里面有程序的入口函数main()。 使用 go run main.go 就可以跑起程序了。 但是如果main.go文件比较长,希望将main.go拆分多个文件,比如在main package下,有a.go , b.go和main.go。 这个时候再用 go run main.go就会报错。 使用 go run *.go 可以解决问题。 $(function () { $('pre.prettyprint code').each(func...阅读全文

CSDN博客 2016-11-16 01:51 bdss58

以太坊go-ethereum客户端docker安装(二)开发(dev)环境搭建

在上一篇博客中,讲述了基于docker怎么搭建一个go-ethereum节点。作为开发人员,如果只是单纯的拥有一个Full node,还无法满足正常的开发。比如说,进行转账交易,你要考虑是否拥有一定的ETC,是否能够承受高昂的gas?基于这点,今天这篇博客就介绍一下如何搭建一个私有的dev环境。 方法一:利用现有开源 先给大家介绍一个现成的ethereum/client-go:test工具镜像。 下载工具 地址:https://github.com/pragmaticcoders/docker-...阅读全文

CSDN博客 2016-12-25 22:32 wo541075754

以太坊go-ethereum客户端docker安装(一)

最近一段时间忙于工作,就没来得及发表博客,但一直没有停止对区块链的研究。周末抽时间分享一下近期比较重大的收获之一——使用docker来搭建和使用以太坊的节点。本人已经顺利搭建出,开发环境,测试环境,Full node环境。后续会逐个以博客的形式分析出来,希望大家多多关注,共同探讨进步。 环境 第一次尝试是在云服务器的centos 6.5上面安装。由于docker要求centos必须6以上,而且kernel 版本必须2.6.32-431或更高。尝试将centos内核进行升级,但中间遇到一些问题,没...阅读全文

CSDN博客 2016-12-24 21:37 wo541075754

docker(8):使用alpinelinux 构建 golang http 看看能有多小

1,alpine linux 非常小 首先 alpine 非常的小,安装上了bash 之后也才 5mb。 golang 不需要其他的依赖,想看看是不是能在 alpine 上面跑呢。 搭建一个golang的环境,而不是把golang的环境放到alpine上面。 2,首先在centos 搭建golang环境 https://golang.org/doc/install 下载然后解压缩: tar -C /usr/local -xzf go1.7.4.linux-amd64.tar.gz 设置环境变量:...阅读全文

CSDN博客 2016-12-13 22:37 freewebsys

go错误处理——return,panic,defer

return和defer的顺序: return先返回,再运行defer,可以修改返回值: package main import ( "fmt" ) func main() { fmt.Println(test()) } //返回值为2 func test() (result int) { defer func() { result++ }() return 1 //return函数先返回 result被赋值为1 然后再result++ } 这里有个比较好玩儿的点,因为返回值是具名的,所以我们r...阅读全文

CSDN博客 2017-01-01 16:27 V_code

Alpha Go、Master为什么会下围棋

简单的说Alpha Go、Master就是一个函数y = f(x),x是当前棋子位置,y是x的应对棋子落位,也就是说下一步棋的位置,由于棋类的对抗性,显然y是对x最不利的一步走法。 假定有N个棋谱,每个棋谱有K步棋( 1<= k <361),当输入第1个棋谱的第一步棋时,使用y=f(x)计算,y就是Alpha Go、Master计算出来的第2步棋的落子位置,由于函数f没有学习好全部棋谱,所以y不是正确的走法,与棋谱中第2步棋比较有偏差,学习的目的就是让这个偏差最小趋近于零。Alpha Go、Ma...阅读全文

开源中国博客 2017-01-06 10:00:01 量子世界的我

Go调试利器

package main import ( "os/signal" "os" "syscall" "fmt" "runtime" "time" ) // kill -SIGUSR1 pid func main() { time.Sleep(time.Hour) } func dumpStacks() { buf := make([]byte, 16384) buf = buf[:runtime.Stack(buf, true)] fmt.Printf("=== BEGIN goroutine s...阅读全文

开源中国博客 2017-01-05 18:00:01 Kevin-air