当然有依赖,所有应用软件开发语言,只要涉及系统IO(包括网络,文件系统操作,显示或输出),都会需要调用操作系统API,包括golang。

学过操作系统原理都知道,CPU分ring0-ring3四个等级(目前操作系统基本只用了ring0和ring3两个等级,分别称为“内核态”和“用户态”),应用都是跑在ring3等级的,应用软件编程语言编译后的代码也只能是ring3等级的指令。

而涉及系统IO的操作,都是操作系统内核态(通过驱动程序实现)代码,都需要操作系统通过系统调用暴露为用户态可调用的API。

当然,golang能否编写内核态代码?当然可以,只要用golang编写驱动程序,让操作系统载入到内核地址空间运行即可。但一般没有这个场景,golang写用户态软件系统才是绝大多数场景。

golang的系统标准库都是跨平台的,因为在编译的时候,golang会根据操作系统不同,载入库的不同操作系统调用实现,链接的时候也会根据操作系统的不同而生成ELF或者PE文件格式,这都是不需要程序员关注的细节部分。但如果golang标准库没有覆盖到的API调用,就需要自己显式封装和编写操作系统调用了。