golang
wanhf11
无。
展开
-
一致性hash实现源码分析
开源地址github.com/lafikl/consistent代码例子var hosts = []string{ "host1", "host2", "host3",}var c = consistent.New()func init() { for _, host := range hosts { c.Add(host) }}func Test_Remov...原创 2019-11-24 21:32:20 · 550 阅读 · 0 评论 -
golang 动态new interface{}
package mainimport ( "fmt" "reflect")type A struct{ AA int AB string}func test(a interface{}){ t := reflect.TypeOf(a) v:= reflect.New(t).Elem() w:= reflect.New(t).E...原创 2018-07-03 18:45:30 · 2207 阅读 · 0 评论 -
golang channel 源码分析
参考链接 Ring Buffer相关理解原创 2018-05-27 22:21:00 · 742 阅读 · 0 评论 -
golang 并发原理
参考文章原创 2018-05-15 16:18:57 · 629 阅读 · 0 评论 -
golang 赋值拷贝问题
数组切片:func main() { m := make(map[string]interface{}, 0) l := make([]int64, 0) m["hello"] = l l = append(l,1) fmt.Println(m["hello"]) //[]}func main() { l := make([]int64, ...原创 2018-05-07 15:41:04 · 9001 阅读 · 1 评论 -
golang 面试题尝试解答
题目链接交替打印数字和字母package mainimport ( "fmt")func main() { var iout, cout, done = make(chan bool), make(chan bool, 1), make(chan bool,1) go func() { iarr := []string{"1", ...原创 2018-05-06 20:08:06 · 815 阅读 · 0 评论 -
golang WaitGroup 并发使用
题目原地址package mainimport ( "fmt" "sync" "time" "sync/atomic")const THREE_MINUTES = 3 * 60 * 1type BanTable struct { VisTable map[string]int64 Lock *sync.Mutex}fu...原创 2018-05-06 17:49:05 · 1170 阅读 · 0 评论 -
go pprof 简单使用
测试demopackage mainimport ( "flag" "fmt" "io/ioutil" "log" "net/http" _ "net/http/pprof" "sync" "time")func counter() { list := []in原创 2018-05-12 13:58:34 · 1097 阅读 · 0 评论 -
golang json interface 反序列化
问题代码package mainimport ( "fmt" "reflect")type A struct { B int C string}func test(a interface{}) { fmt.Println(&a) fmt.Println(reflect.TypeOf(&a))}func t...原创 2018-07-03 23:06:44 · 4961 阅读 · 0 评论 -
csp 并发模型
channel:channel一种个安全的双端队列,任何任务只要持有channel的引用,就可以向一端加入消息,也可以向一端删除消息,消息的消费者和生产者不清楚对方是谁。channel分为无缓冲和有缓冲,无缓冲会同步阻塞,即每次生产消息都会阻塞到消费者将消息消费;有缓冲的不会立刻阻塞。关闭channel:向关闭的channel读数据会是nil,向关闭的channel写数据会被弃用。chan...原创 2018-10-07 16:38:15 · 1845 阅读 · 1 评论 -
sync Pool 代码阅读
Pool结构体type Pool struct { noCopy noCopy local unsafe.Pointer // local fixed-size per-P pool, actual type is [P]poolLocal localSize uintptr // size of the local array // New optionall...原创 2019-10-07 23:36:22 · 383 阅读 · 0 评论 -
sync.Mutex
公平锁:锁有两种模式:正常模式、饥饿模式正常模式下,维护一个先进先出的goroutine的等待队列,并且唤醒的goroutine需要和新的goroutine一起竞争,容易发送锁饥饿。饥饿模式下,锁的所有权从锁的释放直接给到等待队列的头部,不参与任何竞争。正常模式性能比饥饿模式高,因为一个goroutine有多次机会触发获取锁;饥饿模式防止尾部延迟。正常模式->饥饿模式条件:1:某...原创 2019-05-01 12:07:41 · 242 阅读 · 0 评论 -
golang context 超时控制
https://www.ddhigh.com/2019/01/02/golang-timeout-context.html转载 2019-05-03 11:49:25 · 13560 阅读 · 0 评论 -
fasthttp 协程池实现分析
fasthttp workerpool 源码:https://github.com/valyala/fasthttp/blob/master/workerpool.go特点:workerchan 后进先出定时清除workerChan源码简单分析workerpool struct 定义:type workerPool struct { WorkerFunc ServeHandle...原创 2019-05-02 20:10:45 · 798 阅读 · 0 评论 -
golang 布隆过滤器实现源码分析
golang 布隆过滤器“github.com/willf/bloom”源码分析结构体定义,m和k,通过README可以知道,m是数组集合大小,而k是hash函数个数// member of a set.type BloomFilter struct { m uint k uint b *bitset.BitSet}// New creates a new...原创 2019-03-24 12:15:46 · 1579 阅读 · 1 评论 -
golang 内存对齐
https://blog.csdn.net/u010824081/article/details/77924114转载 2019-02-20 11:35:20 · 225 阅读 · 0 评论 -
断路器原理
https://www.cnblogs.com/zsy/p/5183752.html转载 2019-02-11 12:01:08 · 860 阅读 · 0 评论 -
令牌桶+漏桶算法
算法原理:http://en.wikipedia.org/wiki/Token_buckethttps://baike.baidu.com/item/令牌桶算法代码实现参考:https://github.com/juju/ratelimit/blob/master/ratelimit.go代码解析:定义:type Bucket struct { clock Clock // 第...原创 2019-02-11 11:23:22 · 1070 阅读 · 0 评论 -
golang map 源码分析
源码分析// A header for a Go map.type hmap struct { // Note: the format of the Hmap is encoded in ../../cmd/internal/gc/reflect.go and // ../reflect/type.go. Don't change this structure witho...原创 2018-05-12 12:05:43 · 1453 阅读 · 0 评论 -
golang goroutine 并发递增
package mainimport ( "sync/atomic" "fmt" "sync")func main() { var wg sync.WaitGroup var a int32 = 0 // goroutine指向的外部变量地址 for i := 1; i < 100; i++ { wg.Add(1) ...原创 2018-05-18 15:18:14 · 714 阅读 · 0 评论 -
gin 协程并发导致服务停止
问题代码:func load(c *gin.Context){ go func(c *gin.Context){ c.GetString(....) }(c) go func(c *gin.Context){ c.Set(...) }(c)}导致服务偶发性停止,对外表现为某段时间,某台实例服务全部不可用。 查看日志: fatal原创 2018-01-03 10:07:20 · 5611 阅读 · 1 评论 -
golang 字典树 搜索+sugg 示例
package mainimport ( "fmt" "sort" "sync")type KeyWordKV map[int64]stringtype CharBeginKV map[string][]*KeyWordTreeNodetype PairList []Pairfunc (p PairList) Len() int { return l原创 2017-10-22 13:49:15 · 1281 阅读 · 0 评论 -
Gin 框架源码大体学习
Gin 服务框架服务端使用示例:package mainimport &amp;amp;amp;amp;amp;amp;quot;github.com/gin-gonic/gin&amp;amp;amp;amp;amp;amp;quot;func main(){ // 建立http路由 router := gin.Default() router.GET(&amp;amp;amp;amp;amp;amp;quot;/gin/test/&原创 2017-10-21 10:58:05 · 4750 阅读 · 0 评论 -
govendor 使用命令
常用命令:1. 生成vendor目录:govendor init2. 将外部依赖一同加入vendor中:govendor add +external3. 更新外部所有依赖:govendor update +external4. 更新指定外部依赖:govendor update $PACKAGE_NAME init Create the "vendor" folder and th原创 2017-10-06 17:12:44 · 2401 阅读 · 0 评论 -
golang 值传递和引用传递的总结
典型的引用传递类型:slice,map和channel: 典型的值传递类型:数组package mainimport "fmt"type Test struct { A int64 B string}func main(){ // 引用类型 map_param := make(map[int64]string,0) fmt.Println(map_para原创 2017-10-17 17:11:21 · 8084 阅读 · 0 评论 -
golang range 遍历
问题描述:遍历一个数组,修改其中的值:type MyTest struct { X int}arr := make([]MyTest,0,20)for k,v := range arr{ v.X = Y}期待输出,数组中所有的X均被修改成Y 实际输出,数组中所有的X均未发生改变问题分析在Go的for…range循环中,Go始终使用值拷贝的方式代替被遍历的元素本身,简单来说,就原创 2017-10-06 17:24:54 · 6006 阅读 · 1 评论 -
gorm 简单调用源码分析
gorm 介绍:基于golang的orm框架,相关文档:http://doc.gorm.io/demo:package mainimport ( "github.com/jinzhu/gorm" _ "github.com/jinzhu/gorm/dialects/sqlite")type Product struct { gorm.Model C...原创 2018-03-04 17:57:24 · 2991 阅读 · 0 评论 -
golang 1.8 并发安全Map简单实现
type SafeMap struct { sync.RWMutex Map map[int64]string}func NewSafeMap(size int) *SafeMap { sm := new(SafeMap) sm.Map = make(map[int64]string, size) return sm}func (sm *Safe...原创 2018-03-18 15:47:44 · 2138 阅读 · 0 评论 -
go-torch 简单使用
go-torch安装FlameGraph:git clone https://github.com/brendangregg/FlameGraph.git将FlameGraph/flamegraph.pl 加入环境变量$PATHflamegraph.pl -h 测试安装go-torch: 1. go get -v github.com/uber/go-torch修改代码:...原创 2018-05-17 17:07:22 · 4334 阅读 · 0 评论 -
golang 内存管理 + 垃圾回收
tmcalloc参考链接 分配内存策略:全局缓存堆 + 进程私有缓存对于小容量的内存申请,优先尝试进程私有缓存,若私有缓存不足,则向全局缓存申请。对于大容量的内存申请,直接向全局缓存申请。进程私有缓存:单链表数组,默认分配86个大小不同的块,每个块上的数组使用才初始化。全局缓存堆:单链表数组,一共会分配256个不同大小的块,1 page = 4k,链表对应数组每个元素page递增...原创 2018-05-11 12:21:26 · 5788 阅读 · 0 评论 -
golang unsafe point
package mainimport ( "fmt" "unsafe")type Entity struct { a byte b byte}func main() { entity := Entity{} fmt.Println(entity) p := unsafe.Pointer(&entity) // 转换成...转载 2018-05-17 15:34:58 · 460 阅读 · 0 评论 -
golang slice 源码分析
slice 结构定义type slice struct { array unsafe.Pointer len int cap int}创建slice// maxSliceCap returns the maximum capacity for a slice.func maxSliceCap(elemsize uintptr) uintptr...原创 2018-05-17 14:52:38 · 1427 阅读 · 0 评论 -
golang context 源码分析
context 使用背景一个request可能对应启动多个goroutine去执行任务,我们可以通过context,实现对这些goroutine的生命周期的控制。同时,对于这些goroutine通用的常量变量,context可以提供存储。使用demo不断产生数字,直到程序退出package mainimport ( "fmt" "context")fu...原创 2018-05-09 17:21:47 · 588 阅读 · 0 评论 -
golang nil、error 与interface 总结
interface{} 与nilgolang 的interface{}大体可以描述为两个元素(type+data),只有当type和data都为nil的时候 interface才会与nil相等。var v *Tvar i interface{}i = vv 为空指针,所以必定等于nil interface{},type和data都是nil,所以也为nil 但是 i=v后,i的...原创 2018-04-22 20:16:10 · 1259 阅读 · 0 评论 -
golang 常见知识点
题目链接:https://zhuanlan.zhihu.com/p/26972862defer顺序问题,后定义的先执行,panic在defer后面才会向上传递,输出:打印后,打印中,打印前,触发异常for range 迭代时会使用临时变量作为值拷贝,m保存临时变量的地址goroutine 执行会保存for的变量地址,而第一个for 循环i是值拷贝,所以输出全是10;第二个i作为gofun...原创 2018-04-22 15:03:15 · 370 阅读 · 0 评论 -
gin websocket 简单分布式实现
main.goimport ( "github.com/gin-gonic/gin")func main() { ... // 连接ws会先发Get,正常返回101 r.GET("/ws", func(c *gin.Context) { WsHandler(c.Writer, c.Request) }) ... ...原创 2018-03-18 15:55:09 · 8091 阅读 · 0 评论