经过几周的密集练习,我们开始对 Zig 有了感觉了吧。我反正已经开始能熟练的安装 Zig 并搭建项目了。本篇将把这些核心的技能加以混合使用,拿编写命令行程序为目的,把整个流程给大家跑一遍,手把手教导一遍,和大家一起梳理。
注意:Zig 目前还没有到 V1.0 版本,也就是还无法稳定,所以你不要指望拿它去写成熟应用。我们主要目的就是玩,好处是这个编程语言是社区驱动的,迭代快,语法比 C 要高级点,本身也能替代 C,为以后写高级程序做好储备。后面出错,也不要抱怨,直接社区沟通,让我们一起交流。
首先,我们要找到处理命令行程序参数和打印字符串的框架,这里,有技巧。我是通过搜索 zig-awesome 这类关键字项目去找的,前人栽树,肯定好乘凉:
GitHub - jiacai2050/zigcli: A toolkit for building command lines programs in Zig.A toolkit for building command lines programs in Zig. - jiacai2050/zigclihttps://github.com/jiacai2050/zigcli/tree/main
工程介绍如下:
Modules
Zig modules to help developers build their awesome cli programs. Currently there are:
simargs
, which is used to parse argumentspretty-table
, which is used to print aligned and formatted tables
这个类库有了,我们怎么用呢。按下面操作一起练习一遍:
1、创建项目:
❯ mkdir zig-simargs; cd zig-simargs;
❯ zig init
❯ ls
build.zig build.zig.zon src zig-cache zig-out
2、按zigcli 的介绍,加入类库:
zig fetch --save=zigcli https://github.com/jiacai2050/zigcli/archive/${COMMIT}.tar.gz
这里 COMMIT就找最新的 commitid 贴进去就可以。当你执行完之后,打开 buildl.zig.zon,就会看到如下新增内容:
.dependencies = .{
.zigcli = .{
.url = "https://github.com/jiacai2050/zigcli/archive/54d095c0a53669b2f2ff4e173e8c22f47d496eda.tar.gz",
.hash = "1220e8fb37224ab6ee9c575129594a808643b548596d63dd8b87cb42e22a7eed9f51",
},
},
确认完自动加入的内容,需要自己手工在 build.zig 手工加入类库声明:
const zigcli = b.dependency("zigcli", .{});
// Currently zigcli provide two modules.
exe.root_module.addImport("simargs", zigcli.module("simargs"));
exe.root_module.addImport("pretty-table", zigcli.module("pretty-table"));
3.通过 build.zig 了解到主 main 文件是 src/main.zig,打开加入样例代码如下:
const std = @import("std");
const Table = @import("pretty-table").Table;
const Separator = @import("pretty-table").Separator;
const String = @import("pretty-table").String;
pub fn main() !void {
const t = Table(2){
.header = [_]String{ "Language", "Files" },
.rows = &[_][2]String{
.{ "Zig", "3" },
.{ "Python", "2" },
.{ "C", "12" },
.{ "Ruby", "5" },
},
.footer = [2]String{ "Total", "22" },
.mode = .box,
};
const out = std.io.getStdOut();
try out.writer().print("{}", .{t});
}
然后在目录下跑命令:zig build run 返回
❯ zig build run
┌────────┬─────┐
│Language│Files│
├────────┼─────┤
│Zig │3 │
│Python │2 │
│C │12 │
│Ruby │5 │
├────────┼─────┤
│Total │22 │
└────────┴─────┘
一个完整的命令行程序就编写完成。是不是很轻松。代码量不多,自己多联系几遍,掌握 Zig 编程的乐趣吧。