chai2010

Results 97 comments of chai2010

Go1.10(?)之后`runtime·convT2E`已经不能从外部包调用,用以下函数替代: ```go //go:nosplit func runtime_convT2E_hack(_type, elem uintptr) eface { return eface{ _type: _type, elem: elem, } } ```

main.go ```go package main var helloworld = "你好, 世界" func main() ``` main.s: ``` TEXT ·main(SB), $16-0 MOVQ ·helloworld+0(SB), AX; MOVQ AX, 0(SP) MOVQ ·helloworld+8(SB), BX; MOVQ BX, 8(SP) CALL...

这是第一节内容,目的是展示怎么自定义main函数。可以绕过变化到部分。 Go部分可以改成如下格式: ```go package main import "fmt" var helloworld = "你好, 世界" func println(s string) { fmt.Println(s) } func main() ``` 然后汇编部分: ```s TEXT ·main(SB), $16-0 MOVQ ·helloworld+0(SB), AX; MOVQ...

书中是Go1.10的汇编规则。汇编语言并不是Go1承诺不会变化的部分,Go1.18确实发生了一些变化,变得更有效率、也更加繁琐,未来也有可能会发生变化。你自行对比下变化的部分,也欢迎PR

goroutine 每个消耗的内存资源很少,因此数量并不是重点。真正重要的是同时在运行的goroutine的数量,这些才是需要消耗CPU资源的。而且这样的改动也不能限制创建goroutine的数量,每次chan读写都是配对完成了,而创建goroutine是并发操作(无法达到限制的效果)

要不你提供一些素材?

这些细节确实是和实现相关的。可以提交一个pr,增加一个补充说明,说明在某些版本的差异。

书的内容不可能和Go语言那样一直更新的。 针对某些特点版本加个说明应该就可以了。 这些是属于实现的细节,cgo用户自己需要跟进这些变更的。