Go语言 unsafe的妙用

unsafe.Pointer其实就是类似C的void *,在golang中是用于各种指针相互转换的桥梁。uintptr是golang的内置类型,是能存储指针的整型,uintptr的底层类型是int,它和unsafe.Pointer可相互转换。uintptr和unsafe.Pointer的区别就是:unsafe.Pointer只是单纯的通用指针类型,用于转换不同类型指针,它不可以参与指针运算;而uintptr是用于指针运算的,GC 不把 uintptr 当指针,也就是说 uintptr 无法持有对...阅读全文

2014-04-20 09:57 abv123456789
阅读:21116 评论:5

Go的代码调优一例

2014-08-05 Go的代码调优一例 用tcpcopy导的线上流量,活动数据库也是真实的数据,这是我抓的一份pprof: genius@geniuss-Macbook-air:~/project/src/dsp_masky $go tool pprof ls.prof Welcome to pprof! For help, type 'help'. (pprof) top Total: 14413 samples 1342 9.3% 9.3% 1342 9.3% strconv.ParseU...阅读全文

阅读:4950 评论:0

[go] unsafe包

uintptr是go的内置类型,用于指针运算,其底层基于int类型。uintptr不是指针,GC会回收uintptr类型的对象。 unsafe.Sizeof unsafe.Sizeof函数返回的就是uintptr类型的值(表达式,即值的大小): var p float64 = 99 fmt.Println(reflect.TypeOf(unsafe.Sizeof(p))) fmt.Println(unsafe.Sizeof(p)) >>> uintptr >>> 8 unsafe.Sizeof接...阅读全文

2016-04-25 12:48 cc7756789w
阅读:5028 评论:0

GO 大小端

package main import ( "bytes" "encoding/binary" "fmt" ) func main() { var i uint32 = 1234 // 小端 b := make([]byte, 4) binary.LittleEndian.PutUint32(b, i) fmt.Printf("LittleEndian(%d) :", i) for _, bin := range b { fmt.Printf("%02X ", bin) } fmt.Printf...阅读全文

2017-05-16 15:00:50 痞子汤
阅读:6545 评论:0

golang开发目录结构

在实际的项目中发现大家的目录结构都比较凌乱,基本每个人都有每个人的风格,一个项目在不断地变大,一些新的文件或目录又不断地被添加进来,从这里面去找到自己需要的信息的成本越来越高,一个统一的通用的目录结构非常有必要。 以下内容来自于github上的这个项目(https://github.com/golang-sta...) /cmd main函数文件(比如 /cmd/myapp.go)目录,这个目录下面,每个文件在编译之后都会生成一个可执行的文件。 不要把很多的代码放到这个目录下面,这里面的代码尽可...阅读全文

2018-01-22 00:34:36 hatlonely
阅读:15066 评论:0

使用godoc创建本地Golang文档站点

Golang官网地址为:https://golang.org/ ,由于某个原因,国内访问较慢或无法访问。所以在本地搭建文档站点很有必要。本文默认已安装go 查看go安装位置 > go env ... GOARCH="amd64" GOPATH="/Users/Ava/gopath" GOROOT="/usr/local/go" GOTMPDIR="" ... 使用 go env 命令查go安装目录GOROOT="/usr/local/go" godoc启动站点 // 1. 进入bin目录 ( 或...阅读全文

2019.10.25 14:22:57 aside section._ 等
阅读:956 评论:0

go语言中大小端模式的个人理解

大端模式:是指数据的高字节保存在内存的低地址中,而数据的低字节保存在内存的高地址中,这样的存储模式有点儿类似于把数据当作字符串的存储顺序处理。地址由小向大增加,而数据从高位往低位放;这和我们的阅读习惯一致。小端模式:是指数据的高字节保存在内存的高地址中,而数据的低字节保存在内存的低地址中,这种存储模式将地址的高低和数据位权有效地结合起来,高地址部分权值高,低地址部分权值低。这样的存储模式有利于计算机处理数据。比如对于数据:0x12345678,从高字节到低字节为:12345678,从低字节到高字...阅读全文

2020-08-19 18:27:38 v824394795
阅读:2392 评论:0