189 8069 5689

go语言精简体积 go语言nil

程序员的开源月刊《HelloGitHub》第 68 期

HelloGitHub 分享 GitHub 上有趣、入门级的开源项目。

成都创新互联公司作为成都网站建设公司,专注网站建设、网站设计,有关企业网站设计方案、改版、费用等问题,行业涉及报废汽车回收等多个领域,已为上千家企业服务,得到了客户的尊重与认可。

这里有实战项目、入门教程、黑 科技 、开源书籍、大厂开源项目等,涵盖多种编程语言 Python、Java、Go、C/C++、Swift...让你在短时间内感受到开源的魅力,对编程产生兴趣!

1、 toybox :该项目将 200 多个常用的 Linux 命令行工具,做成一个可执行文件。从而可以让 Android 这种原本不支持 Linux 命令的系统,也得以用上 ls、find、ps 等命令。还可以用于快速构建最小的 Linux 环境

2、 the_silver_searcher :比 ack 更快的命令行搜索工具。速度快、功能强大、使用简单,支持 Linux、Windows、macOS 操作系统,还能够整合进 Vim 和 Emacs 等编辑器

3、 WindTerm :支持 SSH/Telnet/Serial/Shell/Sftp 的终端工具。虽然该软件完全免费,但部分代码尚未完全开源,对安全敏感的同学可以再观望下

4、 wavefunctioncollapse :基于波函数坍缩 (WFC) 算法,实现的无限城市示例。城市里有房子、楼梯、树木、连接房屋的通道,你可以在城市中自由移动、跳跃、飞行,但不论你怎么移动都找不到尽头,因为这座城市会无限延伸

5、 NETworkManager :管理和解决网络问题的工具。它集成了 IP 和端口扫描、WiFi 分析器、跟踪路由、DNS 查询等工具

6、 ppsspp :能够运行在 Android 和 PC 上的开源 PSP 模拟器

7、 leocad :用来创建虚拟乐高模型的 CAD 工具。适用于 Windows、Linux 和 macOS 系统

8、 csshake :用 CSS 实现抖动效果

9、 MangoDB :真正开源的 MongoDB 替代品。它底层采用 PostgreSQL 作为存储引擎,用 Go 语言实现了 MongoDB 协议,所以几乎兼容所有的 MongoDB 库,迁移起来毫无负担。如果你用不到 MongoDB 的高级功能,还受限于它的开源协议,那么这个项目可作为 MongoDB 的开源替代方案。它才刚刚起步,建议观望一段时间或做足测试再用于生产环境

10、 caddy :用 Go 编写的轻量级 Web 服务器。它相较于 Apache、Nginx 这些知名 Web 服务器,独特点在于提供了编译好的可执行文件,实现了真正的开箱即用。无需任何配置即可拥有免费的 HTTPS、自动把 Markdown 文件转化成 HTML 等人性化的功能。如果是搭建中小型的 Web 服务,它完全够用而且省时省心

11、 croc :可以让任意两台计算机,安全方便地传输文件和文件夹的工具。轻松实现端到端加密的跨平台文件传输,还支持多文件传输、传输中断和恢复等功能

12、 jnativehook :获取键盘和鼠标事件的 Java 库。轻松监听按键、鼠标移动、点击等事件

13、 spider-flow :用流程图的方式编写爬虫的平台。无需写代码就可以快速完成一个简单的爬虫

14、 greenDAO :高性能的 Android ORM 库。拥有体积小、易于使用、支持数据库加密等特点,通过它 Android 开发者可以采用面向对象的方式操作数据库,不需要再手写和拼接 SQL 啦

15、 vue-color-avatar :纯前端实现的矢量风格头像生成网站。可以通过搭配不同的素材,生成个性化头像。该项目使用 Vite + Vue3 开发,能够帮助前端初学者熟悉 Vue3 语法并掌握项目搭建的相关知识

16、 colorfu :自动生成由文字/颜色/图片/纹理元素组成的壁纸

17、 pm2 :Node.js 的进程管理工具。它容易上手操作简单,可以有效地提高 Node.js 程序运行的稳定性,支持自动重启、负载均衡、不停服务重启、性能监控等功能,多用于生产环境中管理、监控 Node.js 进程

18、 automa :通过图形化界面拖拽功能模块,实现浏览器自动操作的扩展工具。轻松实现自动填表、截图、定时执行等操作。让浏览器自动完成预设工作流的插件,从而减少重复性操作提高效率

19、 PyWebIO :快速构建 Web 应用的 Python 工具。通过该项目你可在不写 HTML、CSS、JS 代码的前提下,仅用 Python 快速完成一个包含数据展示、表单的小型 Web 应用页面

20、 pottery :以 Python 的方式操作 Redis 的库。忘记那些 Redis 命令吧,只要你知道如何使用 Python 字典,那么你就会用这个库操作 Redis

21、 zulip :完全开源的企业级即时通讯项目。后端采用 Python 语言实现性能足够强大,功能齐全相当于开源、免费的 Slack,拥有拖拽上传文件、代码高亮、Markdown 语法、应用整合、容易接入的 API 等功能,还支持 Web、PC、iOS 和 Android 主流平台,众多知名企业都在用,能够有效地提高团队沟通和办公效率。同时该项目对新手用户友好,如果你想加入一个不错的 Python 开源项目,推荐你花时间研究下它一定会有所收获

22、 webssh :简单的 SSH 连接服务器的 Python Web 应用。该项目后端采用 Tornado Web 框架和 Python SSH 库 paramiko,前端是 TypeScript 写的命令行前端组件 Xterm.js 实现。整个项目简单还具有实用价值,可作为 Python Web 的实战项目学习

23、 django-debug-toolbar :Django 的调试工具栏。可显示当前请求和响应有关的各种调试信息,包括耗时、SQL、配置、性能等信息

24、 hyperfine :命令行基准测试工具。可用来查看和对比命令的耗时,支持多次运行的统计分析、结果导出等功能

25、 xcode-dev-cleaner :用于清理各种 Xcode 的缓存数据,释放存储空间。注意是清除 Xcode 缓存数据,不是卸载 Xcode 哈

26、 toml :更易读和易于维护的配置文件格式。如果你厌倦了 INI 的局限性、层层嵌套的 JSON 和 YAML 令人心惊胆战的缩进语法,不防给 TOML 一个机会,它支持多种数据类型、抛弃了缩进和嵌套,而且众多流行编程语言都有对应的库。TOML 已经足够成熟,绝对值得一试

27、 waka-readme-stats :自动在 GitHub 个人首页展示编程时长的工具。该项目通过 WakaTime 记录用户在 IDE 的使用时间,统计编程时长和数据,然后采用 GitHub Action 自动获取并动态更新到 GitHub 个人首页。轻而易举地展示自己的编程时长

28、 PathPlanning :常见的路径规划算法集合。项目包含了 Python 代码实现、运行过程动画以及相关论文

29、 howdy :为 Linux 系统提供人脸识别解锁电脑的工具。通过电脑内置的摄像头和红外设备,实现了类似 Windows Hello 风格的身份认证,可用于登陆、锁屏、sudo 等任何需要输入密码的地方

30、 The-Open-Book :开源的电子水墨屏阅读设备。动手能力强的同学可跟着这个项目,从焊电路板开始亲手制作出一个类 Kindle 的 4.2 英寸阅读设备

31、 fl_chart :Flutter 图表库。它支持折线图、条形图、饼图、散点图和雷达图

32、 ugo-compiler-book :《从头开发一个迷你 Go 语言》该书教你从头实现迷你 Go 语言,内容包含了词法解析、语法树构建、函数闭包、接口、CGO 的实现等内容

33、 archbase :教科书《计算机体系结构基础》第三版

34、 spring-in-action-v6-translate :《Spring 实战第 6 版》中文翻译

35、 best_AI_papers_2021 :2021 年必看的人工智能论文列表。该项目不是简单的罗列论文,它不仅包含相关论文的代码、效果展示,还有深入的文章和讲解视频。通过学习这些前沿的人工智能论文,提前了解 AI 在未来更多可能性

36、 AnimeGANv2 :可以将图片和视频转换成漫画风格的工具。采用的是神经风格迁移+生成对抗网络(GAN)的组合,转换速度快

感谢您的阅读,如果觉得内容还不错的话 求赞、求分享 ,您的每一次支持都将让 HelloGitHub 变得更好!

使用scratch构建最小化Go程序的docker image

由于Golang编译之后的文件是二进制,而scratch是docker最基础的空image,所以可以使用scratch来构建Go程序的docker image,使得最终构建的image最小化.

构建image过程分为两步:

对于无需cgo交叉编译的程序,使用scratch来作为最终运行的基础image非常合适。

首先,选择合适版本的golang基础image来build,这里没有必要选择更小的golang alpine,build过程中pull一般会有缓存所以pull速度差别不大,此外alpine中没有git和ssl,我们在构建image过程中都有可能用到,况且alpine也不会影响最终image大小。

禁掉cgo交叉编译,我们服务器一般为linux amd64,build二进制文件。

对于绝大多数go程序而言,是无需root来运行,根据docker best practice,使用non-root来运行程序能够带来更好的安全性,所以我们使用non-root用户来运行,创建一个appuser,之后再拷贝到scratch运行image中。(scratch是空image,所以在builder中创建user,再拷贝。)

多数程序可能会用到ssl,我们将builder中的crt拷贝一下即可。(如果builder是alpine,不能拷贝,需要在alpine中apk先预装一下。)

完整版Dockerfile

有些Go程序是需要cgo交叉编译的,例如ethereum. 对于需要cgo的程序,相对于scratch,更推荐使用alpine来作为基础image,原因是alpine中带有libc,并且体积也才2MB多。而scratch中没有,当然也可以在builder中ldd依赖并拷贝到scratch中。只是用alpine会更方便一些。

在alpine中只要软链接一下就可以使用。

此外,创建non-root用户的步骤也没有必要在builder中进行了,可以直接在alpine中创建。

完整版Dockerfile

golang程序在编译时去掉了符号信息,怎么逆向

使用原始build编译的大小

6,107KB

通过去除部分连接和调试,build部分参数查看结果。

-a 强制编译所有依赖包。

-s 去掉符号信息

-w 去掉DWARF调试信息,得到的程序就不能用gdb调试了

不建议s和w同时使用。

go build -ldflags -w test.go

但是体积还是有点大

4,633KB

为什么现在很多企业都不用易语言呢?就因为嫌弃他是中文吗?

原因一一列举如下:

易语言是一个自主开发,适合国情,不同层次不同专业的人员易学易用的汉语编程语言。

1、易语言是从编码到集成环境全部拥有知识产权的一套产品,而这在其他编程语言中是不可想像的。大多数其他的BASIC语言、Pascal语言、Go语言、C语言、Lua语言、Javascript等等语言都没有对编码的知识产权(Java语言不太清楚),几乎全部免费开放。

所以你有可以在同一个语言里,找到无数个不同版本的编译器;以C语言为例,从免费的Watcom C Compiler、GNU C Compiler到收费的Visual Studio、Borland C Compiler,不同版本的编译器之间,可以说是自由竞争的关系;今天你觉得GCC代码生成效率太低,明天就可以改用Watcom C Compiler,后天你兜兜里闲钱多了,想玩玩可视化或者开发Windows应用,转身就可以改用Visual Studio,……(以下省略无数的C编译器)

用户的选择多,编译器的应用生态就好,用户也有机会用到更加物美价廉的编译器,而不是只能吊死在一棵树上。这也就是为何现在的很多

2、资质:求职者被企业录用,看的就是能力,但是可以证明它的,不过就文凭和证书:像三级数据库证书、二级C程序设计语言证书、好像还有研究生编程水平证书等等。可是易语言的证书在哪里呢,要去哪里考呢?难道要花钱去公证处证明“本人具有某某某企业所需易语言编程能力”?

3、应用:其实还是生态问题,别的什么的语言起步早,使用人群广泛,程序之间衔接的方式也多,现成的可以提供参考的程序代码也多,甚至于还有各专业领域、网上社区/社群的共享的代码资源,像BSD协议的,GPL协议的,Mozilla协议的,等等等等;如今只要你能找,会搜索,不会代码,专业内的编程问题,基本上都不是问题。但是易语言……,这个不太好找。

加上很多对代码能力有需求的企业,内部很早可能已经有工程人员在维护代码库了,易语言出现太晚;在现代软件工程管理技术广泛应用的时代,代码工程量无限扩张的时代,如若改弦更张,代码太多,事情太难,成本投入难以预期。

4、知识产权贸易:今天的世界是全球化的世界,是贸易全球化的世界。2001年中国加入 WTO,签署了关于货物贸易、服务贸易、知识产权贸易的一揽子协议。有句话“引进来,走出去”,引什么?就是要引资,引人才,引技术。2000年是中国经济飞速发展的时代,正是处于对技术的高需求时期。用土到掉渣的话来说,当时很多代码、集成电路、机床,那都是Made in外国的,用的语言当然也是外国的,易语言当然就用不上。不学着这些语言,那么该怎么使用、消化外来的知识,又该怎么转化别人的知识,为我所用,到最后实现“走出去”呢

2000年易语言在中国发布了最早的版本,而其影响力有限,原因就在这里。

5、中国计算机技术的发展历史,就是中国高技术发展史的重要部分,与国家发展息息相关;(在2000年的很早以前)从863计划开始,国家投入大量人力物力,首要的是缩小与发达国家的差距,提高计算能力和相关软硬件技术,服务于国防事业、科研事业,并最终改善民生,服务人民。(国防科技大学就出版了很多关于计算机技术的书)从学科科研发展历史这个角度来看,宗旨在于普及中文编程的易语言不是人才培养、科教强国的重点所在。在技术发展这一块,完全不必搞“大炼钢”式的全民行动,反而只要能集中力量,做好有助于国家综合实力的事就行。(像以前的计算机上计算的导弹运行轨迹,用的是什么编程语言不重要,机器语言、汇编语言都OK,不在乎文学式的大家都懂,而在于科研人员能够实现目标,国家可以实现其目的)


分享文章:go语言精简体积 go语言nil
网站网址:http://jkwzsj.com/article/dojiejg.html

其他资讯