Golang Go语言源码库竟如此惊奇
最近看到 go 的源码库,比如 bytes 库
Count()函数如下:
func Count(s, sep []byte) int {
if len(sep) == 1 && cpu.X86.HasPOPCNT {
return countByte(s, sep[0])
}
return countGeneric(s, sep)
}
然后看了下 countByte 库写法是下面这样:
func countByte(s []byte, c byte) int
库函数为什么可以这么写呢?没有实体?不应该语法报错吗?怎么执行呢? 来位好心人解释下吧!
Golang Go语言源码库竟如此惊奇
更多关于Golang Go语言源码库竟如此惊奇的实战教程也可以访问 https://www.itying.com/category-94-b0.html
不是没实现,只是没有用 Go 代码实现,有注释啊:
https://golang.org/src/runtime/asm_amd64.s
更多关于Golang Go语言源码库竟如此惊奇的实战系列教程也可以访问 https://www.itying.com/category-94-b0.html
如果你仔细看看各种语言实现,你会发现很多函数只有定义没有实现。这是因为实现在另外一个盒子里面。
countByte 是由.s 文件实现,根据 google 的搜索,.s 是由 c 编译器编译。
就好像 SYSCALL_CANCEL 由内核实现,c 代码里面是没有这个“函数”的实现的。
go 实现了自举,但是并没有完全抛弃 c。
是用汇编语言实现的,*.s 是汇编的扩展名。
打开看一眼就知道了,就是用汇编实现的:
https://golang.org/src/runtime/asm_amd64.s#L2174
如果楼主去看 python 库源码也会得出同样的结论
那看 python 源码就会认为有一大堆没实现的了。。。
妈蛋的,学的汇编都还给先生了…
看了几个文件,看不懂了都快…
go 有自己的汇编器,go tool asm
汇编实现的 runtime 里面一堆
胡说八道,汇编代码自然用 go 的汇编器来编译,哪里需要 C 编译器
👍
在浏览Go语言(Golang)的源码库时,确实能体会到其设计的精妙与惊奇之处。Go语言自诞生以来,就以其简洁、高效、并发性强的特点赢得了开发者的青睐,而其源码库更是这一理念的集中体现。
Go语言的源码库结构清晰,模块划分合理,这使得开发者能够迅速上手并理解其内部机制。同时,Go语言在并发编程方面的优势在源码中也得到了充分体现,通过goroutines和channels等机制,Go语言能够高效地处理并发任务,这在源码库中有着详尽的实现和注释。
此外,Go语言的源码库还展现了其强大的标准库支持。Go语言的标准库涵盖了网络编程、文件操作、文本处理、加密解密等多个方面,为开发者提供了丰富的工具和接口。这些标准库的实现不仅高效稳定,而且易于使用,极大地提升了开发效率。
值得一提的是,Go语言的源码库还体现了其开源社区的活跃与热情。众多开发者在源码库中贡献了自己的代码和想法,推动了Go语言的不断发展和完善。这种开放、协作的精神也是Go语言能够持续保持活力和竞争力的关键所在。
总之,Go语言的源码库是一个充满惊奇和宝藏的地方。无论你是初学者还是资深开发者,深入探索Go语言的源码库都能带给你不一样的收获和体验。建议你在学习Go语言的过程中,不妨多关注其源码库,相信你会有更多的发现和感悟。