main 与退出码
main 是程序的入口,有四种形态,按程序是否需要接收命令行实参选择:不需要返回值、需要返回退出码、需要接收命令行参数、以及它们的组合。
| 形态 | 签名 | 用途 |
|---|---|---|
| 最简 | func main() | 只执行,不返回、不收参 |
| 返回退出码 | func main() -> int | 返回一个可检查的结果 |
| 接收参数 | func main(args: string[]) | 读命令行实参 |
| 组合 | func main(args: string[]) -> int | 两者都要 |
入口函数不需要可见性修饰,public 写不写都不影响运行。
退出码
-> int 形态里,return 的整数就是进程退出码:return 7 的程序,进程退出码就是 7。0 表示一切正常,非零值可以由开发者自己定含义。退出码可以检查程序是否成功结束,而不需要去解析打印内容。
$ mush run app.ms
$ echo $?
0PowerShell 查退出码用 $LASTEXITCODE,bash 用 $?。
命令行参数
给 main 加一个 args: string[] 参数,就能接收命令行实参。
执行 mush run args.ms a b c 时,args 里依次是 "a"、"b"、"c",不包括 args.ms 本身。
args.ms
func main(args: string[]) -> int
{
if args.Length == 0
{
print("no args");
return 1;
}
print($"hello, {args[0]}");
return 0;
}$ mush run args.ms ada
hello, ada
$ echo $?
0
$ mush run args.ms
no args
$ echo $?
1args 的类型 string[] 是字符串数组:args.Length 取个数,args[0] 按下标取元素,语法在下文各页展开。声明成 list<string> 同样合法,两种写法等价,语言按声明的类型传递进去:写 string[] 拿到数组,写 list<string> 拿到列表。脚本入口默认写 string[]。
注意
- 退出码是
int;返回非 0 不算「编译错误」,只把信息交给调用方。 - 没有显式
-> int时程序以 0 退出。 args声明为string[]或list<string>都行,入口校验只认这两个形状,其余形参写法均会在编译期拒绝。
最后更新于 2026年10月8日
