Go 语言简介(上)— 语法
周末天气不好,只能宅在家里,于是就顺便看了一下Go语言,觉得比较有意思,所以写篇文章介绍一下。我想写一篇你可以在乘坐地铁或公交车上下班时就可以初步了解一门语言的文章。所以,下面的文章主要是以代码和注释为主。只需要你对C语言,Unix,Python有一点基础,我相信你会在30分钟左右读完并对Go语言有一些初步了解的。 Hello World 文件名 hello.go 1 2 3 4 5 6 7 package main //声明本文件的package名 import "fmt" //import语...阅读全文
Golang binary包——byte数组如何转int?
在C语言笔试的时候,比较喜欢考这个东西,如何将一个char数组转成int类型。当年看过,不过早就忘记了。后来看到这种东西binary.BigEndian.Uint32(a),直接瞎了。后来去看文档,看了半天也没搞明白。 在这里直接说一下,源码。下面这个是uint8,也就是byte数组,大小为4,转换成int32的代码。 package main import "fmt" import "encoding/binary" func main() { var a []byte = []byte{0,...阅读全文
常见哈希函数FNV和MD5
介绍哈希函数之前,先说一下Golang的哈希结果。在包/hash/下的hash.go文件,定义了哈希函数的接口。所有哈希函数都要实现此接口。 // Hash is the common interface implemented by all hash functions. type Hash interface { // Write (via the embedded io.Writer interface) adds more data to the running hash. // It ...阅读全文
Golang开发Thrift接口
三个月没在公司,回来后发现公司内部已经用上了facebook开源的Apache Thrift。大概看了一下介绍,传统接口编写是使用json或者xml作为信息格式进行传输。一般Web Service里面,SOAP这种,使用的就是xml(不过我从来没用过。。);而轻量级网络服务REST,则用的是json作为传输媒介。json相较于xml,传输的内容变少了许多,传输更加便捷。这两种都是基于HTTP的传输方式。 而Apache Thrift,是更加轻量级的Web Service。本科做网络游戏的时候也接...阅读全文
Golang 接口实现
面向对象程序语言已经是非常普及了。再过去的十几年内,面向对象的代表Java语句一直稳坐编程语言前三名的宝座。面向对象开发的学习,是每一个程序员的必修课。 对于我来说,学完C++和Java之后,看了一堆各种特性,却发现花了不少时间,项目却依然没啥功能。。。由于面向对象的引入,使得编程语言一下子多了好多语法特性,致使开发效率低下。尤其是像我这种学渣,体现得尤为明显。 后来,大家意识到一个问题:编程主要是用来解决一个问题,面向过程最符合人类正常的思维,也是最快的用来解决问题的方式;然而,在工程层面,面...阅读全文
go语言编程在windows下开发环境配置(图文)
1.在Go中文论坛下载最新的Go for windows release 2010-05-04 2.将下载包解压在c盘下。 3.设置环境变量。 Code: set goroot=c:/go set goarch=386 set path=c:/go/bin set goos=windows 4.编写第一个go语言程序代码。 Code: package main import "fmt" func main(){ fmt.Printf("this is first my/n go program"...阅读全文
Windows搭建Sublime Text 3 + Go开发环境
1. 安装Sublime Text 3 Sublime Text 3(以下简称ST)的下载与安装我就不说啦,目前还是一个测试版,不过据说比ST2增加了好多新功能,下载地址: http://www.sublimetext.com/3 ST3的破解还是挺方便的(ST你不仁,79刀还是多少刀啊,就别怪我不义啦),推荐朽木博客的方法: http://www.xiumu.org/note/sublime-text-3.shtml 这里说注意一下破解时要注意的: 以下是运行的注册机: 注意椭圆部分,要先点这...阅读全文
Go 环境搭建,LINUX/Windows
Go语言的hello world!代码: [java] view plaincopyprint? package main import "fmt" func main() { fmt.Println("Hello, 世界") } 接下来为大家带来,Go开发环境的安装。 首先是安装Go,这里有很详细的安装说明,http://code.google.com/p/golang-china/wiki/Install 或者http://golang.org/doc/install 下面我们在window...阅读全文
Golang 处理命令行启动参数
最近要做Apache Thrift相关的项目。大概看了一下,觉得不难。Thrift目前已经至此和Go语言了。照着官方提供的一个例子在学。周五搞了一上午,终于编译通过了。下午去读例子源码,发现一个从来没见过的包——flag。 不管是C开发还是Java,都接触过命令行开发。像大Java的main函数public static void main(String []args)直接参数里面就能读取到命令行启动参数。而Go语言的主函数是func main()果断啥也没,需要用这个包。 虽然Go不像大Jav...阅读全文
Go 语言简单实现HashSet
公司有个需求,就是能够对列表去重。本屌原本想直接用for循环实现,后来去查了查Java的实现方式,大开眼界。 Set,是指数学里的集合。集合当中不能有重复的元素。判断是否有重复,可以使用哈希的方法。Java容器当中有基于哈希实现的HashSet。把元素都放入HashSet当中,如果有重复,则会插入失败。这样就能判断出来是否重复了。 而Golang并没有这种高级的容器。只是找了一个大神实现的,稍微改了一下,能够支持字符串检测。 http://play.golang.org/p/_FvECoFvhq...阅读全文
Go 语言中的方法,接口和嵌入类型
本文为转载技术翻译,原翻译地址:http://se77en.cc/2014/05/05/methods-interfaces-and-embedded-types-in-golang/ 原文地址:http://www.goinggo.net/2014/05/methods-interfaces-and-embedded-types.html 概述 在 Go 语言中,如果一个结构体和一个嵌入字段同时实现了相同的接口会发生什么呢?我们猜一下,可能有两个问题: 编译器会因为我们同时有两个接口实现而报错...阅读全文
Golang下通过syscall调用win32的dll实现mifare card读写
很多同学比如我虽然很喜欢golang,但是还是需要调用很多遗留项目或者其他优秀的开源项目,这时怎么办呢?我们想到的方法是用package里的syscall结合cgo 注意此处有坑: 在我调试时显示not enough arguments in call to syscall.Syscall [ `go run dms.go` | done: 260.3744ms ] # command-line-arguments .\dms.go:72: not enough arguments in cal...阅读全文
Go语言面向对象编程
前段时间接触Go语言,感觉有很多新的理念,今天先转载一篇文章,以后有时间再慢慢学习。 本文转载自图灵社区http://www.ituring.com.cn/article/details/1339 作者许式伟 面向对象编程 Go 语言的面向对象编程(OOP)非常简洁而优雅。说它简洁,简介之处在于,它没有了OOP中很多概念,比如:继承、虚函数、构造函数和析构函数、隐藏的this指针等等。说它优雅,是它的面向对象(OOP)是语言类型系统(type system)中的天然的一部分。整个类型系统通过接口...阅读全文
Golang分布式设计模式之-----分层设计
提到分布式系统,我们会想到很多机器,分别部署着各自的服务,然后整体组成一个分布式系统。在这类系统中,分布式系统与常规的集中式系统存在着以下三个区别。(来自分布式算法导论) 1、缺乏全局状态知识 2、缺乏全局时间帧 3、非确定性 这三大特点也成为分布式系统设计的难点。也正是如此,分布式系统的设计比常规的集中式系统要难的多。为了区别,我们称这种分布式系统为,群体分布式。这种犹如社会群体。 golang语言天生具有分布式的特点,其主要是基于协程与chan的概念。如果对golang不了解的人可以简单的去...阅读全文
Go语言 nil和interface详解
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...阅读全文
数据库访问的缓存与最大连接数
今天查看我写的错误日志,里面报出了Too many connections这个错误。没见过啊,果断去问我大哥,他说是连接数的问题。我又去看之前已经上线的我的代码,才想起来数据库连接需要设置最大连接数的。当连接数超过范围之后,就是报这个错误。 我用的是xorm作为ORM工具,直接使用engine.SetMaxConns(dbMaxConns)就能设置最大连接数。 后来,又优化了一下缓存。一般ORM还是支持缓存机制的。如果缓存命中,就不会去数据库查找数据了,而是会直接返回。添加缓存需要增加缓存时间和...阅读全文