go Notepad++ 语法高亮

go 自带了notepad++的语法高亮配置,只需要在notepad++里导入即可: 1. 打开go的安装目录misc\notepadplus下的userDefineLang.xml,把开头的<NotepadPlus>和结尾的</NotepadPlus>的注释取消掉 2. 把misc\notepadplus目录下的go.xml放到notepad++安装目录下的plugins\APIs目录里 3. 打开notepad++,菜单:语言=>Define you language,在弹出的对话框里导入刚...阅读全文

博客园 2014-10-29 18:59 yumuxu

Go语言 字符串

在所有编程语言中都涉及到大量的字符串操作,可见熟悉对字符串的操作是何等重要。 Go中的字符串和C#中的一样(java也是),字符串内容在初始化后不可修改。 需要注意的是在Go中字符串是有UTF-8编码的,请注意保存文件时将文件编码格式改成UTF-8(特别是在windows下)。 初始化 var str string //声明一个字符串 str = "laoYu" //赋值 ch :=str[0] //获取第一个字符 len :=len(str) //字符串的长度,len是内置函数 ,len=5 ...阅读全文

博客园 2014-10-29 00:18 ghgyj

深入学习golang(4)—new与make

Go语言中的内建函数new和make是两个用于内存分配的原语(allocation primitives)。对于初学者,这两者的区别也挺容易让人迷糊的。简单的说,new只分配内存,make用于slice,map,和channel的初始化。 1. new 这是一个用来分配内存的内建函数,但是与C++不一样的是,它并不初始化内存,只是将其置零。也就是说,new(T)会为T类型的新项目,分配被置零的存储,并且返回它的地址,一个类型为*T的值。在Go的术语中,其返回一个指向新分配的类型为T的指针,这个指...阅读全文

博客园 2014-10-29 10:46 luckcs

golang(Go语言)实现微信公众平台

/*640*60,创建于2013-5-24*/ var cpro_id = "u1290382"; 这个不是全部的代码哦,只是一个演示可以验证跟接受post传过来的消息并且能返回消息,中间的回复逻辑就待需要各位同志们自己写了哈 /* *@author widuu *@time 2013-7-19 *@go语言实现公众平台 */ package main import ( "crypto/sha1" "encoding/xml" "fmt" "io" "io/ioutil" "log" "net/...阅读全文

微度网络 2013-07-19 widuu

golang: 详解interface和nil

golang的nil在概念上和其它语言的null、None、nil、NULL一样,都指代零值或空值。nil是预先说明的标识符,也即通常意义上的关键字。在golang中,nil只能赋值给指针、channel、func、interface、map或slice类型的变量。如果未遵循这个规则,则会引发panic。对此官方有明确的说明:http://pkg.golang.org/pkg/builtin/#Type golang中的interface类似于java的interface、PHP的interfa...阅读全文

博客园 2014-10-29 10:45 luckcs

基于Go的D-Bus框架(二)

D-Bus 核心定义了一套自省机制,这个自省跟面向对象里的自省有点类似,即可以在运行时查询对象的相关信息,包括接口和属性等。大部分支持 D-Bus 的程序都实现了 org.freedesktop.DBus.Introspectable 这个标准接口,为它们导出的对象提供自省支持。这个接口只有一个方法 Introspect,它返回对象的XML格式描述。 go.dbus 给出了一个示例,server.go:package main import ( "fmt" "github.com/guelfey...阅读全文

CSDN博客 2014-07-24 22:40 mathmonkey

[go语言]初学者需要注意的问题-变量的作用域

go语言支持多变量同时赋值或者初始化,这是一个很方便的特性。它也允许使用:=操作符同时声明部分新变量,并且给已有变量赋值,这会带来一些需要注意的问题,一不小心就产生bug。 看一段代码: package main import "fmt" func main(){ a, b := 1, 2 b, c := 3, 4 fmt.Println(a, b, c) } 这里“b, c:= 3, 4”语句是给已有变量b赋值,同时把一个新变量c初始化为4,因此程序的输出结果是: 1 3 4 但是如果这行语句...阅读全文

新浪博客 2012-11-25 02:00 stevewang

Go开发工具

1.4 Go开发工具 本节我将介绍几个开发工具,它们都具有自动化提示,自动化fmt功能。因为它们都是跨平台的,所以安装步骤之类的都是通用的。 LiteIDE LiteIDE是一款专门为Go语言开发的跨平台轻量级集成开发环境(IDE),由visualfc编写。 图1.4 LiteIDE主界面 LiteIDE主要特点: 支持主流操作系统 WindowsLinuxMacOS X Go编译环境管理和切换 管理和切换多个Go编译环境支持Go语言交叉编译 与Go标准一致的项目管理方式 基于GOPATH的包浏...阅读全文

CSDN博客 2013-05-16 19:19 e_wsq

Go语言的指针 & *

Go语言保留着C中值和指针的区别,但是对于指针繁琐用法进行了大量的简化,引入引用的概念。所以在Go语言中,你几乎不用担心会因为直接操作内寸而引起各式各样的错误。Go语言的指针,基本上只剩下用于区分 byref 和 byval 语义。 运算符就是简单的 & 和 * 一个取地址、一个解析地址。 package main import( "fmt" ) func main(){ var i int // i 的类型是int型 i=1 // i 的值为 1; var p *int // p 的类型是[i...阅读全文

博客园 2013-02-28 11:57 ghj1976

[go语言]初学者需要注意的问题-map

1.直接对map对象使用[]操作符获得的对象不能直接修改状态 package main func main() { type person struct {age int} m := map[string]person{"steve":{10}} m["steve"].age = 100 // 编译错误:cannot assign to m["steve"].age } 2.通过查询map获得的对象是个拷贝,对此对象的修改不能影响原有对象的状态 package main func main() ...阅读全文

新浪博客 2012-11-22 10:19 stevewang

[go语言]channel的一个“奇怪”特性

go语言的channel有一个看上去很奇怪的特性,就是如果向一个为空值(nil)的channel写入或者读取数据,当前goroutine将永远阻塞。例如 func main() { var ch chan int ch <- 1 // block forerver } func main() { var ch chan int <-ch // block forerver } func main() { <-chan int(nil) // block forerver } func main(...阅读全文

新浪博客 2012-11-17 23:14 stevewang

[go语言]Russ Cox回应“Why I'm not leaving python for go”

注:这是Russ Cox解释Go错误和异常机制的一篇文章[1],网上已经有翻译文章[2],但是我认为有一些错误和不够准确的地方,所以自己花了一些时间又翻译了一遍。 [1]https://plus.google.com/116810148281701144465/posts/iqAiKAwP6Ce [2]http://www.aqee.net/response-to-why-im-not-leaving-python-for-go/ 以下是译文: 我收到了许多邮件,这些邮件提到最近一篇名为“为什么...阅读全文

新浪博客 2012-11-15 13:29 stevewang

golang sync.Pool

Go 1.3 的sync包中加入一个新特性:Pool。 官方文档可以看这里http://golang.org/pkg/sync/#Pool 这个类设计的目的是用来保存和复用临时对象,以减少内存分配,降低CG压力。 type Pool func (p *Pool) Get() interface{} func (p *Pool) Put(x interface{}) New func() interface{} Get返回Pool中的任意一个对象。 如果Pool为空,则调用New返回一个新创建的对...阅读全文

开源中国博客 2014-10-29 00:30 seago123

Go程序GC优化经验分享

作者:达达 来源:http://1234n.com/?post/yzsrwa 最近一段时间对《仙侠道》的服务端进行了一系列针对GC的调优,这里跟各位分享一下调优的经验。 游戏第一次上线的时候,大部分精力都投入在做cpuprof和memprof找性能瓶颈和内存泄漏上,没有关注过Go的GC运行情况。 有一次cpuprof里的scanblock调用所占的比例让我注意到Go的GC所带来的性能消耗,记得那份cpuprof里,scanblock调用占到49%。也就是说有一半的CPU时间浪费在了GC上。 于是...阅读全文

CSDN博客 2014-10-29 00:18 LvanNeo

Go 1.4+垃圾收集器计划与路线图

自从Go语言于2009年11月对外宣布以来,短短几年时间,这门语言发展迅猛,性能也在不断提升,而垃圾收集器的改进正是其中的重要一环。 在Go 1.1中,Go语言引入了并行垃圾收集器,可以减少程序在多CPU上运行时的延迟;同时垃圾收集也更为精确了,以牺牲较少的CPU时间为代价,换来了堆内存的显著减少。到了今年6月份发布的Go 1.3中,精确性有所改进,又实现了检查栈上的值时的精确性。 那后续版本中,垃圾收集器会有怎样的变化呢?Richard L. Hudson近日撰文介绍了Go 1.4+垃圾收集器...阅读全文

CSDN博客 2014-08-19 20:41 codemanship

Go语言的10个实用技术

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

CSDN博客 2014-09-18 13:20 codemanship

使用Go语言一段时间的感受

最近在忙一个Server+Client的项目,Client是Android手机,大概也就是几十的规模。Server是纯Go语言实现,没有apache或者ngix这种web server,也没有数据库,自己写了个文件管理module,处理这种小规模的服务没问题。算下来接触Go语言也有四个多月了,断断续续写了一些东西,这里记录一下心得吧。 先大概说下为什么用Go语言。我是一个对语言有洁癖的人,曾经是一个c+Python的坚定呐喊者,最常说的一句话就是,只要熟练这两种,什么情况都能应付,根本不用Jav...阅读全文

CSDN博客 2013-11-08 11:04 Mr_Data_Mining

[go语言]使用defer和有名返回值,实现初始化失败的自动回滚

稍微复杂一些的程序的初始化会涉及到多个模块,任何一个模块初始化失败以后,就应该把已经初始化的其他模块一一回滚。这容易使得初始化的错误处理比较冗长,包含重复代码;或者执行路径跳转不容易读懂,也容易出错。用go语言提供的defer和有名返回值的机制,可以比较容易地解决这个问题,让初始化错误处理简洁清晰。 先看看一种常见的错误处理代码: func Initialize() error { var err error err = init_a() if err != nil { return err }...阅读全文

新浪博客 2012-11-08 16:42 stevewang

在ubuntu上搭建go编程环境(附带自动化部署脚本)

自2009年Go语言发布以来,我一直在关注Go语言,如今Go语言已经发展到1.2版本,而且也收到越来越多的人关注这门语言。Go语言设计的目的就是为了解决执行数度快但是编译数度并不理想(如C++)以及编译速度快但执行效率不佳(.NET、Java),或者开发难度低但执行速度一般的动态语言这一问题。所以说,Go语言的特点是:快速编译,高效执行,易于开发。 好了,跳过那些框框条条的craps, 让我们直接先从Go语言的环境搭建开始,由于最近偏爱Ubuntu,在加上作为一门开源语言,在Linux上从源代码...阅读全文

CSDN博客 2014-10-28 15:58 trochiluses

[go语言]goroutine的一种使用场景

近日在使用go语言写一个文件转换的工具,使用到了goroutine来提高处理效率。在写代码的过程中,对goroutine的使用方式经历了三个版本的变动,我觉得有必要记录和总结一下,也需要不断思考怎么样才是用go语言的思考去写go语言代码。Write your Go code in a Go way. 目的:遍历一个目录及其子目录,把某些特定文件转换到另外一种文件保存到指定目录下。因为文件可能有很多,不想每个文件都对应一个goroutine一下子有非常多goroutine。毕竟CPU的核是固定数量...阅读全文

新浪博客 2012-11-08 12:35 stevewang