sweep是在mark之后的,只清理白色对象,也就是用户没有任何引用的对象,写屏障在mark的时候开启就好了,在mark阶段,如果新建了一个对象,都是直接标记为黑色,表示存活对象。总的来说,清扫的时候...
<a href="/topics/8653#comment8" title="8">#8<span>楼</span></a> <a href="/user/gpfly" title="@gpfly">...
上面的截图不好看代码,我发这里,你可以自己研究一下
```go
func testg1() {
i := int64(0)
go func() {
for true {
//隔一秒打印...

编译器直接没生成 i+...
```
eface = (interface{})(*(*interface {M()})(v.ptr)) // 就是两次类型转换
```
先看 `(*interface {M()})(v.pt...
代码用了cgo吧?

直接加我微信,我拉你
https://sheepbao.github.io/post/understand_golang_slice/ 可以看我这篇文章。
我的理解P一开始不属于任何一个M,P是逻辑cpu它和M绑定了,那么它就能真正的执行指令了,因为M就是系统线程。P也可以和M解绑,比如进程进入系统调用比较久,P就会和M解绑,让M等待系统调用,而P就去另...
https://golang.google.cn/ref/spec#Slice_expressions 里写了,`For arrays or strings, the indices are in r...
不给工资,只给股份都是耍流氓
<a href="/user/polaris" title="@polaris">@polaris</a> 评论不能修改也是醉了
错误信息截图先发全来,发那么点是闹哪样?
错我信息截图先发全来,发那么点是闹哪样?
https://golang.google.cn/ref/spec#Short_variable_declarations 看语言规范就知道了
`=` 表示赋值
`:=` 表示分配且赋值
htt...
简单的说零值就是一个类型未经任何赋值的初始值, 比如 int类型的零值为0, bool类型的零值为false,*int的零值为nil。
而nil是一个特殊值,表示指针或者引用类型的一种值,比如 []b...
https://github.com/sheepbao/golang_runtime_reading 前面的链接会报错
关于goroutine的执行顺序官方文档肯定不会说谁先谁后,只会告诉你不要假设他们谁先谁后,因为并发就是这样规定的。不知道你假定goroutine的执行顺序有何意义?当然按照目前的runtime实现,...
这个问题明明文档一开始就写了啊?go的内存模型就是这样的啊,文档例子里就有作者提的代码。[The Go Memory Model](https://golang.org/ref/mem) 中说了 `W...
```go
package gc_test
import (
"log"
"runtime"
"runtime/debug"
"str...
<a href="/topics/5986#comment3" title="3">#3<span>楼</span></a> <a href="/user/windy_" title="@windy_...
不会,ss底层数组被引用,整个数组都不会被释放
格式有点乱,为什么不可以实现呢,goroutine结束本来就不影响其他goroutine
#史蒂夫软件#坐标SZ-高新园,新项目招服务端开发(c++/go),三年以上,有高并发,高日活项目的研发经验薪资范围20-35K,别的没有,只为在与众不同的地方工作,做个千万日活的棋牌游戏取悦自己,联...
这个可以看我文章 [https://sheepbao.github.io/post/golang_escape_analysis/](https://sheepbao.github.io/post/g...
深复制还要怎么高效?自己开辟另一个内存空间,copy过去。
```
a := "12345"
b := make([]byte, len(a))
copy(b, a)...
如果知道c语言的void*指针和string的内存布局,这个问题其实不难,强烈建议看看这门课: `http://open.163.com/special/opencourse/paradigms.ht...
这不是channel的坑,是对slice理解的不够,要说坑也是slice的坑
```go
package main
import (
"fmt"
"runtime"
"time"
)
//go:noinline
func...
两个是有一定矛盾的
https://superuser.com/questions/920817/why-isnt-it-possible-to-encrypt-and-compress-a-folder-on-wind...
我的理解是,压缩是压缩,加密是加密,可以说是两个不同的领域,你想对一个数据后加密直接减少字节数应该是没有的,你可以加密后再压缩,或者压缩后再加密。当然这样是更耗cpu的。
其实不管是全局变量,还是对象方法 reciver 是指针对象,他们的目的都相同就是`在函数的作用域内更改函数外的值`。
以接收器来讲:
```go
type foo struct {
y int
}...
哈哈,一下爬了我博客好几篇文章
应该就是编译器优化了,对于第一个代码,在for中申明了一个s变量,且该s变量没有被引用,就可以复用,其实 for的短变量申明就是这么干的,比如:
```go
for _,v := range []i...
没读满不是很正常的事吗?tcp只要ack确认了就会给应该层,比如你发送了2000bytes,你客户端可能收到好几次read事件,分别是500,1500bytes,还有可能出现tcp粘包啥的。
很不错,排版再好看点就更好了
做个路由就好了,不同的域名不同的路由,并限制直接用ip访问网站