Golang
Golang
_冬木
这个作者很懒,什么都没留下…
展开
-
gc过程
runtime 文档描述// 1. GC performs sweep termination.//// a. Stop the world. This causes all Ps to reach a GC safe-point.(STW)//// b. Sweep any unswept spans. There will only be unswept spans if// this GC cycle was forced before the expected time原创 2020-05-10 11:25:57 · 20847 阅读 · 0 评论 -
gc
gc是和内存分配紧密相关的,golang中堆区是按照class size进行划分,共定义了67种class。在1.10版本中,堆区是连续的,分为spans、bitmap和arena三部分。其中arena就是按照class size进行划分的。由于堆区的空间划分(bitmap和class size),这决定了gc需要使用非移动式的算法,golang采用mark and sweep算法。mark:通过可达性分析标记对象是否存活,即是否存在一条从根对象到目的对象的引用链。因为在mark阶段中修改对象的引用原创 2020-05-09 23:28:40 · 147 阅读 · 0 评论 -
sync.Cond
go version go1.13.4 linux/amd64用于同步多个协程间的条件状态比如在消费者-生产者模型中,只有在队列中有资源时,消费者才可以消费,只有在队列还能够放入资源时,生产者才可以放入资源。消费者协程和生产者协程之间需要同步队列的状态,这里的状态同步可以用sync.Cond来实现。源码分析// Wait atomically unlocks c.L and suspends execution// of the calling goroutine. After later res原创 2020-05-08 23:02:45 · 365 阅读 · 0 评论 -
string
package mainimport "fmt"func main() { s := "中国" s1 := []rune(s) fmt.Println(len(s)) // 6 fmt.Println(len(s1)) // 2 fmt.Printf("%x, %x\n", s1[0], s1[1]) // 4e2d, 56fd}len函数计算的是字符串底层的字节数,字符...原创 2020-04-06 23:58:03 · 113 阅读 · 0 评论 -
go dep依赖的拓扑排序
拓扑排序go中的依赖关系可以使用有向无环图来表示,通过使用深度优先搜索算法,可以得到一个合理的依赖列表。源码分析 (以v0.5.1为例)dep/gps/pkgtree.PackageTree表示依赖树(依赖包树,导入包树),其ToReachMap方法用于生成依赖树的依赖路径,其返回值ReachMap的FlattenFn方法将map转换为已排序去重的依赖列表。ToReachMap方法调用vm...原创 2019-03-17 20:12:38 · 325 阅读 · 0 评论 -
go字符串拼接操作
1. 使用 + 拼接通过查看汇编代码可知 + 实际上调用的是 runtime/string.go中的concatstrings 函数,该函数源代码如下:// concatstrings implements a Go string concatenation x+y+z+...// The operands are passed in the slice a.// If buf !...原创 2018-05-15 16:35:22 · 3394 阅读 · 0 评论 -
go
变长参数 nums …int格式化: 在命令行输入 gofmt –w program.go 会格式化该源文件的代码然后将格式化后的代码覆盖原始内容(如果不加参数 -w 则只会打印格式化后的结果而不重写文件);gofmt -w *.go 会格式化并重写所有 Go 源文件;gofmt map1 会格式化并重写 map1 目录及其子目录下的所有 Go 源文件。格式化:gofmt 也可以通过在参原创 2018-01-02 20:31:37 · 440 阅读 · 0 评论 -
go-context
context用于控制由一个goroutine (A)开启的其他goroutine(BCD…)。当A需要结束时,希望BCD…也相应地结束。package mainimport ( "context" "fmt")//或者使用go官方解释里面的写法(WithCancel)func a(ctx context.Context) chan int { //ctx作为参数原创 2018-01-02 18:50:33 · 241 阅读 · 0 评论 -
go http服务器
net/http包封装了TCP连接和报文解析等细节,使用时只需要和http.ResponseWriter和*http.Request这两个对象交互就行。 对应的处理函数,需要把请求对象传递进来,将处理结果写入相应对象中。package mainimport "net/http"func main() { http.HandleFunc("/", handle) // 第一个参数表示处理所有原创 2017-12-14 21:15:06 · 490 阅读 · 0 评论