unsafe.Pointer其实就是类似C的void *,在golang中是用于各种指针相互转换的桥梁。uintptr是golang的内置类型,是能存储指针的整型,uintptr的底层类型是int,它和unsafe.Pointer可相互转换。uintptr和unsafe.Pointer的区别就是:unsafe.Pointer只是单纯的通用指针类型,用于转换不同类型指针,它不可以参与指针运算;而uintptr是用于指针运算的,GC 不把 uintptr 当指针,也就是说 uintptr 无法持有对...
-
Go语言 unsafe的妙用
-
图解Go的unsafe.Pointer
相信看过Go源码的同学已经对unsafe.Pointer非常的眼熟,因为这个类型可以说在源码中是随处可见:map、channel、interface、slice...但凡你能想到的内容,基本都会有unsafe.Pointer的影子。 看字面意思,unsafe.Pointer是“不安全的指针”,指针就指针吧,还安不安全的是个什么鬼? 接下来,我们就来了解一下Go的这个“不安全的指针”unsafe.Pointer。 什么叫变量 在了解指针之前,我们有必要先了解一下什么叫“变量”。 其实变量就是一个内...
-
go build -ldflags 参数及 gdb 调试
go build -ldflags 参数及 gdb 调试 有时发布时我们想隐藏所有代码实现相关的信息,使用 go build -ldflags 参数可以实现相关要求。 示例代码 本文使用版本为go 1.6。 package main import "log" type MyCat struct { name string age int } func main() { cat := MyCat{ name: "tom", age: 10, } log.SetFlags(log.Llongfile...
-
Golang Multipart File Upload Example
http://matt.aimonetti.net/posts/2013/07/01/golang-multipart-file-upload-example/ The Go language is one of my favorite programming languages. However, sometimes doing simple things can seem a bit harder than it should. However, most of the time, the ...
-
来,控制一下 Goroutine 的并发数量
原文地址:来,控制一下 Goroutine 的并发数量 问题 func main() { userCount := math.MaxInt64 for i := 0; i < userCount; i++ { go func(i int) { // 做一些各种各样的业务逻辑处理 fmt.Printf("go func: %d\n", i) time.Sleep(time.Second) }(i) } } 在这里,假设 userCount 是一个外部传入的参数(不可预测,有可能值非常大),有人会全...