golang: 利用unsafe操作未导出变量

看了 @喻恒春 大神的利用unsafe.Pointer来突破私有成员,觉得例子举得不太好。而且不应该简单的放个demo,至少要讲一下其中的原理,让看的童鞋明白所以然。see:http://my.oschina.net/achun/blog/122540 unsafe.Pointer其实就是类似C的void *,在golang中是用于各种指针相互转换的桥梁。uintptr是golang的内置类型,是能存储指针的整型,uintptr的底层类型是int,它和unsafe.Pointer可相互转换。u...阅读全文

开源中国博客 2014-01-17 05:03 陈一回

函数作为变量,类型---golang

在go中函数也是一种变量,我们通过type定义这种变量的类型。拥有相同参数和相同返回值的函数属于同一种类型。 通过将函数作为一种类型的变量,我们可以将这种类型的函数作为值传递。 下面是一个简单的例子。 type functinTyoe func(int) bool // 声明了一个函数类型 func isOdd(integer int) bool { if integer%2 == 0 { return false } return true } f...阅读全文

开源中国博客 2012-11-01 16:08 梁援-晋

golang之数组,slice,map

一 、==========================array 数组===================================     索引只能是 int 整数型 所以不管几维数组 索引都是 整数  slice 是动态数组 索引也是 整数型 map为key 所以 可以为 整数 也可以为 字符串型     注意slice和数组在声明时的区别:声明数组时,方括号内写明了数组的长度或使用...自动计算长度,而声明slice时,方括号内没有任何字符。 arr1 := [10]in...阅读全文

开源中国博客 2014-07-14 07:54 lesou

golang: 类型转换和类型断言

类型转换在程序设计中都是不可避免的问题。当然有一些语言将这个过程给模糊了,大多数时候开发者并不需要去关注这方面的问题。但是golang中的类型匹配是很严格的,不同的类型之间通常需要手动转换,编译器不会代你去做这个事。我之所以说通常需要手动转换,是因为interface类型作为一个特例,会有不同的处理方式。 golang中的所有类型都有自己的默认值,对此我做了个测试。 $GOPATH/src ----typeassert_test --------main.go main.go的代码如下...阅读全文

开源中国博客 2014-01-20 11:17 陈一回

golang -- 网络字节编解码(1)

在网络传输协议过程中,封包常见的方式一般是: ①头标识+数据头(类型/属性/数据长度)+数据体+尾标识 -->一般还需要转义 ②固定长度 --> 编解码方便,浪费宽带 ③通过结尾标识(eg.通过base64传输,以\0结束) -->编解码方便,浪费 宽带 下面是golang在编解码的常用手段 解码 首先需要把[]byte的ascii串转化为uint8,uint16,uint32,uint64等 (分别对应python的B,H,I,Q).特别要注意大端和小端对齐方式(pyt...阅读全文

开源中国博客 2014-01-10 08:58 flyking

golang -- channel使用

Channel 重复关闭channel ch := make(chan bool) close(ch) close(ch) // 这样会panic的,channel不能close两次 读取的时候channel提前关闭了channel close(ch) i := <- ch //不会panic, 但是i读取到的是零值(""/false/nil) 向已经关闭的channel写数据 ch := make(chan string) close(ch)...阅读全文

开源中国博客 2014-01-08 23:30 flyking

golang -- rpc

内置的gob rpcserver package main import (     "errors"     "fmt"     "net"     "net/rpc"     "os" ) type Args struct {     A, B int } type Quotient struct {     Quo, Rem int } type Arith int func (t *Arith) Multiply(args *Args, reply *int) error ...阅读全文

开源中国博客 2014-01-12 19:37 flyking

golang 中的 type switch 类型判断

golang 语言中 也有 类是 javascript 的 typeof 判断类型的 方法 比如     func (a interface{}){             //第一种             if inst,ok:=a.(TypeA);ok{                 inst.MethodA()             }               //第二种             switch inst:=a.(ty...阅读全文

开源中国博客 2013-07-30 08:29 健哥大人

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的inte...阅读全文

开源中国博客 2014-01-19 20:34 陈一回

golang -- 时间日期总结

golang时间处理 相关包 "time" 时间戳  当前时间戳 fmt.Println(time.Now().Unix()) # 1389058332 str格式化时间 当前格式化时间 fmt.Println(time.Now().Format("2006-01-02 15:04:05")) # 这是个奇葩,必须是这个时间点, 据说是go诞生之日, 记忆方法:6-1-2-3-4-5 # 2014-01-07 09:42:20 时间戳转str格式化时间str_time := ti...阅读全文

开源中国博客 2014-01-07 09:51 flyking

golang time的几种用法

首先说明golang 语言设计设有个叫 XXnuts的家伙,果然是个变态,把时间原点设计在了 2006-01-02 15:04:05 其实人家这个日期是有意义的: 2006-01-02T15:04:05Z07:00 每个数字的意义: 1 2 3 4 5 6 7 月 日 时 分 秒 年 时 区 常用的方法: 1 toTime格式化(Parsing):    用法一: 使用毫秒数 t := time.Unix(1362984425, 0...阅读全文

开源中国博客 2013-08-11 20:49 磊_子

golang xml 处理

golang xml 处理 生成xml时 属性必须大写 package main import (     "encoding/xml"     "fmt"     "os" ) type xmldas struct {     XMLName  xml.Name       `xml:"das"`     DataPort string         `xml:"DataPort,attr"`     Desc     string         `xml:"desc,attr"`...阅读全文

开源中国博客 2013-12-29 11:57 咖啡伴侣

go 对 json 的处理

json不用多说,一种跨语言的交换协议,这里探讨一下Go语言对json的支持。 Go对于json有官方自己的解析包,先谈一下json的解码方式。解码的api如下: func Unmarshal (data []byte, v interface{}) 在go中,json解码的数据结构有两种,一种是解析到结构体,一种是解析到空的interface。 以数据 {"changes": [{"index":5, "armid":6},{"index":9,"armid":10}]} 为例 1,解析到...阅读全文

博客园 2013-09-20 19:05 houzongzhi