摘要: switch还可以用于判断变量类型。使用方式为T.(type),即在变量后加上.(type)。见代码:package main import ("fmt") func main() {var a interface{}a = "abc" switch t := a.(type) {case stri... 阅读全文
posted @ 2015-03-07 21:33 klain 阅读(2941) 评论(0) 推荐(1) 编辑
摘要: 首先我们要知道,在Go中方法名首字母大写是要导出的方法(也就是公有方法,public),而小写则是不导出的方法(私有的,private)。Go官方不提供对Get、Set方法的自动支持。对是否设置Get Set方法的推荐做法,见代码:package main import "fmt" type Foo... 阅读全文
posted @ 2015-03-06 10:00 klain 阅读(3217) 评论(0) 推荐(0) 编辑
摘要: 通过原子计数可以在多线程情况下,对同一个数值进行加减操作,一般用于状态同步。先看代码:package main import "fmt"import "time"import "sync/atomic"import "runtime" func main() { // 定义一个整数var ops u... 阅读全文
posted @ 2015-03-04 10:56 klain 阅读(4688) 评论(0) 推荐(0) 编辑
摘要: 我们可以使用Channel来同步不同goroutines的执行。看下面的代码:package main import "fmt"import "time" //这个函数会在新的goroutine中运行,执行结束时会给done channel中传入值true//注意到中间有sleep了一秒func w... 阅读全文
posted @ 2015-03-04 10:54 klain 阅读(1164) 评论(0) 推荐(0) 编辑
摘要: 本文通过代码讲解如何实现一个线程池。代码(来自https://gobyexample.com/)及注释如下:package main import "fmt"import "time" //这个是工作线程,处理具体的业务逻辑,将jobs中的任务取出,处理后将处理结果放置在results中。func ... 阅读全文
posted @ 2015-03-03 09:11 klain 阅读(4301) 评论(0) 推荐(0) 编辑
摘要: Go是一门推崇软件工程理念的编程语言。Go的代码必须放在GOPATH目录下,它应该包含三个子目录:src:用于以代码包的形式组织并保存Go源码文件。应该分为三类:库源码文件、命令源码文件、测试源码文件。pkg:用于存放由go install命令构建安装后的代码包(库源码文件)的“.a"归档文件。与G... 阅读全文
posted @ 2015-03-03 09:08 klain 阅读(597) 评论(0) 推荐(0) 编辑
摘要: Go语言中函数可以返回多个值,这和其它编程语言有很大的不同。对于有其它语言编程经验的人来说,最大的障碍不是学习这个特性,而是很难想到去使用这个特性。简单如交换两个数值的例子:package main import "fmt" func swap(a int, b int) (int, int) {r... 阅读全文
posted @ 2015-03-03 09:07 klain 阅读(15416) 评论(0) 推荐(0) 编辑
摘要: Go语言函数中有三个点...表示为可变参数,可以接受任意个数的参数。示例代码:package main import "fmt" func Greeting(prefix string, who ...string) {fmt.Println(prefix)//接收到who是一个数组,可以用for遍... 阅读全文
posted @ 2015-03-03 09:06 klain 阅读(3951) 评论(0) 推荐(0) 编辑
摘要: 计时器用来定时执行任务,分享一段代码:package main import "time"import "fmt" func main() {//新建计时器,两秒以后触发,go触发计时器的方法比较特别,就是在计时器的channel中发送值timer1 := time.NewTimer(time.Se... 阅读全文
posted @ 2015-03-03 09:03 klain 阅读(6041) 评论(0) 推荐(0) 编辑
摘要: Go语言要求不同的类型之间必须做显示的转换。转化分为类型转换和接口转化。类型转换的思路是:X类型需要转换为Y类型,语法是T(x). 如果对于某些地方的优先级拿不准可以自己加()约束,变成(T)(X)。如:*Point(p) // 和 *(Point(p))一样(*Point)(p) // p 转换成... 阅读全文
posted @ 2015-03-03 09:02 klain 阅读(616) 评论(0) 推荐(0) 编辑