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

驳狗屎文 "我为什么放弃Go语言"

驳狗屎文 “我为什么放弃Go语言” 此篇文章流传甚广, 其实里面没啥干货, 而且里面很多观点是有问题的. 这个文章在 golang-china 很早就讨论过了.最近因为 Rust 1.0 和 1.1 的发布, 导致这个文章又出来毒害读者.所以写了这篇反驳文章, 指出其中的问题. 原文链接:http://blog.csdn.net/liigo/article/details/23699459 有好几次,当我想起来的时候,总是会问自己:我为什么要放弃Go语言?这个决定是正确的吗?是明智和理性的吗?其实我一直在认真思考这个问题。 开门见山地说,我当初放弃Go语言(golang),就是因为两个“不爽”:第一,对Go语言本身不爽;第二,对Go语言社区里的某些人不爽。毫无疑问,这是非常主观的结论。但是我...阅读全文

博文 2015-06-30 18:17 chai2010

go的优缺点

1.1 不允许左花括号另起一行1.2 编译器莫名其妙地给行尾加上分号1.3 极度强调编译速度,不惜放弃本应提供的功能1.4 错误处理机制太原始1.5 垃圾回收器(GC)不完善、有重大缺陷1.6 禁止未使用变量和多余import1.7 创建对象的方式太多令人纠结1.8 对象没有构造函数和析构函数1.9 defer语句的语义设定不甚合理1.10 许多语言内置设施不支持用户定义的类型1.11 没有泛型支持,常见数据类型接口丑陋1.12 实现接口不需要明确声明1.13 省掉小括号却省不掉花括号1.14 编译生成的可执行文件尺寸非常大1.15 不支持动态加载类库 Go语言的优点:并发/网络/性能/工具(fmt/pprof/test)/标准库(http/json/log/flags/atomic)/Go...阅读全文

博文 2015-02-13 05:37 findumars

理解Golang包导入

自:http://tonybai.com/2015/03/09/understanding-import-packages/ Golang使用包(package)这种语法元素来组织源码,所有语法可见性均定义在package这个级别,与Java 、python等语言相比,这算不上什么创新,但与C传统的include相比,则是显得“先进”了许多。 Golang中包的定义和使用看起来十分简单: 通过package关键字定义包: package xxx 使用import关键字,导入要使用的标准库包或第三方依赖包。 import "a/b/c" import "fmt" c.Func1() fmt.Println("Hello, World") 很多Golang初学者看到上面代码,都会想当然的将imp...阅读全文

博文 2015-06-03 11:53 sevenyuan

Golang计算MD5

Golang计算MD5 1.单向加密 什么是单向加密算法。简而言之就是不可解密的加密方法,也叫作非可逆加密。这些学术 解释都不用管它,反正就是一群数学家老爷爷通过各种证明得到的一种方法,用这种方法加密 过的东西,地球上现有的人类在有限的时间内是无法解密的,包括加密者自己。既然加密者自己 都无法解密,那这乖僻的加密算法有个毛用阿?哪些场景需要这种有去无回的加密方式呢? 这里先了解下单向加密的特征: 首先,不可解密性在上面已经提到了,目的就是掩藏明文。其次单向加密算法的另外两个特征 使得它更接地气,第一是任意两段明文数据,加密以后的密文不能是相同的; 第二是任意一段明文数据,经过加密以后,其结果必须永远是不变的。这样当我们需要表征一段 唯一的内容,但是有不想别人知道该段内容时或者仅仅是为一个内容...阅读全文

博文 2014-12-30 11:28 YangJunjie

还有比这更好的消息吗?— Go支持Android和iOS

minux大神就说了: 代码在 https://bitbucket.org/minux/goios 的 ios3 分支。 初步的文档在 misc/ios/README。交叉编译需要 iOS SDK,得在 OS X 上面开发。理论上如果你能在 Linux 架设交叉编译环境的话,在 Linux 上开发也不是不行。 我计划把这个 port 加入到 Go 1.5。按照 Brad 给出的 1.5 预览, 应该问题不大。http://talks.golang.org/2014/state-of-the-gopher.slide#40 现在的问题是如何架设 builder。 哎,断断续续搞了3年,终于搞定了。我觉得用 Go 开发 iOS 程序比用 Go 开发 Andro...阅读全文

Go编码规范指南

自http://golanghome.com/post/550 Go编码规范指南 序言 看过很多方面的编码规范,可能每一家公司都有不同的规范,这份编码规范是写给我自己的,同时希望我们公司内部同事也能遵循这个规范来写Go代码。 如果你的代码没有办法找到下面的规范,那么就遵循标准库的规范,多阅读标准库的源码,标准库的代码可以说是我们写代码参考的标杆。 格式化规范 go默认已经有了gofmt工具,但是我们强烈建议使用goimport工具,这个在gofmt的基础上增加了自动删除和引入包. go get golang.org/x/tools/cmd/goimports 不同的编辑器有不同的配置, sublime的配置教程:http://michaelwhatcott.com/gosublime-goi...阅读全文

博文 2014-12-14 22:45 hittata

Golang中操作[]byte类型的Trim函数

在Golang中字符串的一个坑这篇博文中,介绍了Golang中字符串与C中的字符串的不同之处:C中的字符串是以\x0为结尾的字节序列,而Golang中的字符串则更严格,并不是以\x0为结尾来判断,而是计算字符串变量的值中的所有字节。 Golang中的字符串在打印时,因为\x0是不可打印字符,所以和C中的字符串在打印时没有任何区别。但是在一些需要按字节计算字符串的函数中,就会导致问题。通用的做法是,迭代字符串,只取得字节序列中的有效字节。 我们可以写一个函数来做这件事情,也可以用Golang的标准库中的bytes库。bytes库提供了对[]byte类型的操作,提供的接口和对string类型提供的接口类似。 bytes提供了有Compare、Count、Equal、Index、Join、Spli...阅读全文

博文 2014-03-10 23:47:03 华子

go web应用的部署和热更新

### 序言 Golang标准库的http部分提供了强大的web应用支持,再加上negroni等中间件框架的支持,可以开发高性能的web应用(如提供Restful的api服务等)。 通常这些web应用部署在多台Linux操作系统的应用服务器上,并用Nginx等做为反向代理,实现高可用的集群服务。 当应用版本升级时,如何实现比较优雅的多态服务器的版本更新呢?我google、baidu了一下,也许我输入的关键字不对,也许这对很多人不是个问题,反正我是没有找到完整的方案。 ### 问题 Web应用的更新,我觉得可能需要考虑几个方面的问题: * 编译好的应用二进制文件、配置文件上传到服务器上; * 应用服务器能感知到有新的版本上传; * 在没有停止服务的情况下,热更新...阅读全文

go第三方库的安装例子

go第三方库的安装 设置环境变量GOPATH=c:\go\code 在c:\go\code下创建源代码目录src 进入c:\go\code\src 装第三方库命令 git clone git://github.com/alphazero/Go-Redis.git redis 可以在任意目录执行安装redis go install redis 安装后再c:\go\code目录下生成一个pkg目录并且在目录下生成redis.a 可以在在c:\go\code\src下生成目录文件xn 结构如下 文件内容如下 xn.go package xn import ( "fmt" ) func Helloworld(){ fmt.Println("xn包内的Helloeorld函数") } func xx(...阅读全文

博文 2014-11-25 21:18 anlun

Go语言发展状况和前景

在2015年10月16日,技术大牛许式伟做了有关Go语言发展状况的演讲。 “ 1 大纲 . Go语言语法及标准库变化 . Go语言未来发展的判断 . Go语言开源项目 1.1Go语言语法及标准库变化 1.1.1 Go1.1 • 语言变化 – 支持方法值(Method values) •p.Write 等价于: func(b []byte) (int, error) { return p.Write(b) } •区别于方法表达式(Method expressions): (*Foo).Write,结果类型为 func(p *Foo, b []byte) (int, error) – int,uint 类型长度调整 •自 Go1.1 后,int,uint 的尺寸统一是 64bits,即使是在 3...阅读全文

博文 2016-03-02 10:52 GreatElite

Go1.5 改进摘要

Go1.5 改进简介 纯Go(+少量汇编)实现 runtime 和 编译器 改进 垃圾回收器, 支持 并发 (有个指标好像是 停顿在 10 毫秒以内). GOMAXPROCS 默认值改为 CPU 核数 internal 限制规则推广到第三方包 (之前只有 std 包启用) 增加 vendor 支持, 基本解决 第三方库的依赖问题和版本问题 增加 trace 命令, 更友好的剖析程序运行状态 增加 go doc 命令 语法变化 增加 map 字面量. 以前的代码: m := map[Point]string{ Point{29.935523, 52.891566}: "Persepolis", Point{-25.352594, 131.034361}: "Uluru", Point{37.4...阅读全文

博文 2015-07-08 15:56 chai2010

golang技术随笔(一)深入理解interface

Go语言的主要设计者之一罗布·派克( Rob Pike)曾经说过,如果只能选择一个Go语言的特 性移植到其他语言中,他会选择接口。可见接口在golang中的地位,及其对gloang这门语言所带来的活力。 golang中的interface是什么 接口相当于是一份契约,它规定了一个对象所能提供的一组操作。要理解golang中接口的概念我们最好还是先来看看别的现代语言是如何实现接口的。 C++没有提供interface这样的关键字,它通过纯虚基类实现接口,而java则通过interface关键字声明接口。它们有个共同特征就是一个类要实现该接口必须进行显示的声明,如下是java方式: interface IFoo { void Bar(); } class Foo implements IFoo ...阅读全文

博文 2015-01-26 19:13 justaipanda

Go 中使用 INI 作为配置文件

想必大家都用过 Go 标准库中的 flag 包, 这个是一个十分好用的命令行参数解析库, 但是标准库中并没有关于配置文件解析的包, 官方一般是使用 json 作为配置文件的, 但是对于一些比较简单的情况, 没有复杂的嵌套的情况, 使用 json 作为配置文件, 书写起来还是有点麻烦 (主要是花括号和冒号引号什么的). 于是, 正好有一个项目需要实现一个读取ini配置文件的模块, 我就按照类似 flag 的 api 写了一个 ini parser. 1 go get -u github.com/c4pt0r/ini 使用方法: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 package main import ( "log" "github....阅读全文

博文 Oct 6th, 2014 12:00 pm c4pt0r

Golang程序配置方案小结

Golang程序配置方案小结 七 01 bigwhite技术志 Bool, cobra, config, Cpp, Education, flag, getopt, Go, Golang, ini, Java, json, multiconfig, Perl, POSIX, Ruby, Shell, TOML, twitter, viper, Windows, 命令行选项, 标准库, 配置文件 No Comments 在Twitter上看到一篇关于Golang程序配置方案总结的系列文章(一个mini series,共6篇),原文链接:在这里。我觉得不错,这里粗略整理(非全文翻译)一下,供大家参考。 一、背景 无论使用任何编程语言开发应用,都离不开配置数据。配置数据提供的形式有多样,不外乎命令...阅读全文

golang 标准库io/ioutil,读取文件,生成临时目录/文件

1.读取目录 list, err := ioutil.ReadDir("DIR")//要读取的目录地址DIR,得到列表 if err != nil { fmt.Println("read dir error") return } for _, info := range list { //遍历目录下的内容,获取文件详情,同os.Stat(filename)获取的信息 info.Name()//文件名 info.Mode()//文件权限 info.Size()//文件大小 info.ModTime()//文件修改时间 info.Sys()//系统信息 if info.IsDir() == true { fmt.Println("是目录") } } 2.读取文件 data, err := iou...阅读全文

博文 2015-03-17 10:31 benlightning

go get安装第三方包的前提条件和步骤

自:http://studygolang.com/articles/5796 首先,你要找到第三方类包所在的网址, 例如: http://github.com/go-sql-driver/mysql 分为命令行自动安装 和 手动下载 然后安装。 ( 欢迎加入go语言群: 218160862 ,群内有实践) 一、通过 go get github.com/go-sql-driver/mysql 命令安装第三方类库 要启用 go get github.com/go-sql-driver/mysql 命令, 首先必须设置环境变量GOPATH的路径、并且安装git for windows!!! 否则 go get 命令不起作用。 1. 设置 GOPATH 环境变量, 并且这个GOPATH 变量里面的路...阅读全文

博文 2016-01-25 15:49 bluehawksky

Go语言框架、函数库和软件及资源干货大全

【Go语言框架、函数库和软件及资源干货大全】继Ziadoz推出Awesome PHP:[https://github.com/ziadoz/awesome-php](https://github.com/ziadoz/awesome-php)、Vinta推出Awesome Python:[https://github.com/vinta/awesome-python](https://github.com/vinta/awesome-python) 之后,Avelino 再推Awesome-Go:[https://github.com/avelino/awesome-go](https://github.com/avelino/awesome-go) 。对三种语言,GitHub上这三个项目收...阅读全文

golang原子库atomic

package atomic import ( "unsafe" ) // BUG(rsc): On x86-32, the 64-bit functions use instructions unavailable before the Pentium MMX. // // On non-Linux ARM, the 64-bit functions use instructions unavailable before the ARMv6k core. // // On both ARM and x86-32, it is the caller's responsibility to arrange for 64-bit // alignment of 64-bit words acce...阅读全文

博文 2015-07-28 19:01 webyh

Golang把所有包括底层类库,输出到stderr的内容, 重新定向到一个日志文件里面?

不论应用是如何部署的,我们都期望能扑捉到应用的错误日志, 解决思路: 自己写代码处理异常拦截,甚至直接在main函数中写异常拦截。 stderr重定向到某个文件里 使用 syscall.Dup2 第一种方法比较简单, 我们这里主要看后两种: 使用 stderr替换的代码: package main import ( "fmt" "os" ) func main() { f, _ := os.OpenFile("C:\\tmp\\11.txt", os.O_WRONLY|os.O_CREATE|os.O_SYNC, 0755) os.Stdout = f os.Stderr = f fmt.Println("fmt") fmt.Print(make(map[int]int)[0]) } 这里的...阅读全文

博文 2015-02-06 09:25 ghj1976

Go 1.5 计划启动,使用 Go 来编译 Go

Go 项目组发布了 Go 1.5 的计划,Go 1.5 将使用 Go 1.4 进行构建,Go 源码树将完全消除所有 C 的代码。移除 C 编译器 (5c,6c,8c,9c)。剩下的 C 程序将转成 Go 语言,包括 [Go compilers](http://golang.org/s/go13compiler), [汇编器和连接器](http://golang.org/s/go13linker) 以及 cmd/dist. 如果这些程序都采用 Go 编写,这会引发一个在完整构建源码的启动问题 —— 你需要一个可用的 Go 工具链来构建 Go 工具链。 为了构建 Go 1.x (x ≥ 5),需要先安装 Go 1.4 到 $GOROOT_BOOTSTRAP. 默认的 $GOROOT_BOO...阅读全文

Go语言内幕(1):主要概念与项目结构

本文由 伯乐在线 - yhx 翻译,唐尤华 校稿。未经许可,禁止转载!英文出处:Sergey Matyukevich。欢迎加入翻译组。这个系列博客主要为那些对 Go 基本知识已经有一定了解,又希望对其内部细节进行更深一步地探索的人准备的。今天这一篇主要分析 Go 源代码的基本结构以及 Go 编译器的某些内部细节。读完这篇博客后,你会得到下面三个问题的答案: 1. Go 源代码结构是什么样子的? 2. Go 编译器是如何工作的? 3. Go 语言中的结点树的基本结构是什么样的? 让我们开始吧 每当开始学习一门新编程语言的时候,你总是可以找到大量的 “hello world” 教程、新手指南或者关于语言的主要概念、语法甚至标准库的文档。然而,当你想找一些介绍得更加深入的资料,比如语言运行时分配的...阅读全文

go中包的概念、导入与可见性

包是结构化代码的一种方式:每个程序都由包(通常简称为 pkg)的概念组成,可以使用自身的包或者从其它包中导入内容。 如同其它一些编程语言中的类库或命名空间的概念,每个 Go 文件都属于且仅属于一个包。一个包可以由许多以 .go 为扩展名的源文件组成,因此文件名和包名一般来说都是不相同的。 你必须在源文件中非注释的第一行指明这个文件属于哪个包,如:package main。package main表示一个可独立执行的程序,每个 Go 应用程序都包含一个名为 main 的包。 一个应用程序可以包含不同的包,而且即使你只使用 main 包也不必把所有的代码都写在一个巨大的文件里:你可以用一些较小的文件,并且在每个文件非注释的第一行都使用 package main 来指明这些文件都属于 main 包...阅读全文

博文 2016-05-23 11:53 Ellon-Daris

分布式 SQL 数据库 TiDB

TiDB 是国内 PingCAP 团队开发的一个分布式 SQL 数据库。其灵感来自于 Google 的 [F1](http://research.google.com/pubs/pub41344.html), TiDB 支持包括传统 RDBMS 和 NoSQL 的特性。 **TiDB 的源码已经托管在 Git@OSC 上,详情请查看:** [http://git.oschina.net/pingcap/tidb](http://git.oschina.net/pingcap/tidb) 架构: ![architecture](http://static.oschina.net/uploads/img/201509/06141432_Fsmo.png) 特性: [](http...阅读全文

开源项目 2015-09-06 00:00:00 pingcap

Go1.5 尚未实现的Todolist

1.5的代码将在5月1日冻结,go team官方给出了在1.5中尚未实现的Todolist,但并不承诺后续一定会实现。[ Todolist 文档查看](http://pan.baidu.com/s/1mgxciHa)。其中有一项“shared library support ”,看来go有意向支持动态链接库了! Go 1.5 code freeze is May 1, 2015; release is August 1, 2015. This is a list of things we’re hoping will be in Go 1.5 but are not yet done. For the list of things that are done, see do...阅读全文

go和node.js的对比

go: Golang的诞生有着很强的目的性,所以根基显得非常的沉稳,语言未来针对高性能,高并发的优化也更得心应手。更主要Golang可以切实的解决实际问题,并在内存与CPU使用上大幅优于node。为此,针对有大量请求的服务端,Golang是个不错的选择。 从大型工程的角度来说,go 是完爆 Node 的。性能,内存开销,静态类型,对异步的处理,异常的处理,可调试性,系统稳定度,工具链的成熟度,等等,都是 go 占优。 Go的目标是希望提升现有编程语言对程序库等依赖性(dependency)的管理,这些软件元素会被应用程序反复调用。由于存在并行编程模式,因此这一语言也被设计用来解决多处理器的任务。使用Go编译的程序可以媲美C或C++代码的速度,而且更加安全、支持并行进程。 Node.js No...阅读全文

用 Go 写了个类似 Rails ActiveRecord 的 ORM 库, gorm

目前支持的功能有 * CURD * Chainable API * Before/After Create/Save/Update/Delete Callbacks * Order/Select/Limit/Offset Support * Update, Updates Like Rails's update_attribute, update_attributes * Dynamically set table name when search, update, delete... * Automatically CreatedAt, UpdatedAt * Soft Delete * Create table from struct * Prevent SQL ...阅读全文

主题 2013-10-29 14:01:59 jinzhu

阅读 valyala/fasthttp —— 比官方库更快的 HTTP 包

valyala/fasthttp 是号称比官方net/http库更快的 http server 库。就去顺便研究了,发现一些细节的不同。 处理 net.Conn 的 goroutine 处理net.Conn的goroutine的使用方式,和标准库有很大差别。在标准库,net.Listener.Accept() 到一个连接,就会开启一个goroutine: // Serve accepts incoming connections on the Listener l, creating a // new service goroutine for each. The service goroutines read requests and // then call srv.Handler to...阅读全文

博文 2015-11-25 14:49:15 傅小黑

最近在写一本书——《Golang标准库》

之前写过一序列Golang标准库学习的博文,感觉掌握标准库的用法还是挺重要的,于是,最近开始着手写一本书《Golang标准库》,可以直接在线看:https://github.com/polaris1119/The-Golang-Standard-Library-by-Example。目前已经完成了第一章的两个小节。 之前没有写过书,写的不好的地方望gopher们多多提意见...阅读全文

go-sql-driver包 实现mysql不定字段查询

go-sql-driver包是一个第三方包 下载地址http://github.com/go-sql-driver/mysql 下面直接上代码 package main import ( "database/sql" "fmt" _ "github.com/go-sql-driver/mysql" ) func main() { //连接数据库 db, err := sql.Open("mysql", "root:@tcp(localhost:3306)/go?charset=utf8") if err != nil { fmt.Println("连接数据库失败", err.Error()) return } defer db.Close() //查询数据库 query, err := db...阅读全文

博文 2014-10-16 23:46 别人说我名字很长

golang 标准库 container/ring 及 container/heap

由于目前golang 没有提供泛型机制,所以通用容器实现基本和 c 类似,golang 用 interface{} 做转接, c 用 void * 转接。 ring 包实现循环双向链表: type Ring struct { next, prev *Ring Value interface{} } 内部导出一个用户可以操作的Value 字段。 heap 包实现 binary heap : type Interface interface { sort.Interface Push(x interface{}) // add x as element Len() Pop() interface{} // remove and return element Len() - 1. } heap.I...阅读全文

博文 2015-03-18 13:57 yujian0231

golang -- 网络字节编解码(2)

以下是利用标准库binary来进行编解码 解码 ①使用bytes.NewReader/bytes.Buffer来存储要解码的ascii串 ②使用binary.Read来解码 package main import ( "bytes" "encoding/binary" "fmt" ) func main() { var pi float64 bpi := []byte{0x18, 0x2d, 0x44, 0x54, 0xfb, 0x21, 0x09, 0x40} buf := bytes.NewReader(bpi) err := binary.Read(buf, binary.LittleEndian, &pi) // 这里可以继续读出来存在变量里, 这样就可以解码出来很多, 读的次序和变...阅读全文

Go的Qt图形库绑定 GoQt

**GoQt** ** 简介 ** GoQt是Go语言的Qt图形库绑定。 * 版本 0.1 * 作者 七叶 ** 试验 ** 目前该项目为试验状态 ** 关于GoQt ** GoQt是一个Go语言的GUI工具包。它允许程序员使用Go语言更加容易的构建功能丰富的图形界面应用程序。GoQt使用cgo代码封装了流行的Qt跨平台GUI库。类似Golang和Qt,GoQt是开源的,其中Qt绑定动态库qtdrv使用LGPL协议,Go语言的ui库则使用BSD协议。 ** 平台支持 ** ### System * Windows x86 (32-bit or 64-bit) * Linux x86 (32-bit or 64-bit) * Ma...阅读全文

开源项目 2015-12-29 00:00:00 网友

golang 中AES加密详解

golang标准库中对于aes加密的阐述得非常简洁,如果没有一定的密码学基础知识,是很容易迷惑的。 本文将完整地介绍aes加密的基本知识,并分析网络上常见的调用实例。 块密码的工作模式简洁 主要摘抄自wikipedia:块密码的工作模式 基本概念 密码学中,块密码的工作模式(英语:mode of operation)允许使用同一个块密码密钥对多于一块的数据进行加密,并保证其安全性。 块密码自身只能加密长度等于密码块长度的单块数据,若要加密变长数据,则数据必须先被划分为一些单独的密码块。通常而言,最后一块数据也需要使用合适填充方式将数据扩展到符合密码块大小的长度。 一种工作模式描述了加密每一数据块的过程,并常常使用基于一个通常称为初始化向量的附加输入值以进行随机化,以保证安全。 常见的模式有E...阅读全文

博文 2016-06-15 17:07 xiaohu50

D、GO、Rust 谁会在未来取代 C?为什么?——Go语言的定位非常好,Rust语言非常优秀,D语言也不错

不要管我的地位和 D 语言创造者之一的身份。我会坦诚的回答这个问题。我熟悉 Go 和 Rust,并且知道 D 的缺点在哪里。我鼓励人们在 Rust 和 Go 社区相似身份的人,也可以提出他们诚恳的观点。接着,我们开始吧。 首先,C++ 在这个问题中也应该被提及。不管它是否取代 C,或是成为取代 C 的候选人之一,C++ 是这个等式的一个关键部分。它是最接近 C 的,同时也是从 C 中来的。在下面几个问题中我会假设 C++ 是把取代 C 作为目标的。每一个语言都有一些基础优势(我称之为“十倍优势”,因为在一定的基准上比其他打确实效率更高)和数个挑战。这些语言在未来能否取代 C 语言,取决于它们如何利用它们的十倍优势,并且如何克服他们的数个挑战。 你是晴天翻译于 2周前 0人顶 顶 翻译的不错哦...阅读全文

博文 2015-11-23 03:54 findumars

使用Go语言工作400天后的感受

我在2011年就听说了Go并学习了一段时间,坦白的说,那时候对Go是比较无感的,因为并没有看到Go特别亮眼的地方,可能和我使用C、Erlang、Java有关,这三种语言可以写高性能、高并发、高可用的服务;包含了面相过程、面向并发、面向对象的思想,我觉得我并不需要再学习Go,何况那个时候好像也没宣传的那么优秀。 一切都发生在418天前,因为工作的需要,我开始写Go了,本来预期是一段压抑、蛋疼的旅程(被迫使用其它语言的同学可能都会有此感受),结果收获了非一般的惊喜、非一般的效率、非一般的开发体验。 先用几个词来总结一下我的感受:简洁、标准、组合、创造力、生产力! 特别是生产力,由于Go优秀的标准库、完美的代码安全、全面的三方库、完善的测试机制、完善的标准管理工具,使用Go给我们小组带来了极大的生...阅读全文

博文 2016-03-28 15:04 erlib

基于 Golang 的 xls 读取类库:xls

Golang 编写的 xls 读取类库,能够实现 xls 表格的读取功能 func (w *WorkBook) ReadAllCells() (res [][]string) { for _, sheet := range w.Sheets { w.PrepareSheet(sheet) if sheet.MaxRow != 0 { temp := make([][]string, sheet.MaxRow+1) for k, row := range sheet.Rows { data := make([]string, 0) if len(row.Cols) > 0 { for _, col := range row.Cols { if uint16(len(data)) <= col....阅读全文

博文 2015-10-23 17:25 zhuiluoyu

搞定淘宝,京东 api调用返回的奇葩json格式

淘宝,京东的api调用返回的json格式跟golang的标准库encoding/json中的格式不兼容。 淘宝有些地方习惯性的把float数据加""变成字符串格式 比如 "delivery_score": "0.0", 文档上的又不一样 "delivery_score": 90, 京东的习惯是,不管是不是字符串类型都都加"",变成字符串类型的。 这样就造成标准库无法识别这些格式, 我把json拷贝出来,在decode.go文件的661行的literalStore函数种修改了:字符串处理方式代码如下: case '"': // string s, ok := unquoteBytes(item) if !ok { if fromQuoted { ...阅读全文

golang中defer的执行

golang中defer的执行 大家都知道golang的defer关键字,它可以在函数返回前执行一些操作,最常用的就是打开一个资源(例如一个文件、数据库连接等)时就用defer延迟关闭改资源,以免引起内存泄漏。例如: func do() (ok bool) { file,_ := os.Open("c:\a.txt") defer file.Close() // doSomething return ok } 我们可以在官方的文档中看到defer的执行顺序是逆序的,也就是先进后出的顺序: for i := 0; i < 5; i++ { defer fmt.Printf("%d ", i) } 打印结果是:4,3,2,1,0 那么再看这个例子: func deferRet(x,y int) ...阅读全文

博文 2014-03-13 20:39 wowzai

Go1.8正式发布

今天Go团队很高兴地宣布Go 1.8发布了。你可以从下载页面获得1.8版本。在这个版本中,整个标准库有显着的性能改进和变化。Go 1.7中为64位x86系统引入的编译器后端现在用于所有体系结构,在这些体系结构下可以看到显着的性能改进。例如,我们的基准程序所需的CPU时间在32位ARM系统上减少了20-30%。在此版本中,对于64位x86系统也有一些性能提升。编译器和链接器跑得更快。编译时间应该比Go 1.7缩短约15%。在这一领域还有更多的工作要做:希望未来版本的编译速度更快。垃圾收集暂停应明显更短,通常在100微秒以下,通常低至10微秒。HTTP服务器添加对HTTP/2 Push的支持,允许服务器向客户端推送。这对于消除网络延迟非常有用。 HTTP服务器还添加了对优雅停机的支持,允许服务器...阅读全文