go语言静态 go语言静态代码扫描

go是静态语言吗【go语言静态 go语言静态代码扫描】不是,go是动态语言,其特点是是强类型、静态语言,有并发编程支持,支持垃圾回收,内存安全,有内置的测试框架 。天生的高并发
为什么要使用 Go 语言 , Go 语言的优势在哪里部署简单 。Go编译生成的是一个静态可执行文件,除了glibc外没有其他外部依赖 。这让部署变得异常方便:目标机器上只需要一个基础的系统和必要的管理、监控工具,完全不需要操心应用所需的各种包、库的依赖关系,大大减轻了维护的负担 。这和Python有着巨大的区别 。由于历史的原因,Python的部署工具生态相当混乱【比如setuptools,distutils,pip,
buildout的不同适用场合以及兼容性问题】 。官方PyPI源又经常出问题,需要搭建私有镜像,而维护这个镜像又要花费不少时间和精力 。
并发性好 。Goroutine和channel使得编写高并发的服务端软件变得相当容易,很多情况下完全不需要考虑锁机制以及由此带来的各种问题 。单个Go应用也能有效的利用多个CPU核 , 并行执行的性能好 。这和Python也是天壤之比 。多线程和多进程的服务端程序编写起来并不简单,而且由于全局锁GIL的原因,多线程的Python程序并不能有效利用多核 , 只能用多进程的方式部署;如果用标准库里的multiprocessing包又会对监控和管理造成不少的挑战【我们用的supervisor管理进程,对fork支持不好】 。部署Python应用的时候通常是每个CPU核部署一个应用,这会造成不少资源的浪费 , 比如假设某个Python应用启动后需要占用100MB内存,而服务器有32个CPU核 , 那么留一个核给系统、运行31个应用副本就要浪费3GB的内存资源 。
良好的语言设计 。从学术的角度讲Go语言其实非常平庸,不支持许多高级的语言特性;但从工程的角度讲,Go的设计是非常优秀的:规范足够简单灵活 , 有其他语言基础的程序员都能迅速上手 。更重要的是Go自带完善的工具链,大大提高了团队协作的一致性 。比如gofmt自动排版Go代码,很大程度上杜绝了不同人写的代码排版风格不一致的问题 。把编辑器配置成在编辑存档的时候自动运行gofmt , 这样在编写代码的时候可以随意摆放位置,存档的时候自动变成正确排版的代码 。此外还有gofix,
govet等非常有用的工具 。
执行性能好 。虽然不如C和Java , 但通常比原生Python应用还是高一个数量级的,适合编写一些瓶颈业务 。内存占用也非常省 。
Golang 的静态编译Go 语言和 C 语言的一个很大的区别是, Go 语言只静态编译 , 做个测试:
一方面是 Go 语言编译后的可执行文件大小比 C 语言的大很多,
另一方面是 C 语言的可执行文件需要依赖 glibc 动态库 ,
用 ldd 命令可以看出来:
或者直接删除 glibc 动态库,C 可执行程序报错,而 Go 的还能运行:
这时候只有内部命令可以运行 , 外部命令,包括ln甚至最常用的ls命令也不能运行了:
设置好LD_PRELOAD环境变量之后, ln 命令可以运行 , 但是sudo仍然不能运行
只能靠root用户来重新创建软连接了:
所以用 sudo 来 rm 文件要小心,还是用root比较好 。如果没有预先留一个打开的root终端,登录都登不进去 。
go语言静态的介绍就聊到这里吧 , 感谢你花时间阅读本站内容,更多关于go语言静态代码扫描、go语言静态的信息别忘了在本站进行查找喔 。

    推荐阅读