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

14 回复

不是没实现,只是没有用 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语言的过程中,不妨多关注其源码库,相信你会有更多的发现和感悟。

回到顶部