[golang]用Go语言写的课表
package main import ( "fmt" "os" ) type tt struct { //定义数据结构 tt,用于存放每日的课程 One string //0 Two string //1 Three string //2 Four string //3 } type DAY struct { //定义数据结构 DAY ,用于存放一周的,英文简写 we...阅读全文
package main import ( "fmt" "os" ) type tt struct { //定义数据结构 tt,用于存放每日的课程 One string //0 Two string //1 Three string //2 Four string //3 } type DAY struct { //定义数据结构 DAY ,用于存放一周的,英文简写 we...阅读全文
1. slice1:= slice[0:2] 引用,非复制,所以任何对slice1或slice的修改都会影响对方 data := []int{1, 2, 3, 4, 5, 6, 7, 8, 9, 0} data1 := data[0:2] data1[0] = 99 fmt.Println(data1) fmt.Println(data) [99 2] [99 2 3 4 5 6 7 8 9 0] 2.append append 比较特殊 声明: 源slice= src...阅读全文
下面总结一下go的序列化,通信中常用的格式:msgpack和json msgpack 安装: go get go get github.com/vmihailenco/msgpack go install github.com/vmihailenco/msgpack api:http://godoc.org/github.com/vmihailenco/msgpack func ExampleEncode() { b, err := msgpack.Marshal(true)...阅读全文
package main import ( "container/list" "fmt" ) func main() { l := list.New() l.PushBack(4) l.PushBack(5) l.PushBack(6) l.PushBack(7) l.PushBack(17) l.PushBack(27) l.PushBack(71) l.PushBack(74) //fmt.P...阅读全文
在上一篇moonmq的介绍中(这里),我仅仅简短的罗列了一些moonmq的设计想法,但是对于如何使用并没有详细说明,公司同事无法很好的使用。 对于moonmq的使用,其实很简单,样例代码在这里,我们只需要处理好broker,consumer以及publisher的关系就可以了。 首先,我们需要启动一个broker,因为moonmq现在只支持tcp的自定义协议,所以broker启动的时候需要指定一个listen address。 #启动broker ./simple_broker -ad...阅读全文
Ticker 最近的项目用go实现的服务器需要挂载大量的socket连接。如何判断连接是否还存活就是我们需要考虑的一个问题了。 通常情况下面,socket如果被客户端正常close,服务器是能检测到的,但是如果客户端突然拔掉网线,或者是断电,那么socket的状态在服务器看来可能仍然是established。而实际上该socket已经不可用了。 为了判断连接是否可用,通常我们会用timer机制来定时检测,在go里面,这非常容易实现,如下: ticker := time.NewTic...阅读全文
package main import "fmt" type Person struct { ID string Name string Addr string } func main() { var persons map[string] Person = make(map[string] Person) persons["123"] = Person {"123", "heihei", "haha"} p, ok := persons["123"] if ok { ...阅读全文
func main() { if a := 0; a==0 { fmt.Println(a) } fmt.Println("-----") b := 0 switch b { case 1 : fmt.Println(1) case 0 : fallthrough case 2 : fmt.Println("heihei") } fmt.Println("-----") switch { case b > 1 && b < 10 : ...阅读全文
func main() { i := 0 for { i++; if i > 10 { break; } fmt.Println(i) } fmt.Println("-----------") arr := [5]int {1,2,3,4,5} for i, j := 0,len(arr)-1;i<j;i,j = i+1,j-1 { arr[i],arr[j] = arr[j],arr[i] } for _, res := range arr ...阅读全文
package main import ( "fmt" "errors" ) func main() { res, err := Add(1, 2) if nil == err { fmt.Println(res) } _, e := Add(1, -5) fmt.Println(e) } func Add(a, b int) (res int, err error) { if b < 0 { err = errors.New("error") return...阅读全文
申请google app engine ID 具体步骤问google 部署个goagent,不然在大陆你肯定别想顺利进行下面的步骤 具体步骤问google 下载go_appengine_sdk,在windows下测试,下的版本是go_appengine_sdk_windows_386-1.8.8 下载 Python 2.7.6 http://www.python.org/download/releases/2.7.6/ 最浪费我时间的一步:卸载阿里旺旺 删除注册表里 “阿...阅读全文
先bing了篇博文,参考着去下载安装,结果第一步go get运行就出错: go: missing Mercurial command。。 看错误信息是源代码控制的工具没有预先安装,干脆去官网查看 http://robfig.github.io/revel/tutorial/gettingstarted.html , 果然人家的安装向导很详细,一开始就说要安装两个源代码控制工具: Install git and hg Both Git and Mer...阅读全文
以下是利用标准库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...阅读全文
tcp服务器 包括日志,定时处理,广播,超时 map写添加了锁(读不用锁) 添加了解码器 删除了addr-buf映射,添加删除锁 mark:今天听大神所要处理系统中断EINTR, 以后做简单处理EINTR--retry mark:用struct封装addr, net.Listener, exit(是否断开)等信息..最重要的是使用: br := bufio.NewReader(conn), bw := bufio.NewWriter(conn)来取代读循环,这样就可以需要的时候再读/...阅读全文
有一段时间,我们的推送服务socket占用很不正常,我们自己统计的同时在线就10w的用户,但是占用的socket竟然达到30w,然后查看goroutine的数量,发现已经60w+。 每个用户占用一个socket,而一个socket,有read和write两个goroutine,简化的代码如下: c, _ := listerner.Accept() go c.run() func (c *conn) run() { go c.onWrite() c.onRead() } ...阅读全文
之前看过性能对比测试的文章,是关于node.js和golang的http模块,简单的helloworld功能,原文在此: http://www.cnblogs.com/QLeelulu/archive/2012/08/12/2635261.html#2447171 再此文章之后,node.js和golang都升级了,node.js现在已经到了0.10,而golang也到了1.1版本,因此突然想在前人的基础上再做一次性能测试。 具体代码仍然沿用引用文章里面的。 硬件:双cp...阅读全文
package main import ( "fmt" ) var c = make(chan int) var str string func ready() { str = "abc" fmt.Println("ready1") <-c //get fmt.Println("ready2") } func main() { go ready() c <- 1 //put fmt.Println(str) } ready...阅读全文
虽然golang是用C实现的,并且被称为下一代的C语言,但是golang跟C的差别还是很大的。它定义了一套很丰富的数据类型及数据结构,这些类型和结构或者是直接映射为C的数据类型,或者是用C struct来实现。了解golang的数据类型和数据结构的底层实现,将有助于我们更好的理解golang并写出质量更好的代码。 基础类型 源码在:$GOROOT/src/pkg/runtime/runtime.h 。我们先来看下基础类型: /* * basic types */ typedef si...阅读全文