google hosts 2014.12.16 更新
google hosts 2014.12.16 更新,本文只提供google相关服务的hosts,目前有效,失效后会及时更新。 注1:请使用chrome浏览器,并在地址栏里输入 chrome://flags/,然后查找QUIC,启用该协议,同时建议启用SPDY/4,能让访问更流畅。 注2:请使用https的方式访问,比如:https://www.google.com 注3:默认可能会跳转到www.google.com.hk,如果.hk访问困难,请使用:https://www.google.com...阅读全文
使用golang flag 反序列化自定义的字符串
引用部分: import ( "bufio" "flag" "log" "strings") 自定义字符串: var myString = "add -a=123 -b=456" func main(){ var a,b int var add = flag.NewFlagSet("add", flag.ContinueOnError) add.IntVar(&a,"a",0,"value a") add.IntVar(&b,"b",1,"value b") cmd := strings.Fie...阅读全文
Go 语言简介(下)— 特性
goroutine GoRoutine主要是使用go关键字来调用函数,你还可以使用匿名函数,如下所示: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 package main import "fmt" func f(msg string) { fmt.Println(msg) } func main(){ go f("goroutine") go func(msg string) { fmt.Println(msg) }("going") } 我们再来看一个示例,下面的代码中...阅读全文
go基础——02(一些技巧 、一些规则)
go语言学习笔记 1、一些技巧 分组声明 在Go语言中,同时声明多个常量、变量,或者导入多个包时,可采用分组的方式进行声明。 例如下面的代码: import "fmt" import "os" const i = 100 const pi = 3.1415 const prefix = "Go " var i int var pi float32 var prefix string 可以分组写成如下形式: import( //分组的方式进行声明 导入多个包 "fmt" "os" ) const(...阅读全文
深度剖析channel
##channel的用法 channel是golang中很重要的概念,配合goroutine是golang能够方便实现并发编程的关键。channel其实就是传统语言的阻塞消息队列,可以用来做不同goroutine之间的消息传递,由于goroutine是轻量级的线程能够在语言层面调度,所以channel在golang中也常被用来同步goroutine。 一般channel的声明形式为:var chanName chan ElementType ElementType指定这个channel所能传递的...阅读全文
golang信号处理
go语言中处理信号很简单,并且不会中断程序的正常运行逻辑。 想监听一个信号只需要调用Notify函数 **func Notify(c chan<- os.Signal, sig ...os.Signal)** + sig 表示你希望监听的信号,如果不设置表示监听所有的信号。 + c 表示当信号发生时,系统会往该channel中写入发生的信号。 如果不想监听信号则可以调用stop **func Stop(c chan<- os.Signal)** ##实例解析 ``` exitChan := ma...阅读全文
GO使用SMTP发送邮件
核心代码:smtp.SendMail(host, auth, user, send_to, msg),auth := smtp.PlainAuth("", user, password, hp[0]) 可行方案:使用企业邮箱的SMTP发送邮件,host :="smtp.exmail.qq.com:25",因此需要一个企业邮箱的账号和密码 直接上代码: main.go package main import ( "fmt" "net/smtp" "strings" ) func SendToMai...阅读全文
Scala和Go的区别
Keith Morrow作为Scala的支持者,发表了这篇倾向于Scala的文章,主要也是为了反驳一年前 Paul Dix 的文章:why he prefers Go over Node and Scala,Paul Dix认为Go好于Scala的原因在于下面几个方面:并发性, 易理解性, 代码分享和学习难度。之所以时隔一年才有人反驳,一则因为双方不了解,二则可能是随着Go编写的Docker流行,拳头产品的出现让大家对Go刮目相看。 Keith Morrow则认为Go比Scala易于学习是因为G...阅读全文
Mac 安装 GO语言开发环境
官网:https://golang.org/ go语言的安装:http://docscn.studygolang.com/doc/install 下载:go1.4.darwin-amd64-osx10.8.pkg 默认安装,被安装了 /usr/local/go 目录 并自设置了环境变量。 go env 可查看目前的go的环境变量 这go就可以执行了, 下面还要配置一个GOPATH环境变量,是工作目录。 根据约定,GOPATH下需要建立3个目录: bin 存储编译后的可执行文件 pkg 存放编译后...阅读全文
TCP self-connection
Go 语言的 net 库里有下面这样的一段代码,这段代码是用来发起一个 tcp 连接的,仔细阅读这段代码可以发现代码里处理了一种很不常见的特殊情形,也就是 tcp self-connection。代码中的注释解释得很详细了。 func dialTCP(net string, laddr, raddr *TCPAddr, deadline time.Time) (*TCPConn, error) { fd, err := internetSocket(net, laddr, raddr, dead...阅读全文
使用cpu的时钟周期作为随机数发生器的种子
对于一个伪随机数发生器来说,种子的设置是非常重要的;Go语言runtime中的每个线程也有自己的一个随机数发生器,当然也是伪的,这个伪随机数发生器的种子设置采用了另外一种方法——使用了cpu的时钟周期计数器。 go语言的实现采用了一段汇编代码读取cpu的cycle信息,如下: TEXT runtime·cputicks(SB),7,$0 RDTSC SHLQ $32, DX ADDQ DX, AX RET 这段汇编代码的语法好像有点奇怪,和平时常见的AT&T语法有那么一点不同;确实,Go语言有一...阅读全文
gocrawl类库解析
最近打算介绍go语言编写的开源类库架构分析,自己最开始使用go语言是做爬虫的,采用的是gocrawl, gocrawl是一个使用go语言编写的开源爬虫类库,今天来分析下gocrawl的实现。 ## 示例代码 ``` package gocrawl import ( "github.com/PuerkitoBio/goquery" "net/http" "regexp" "time" ) // Only enqueue the root and paths beginning with an "a...阅读全文
《Go语言编程》【3.6 完整示例】代码错误和文件目录结构
1. 音乐结构体命名错误,不是Music,而是MusicEntry,如下: 2. 包名错误,不是library,而是mlib: 3. manager.go代码Remove函数删除中间元素有错,index-1应当改成index: 4. m0变量初始化错误,"Celion Dion", 为多余,MP3应当加上双引号: 5. manager_test.go代码错误,无Genre: 6. manager_test.go代码错误,err多余: 7. 少了wav.go代码,可以直接拷贝mp3.go全部替换M...阅读全文
Go support for Android
Abstract We propose to introduce Go support for the Android platform. The focus will be on supporting games written in Go. The APIs will be those defined in the Android NDK. Background Android is an operating system designed for running apps. An app ...阅读全文
go language --- techory diary 15 Dec
1、go 语言是谷歌开发的一种十分优秀的语言。 安装配置的环境是:ubuntu 具体的过程可以参考 可是在具体配置的时候,出现了一些问题,尚未解决。 参考网站: (1)、http://code.google.com/p/golang-china/ (2)、https://zh-golang.appspot.com阅读全文
Go语言闭包的小例子
例子1 package main import ( "fmt" ) func main() { f := closer(10) //fmt.Println(f(1)) //fmt.Println(f(2)) f(1) f(2) } func closer(x int) func(int) int { fmt.Printf("%p\n", &x) return func(y int) int { fmt.Printf("%p\n", &x) return x + y } } 打印结果是: 0x11...阅读全文