Go 语言flag库使用指南

flag 库是 Go 标准库中用于解析命令行参数的工具。它可以将命令行输入的参数提取并绑定到程序中的变量,适用于需要从终端接收用户输入的场景。本文将介绍 flag 库的基本用法、常用函数以及示例。

os.Args:获取命令行参数

os.Args 是一个字符串切片([]string),用于获取命令行传入的所有参数。它以空格分隔参数。

示例代码

go 复制代码
package main

import (
	"fmt"
	"os"
)

func main() {
	res := os.Args
	fmt.Println(res)
}

执行结果

go 复制代码
D:\Code\Program\fucking-golang\go-flag> go run main.go a b c d
[C:\Users\pzj\AppData\Local\Temp\go-build4165448248\b001\exe\main.exe a b c d]

flag.Parse:解析命令行参数

flag.Parse()flag 库的核心函数,用于解析命令行参数并将其绑定到通过 flag 定义的变量上。在调用 flag.Parse() 之前,需要先使用 flag.Type 函数定义参数。

flag 库常用函数

flag.Args() 返回解析后剩余的非标志参数(即不以 --- 开头的参数),类型为 []string
flag.NArg() 返回 flag.Args() 中非标志参数的个数。
flag.NFlag() 返回命令行中已解析的标志参数个数。

flag.Type:定义命令行参数

flag 库提供了多种方法来定义不同类型的命令行参数,格式如下:

go 复制代码
flag.Type(name string, value Type, usage string) *Type

name:参数名称(在命令行中以 -name--name 形式使用)。
value:默认值。
usage:参数的用途说明(用于生成帮助信息)。

返回值:指向该类型变量的指针。

示例代码

以下是一个完整的示例,展示如何使用 flag 库解析不同类型的命令行参数:

go 复制代码
package main

import (
	"flag"
	"fmt"
)

var (
	name   = flag.String("name", "", "get name from terminal")
	age    = flag.Int64("age", 0, "get age from terminal")
	isMale = flag.Bool("is_male", true, "get isMale from terminal")
	score  = flag.Float64("score", 99.99, "get score from terminal")
)

func main() {
	flag.Parse()
	fmt.Println(*name, *age, *isMale, *score)
	fmt.Println(flag.Args())
	fmt.Println(flag.NArg())
	fmt.Println(flag.NFlag())
}

执行命令

go 复制代码
D:\Code\Program\fucking-golang\go-flag> go run main.go -name=codepzj -age=21 -is_male=true -score=100.00 a b c

输出结果

csharp 复制代码
codepzj 21 true 100
[a b c]
3
4

总结

flag 库提供了一种简单而强大的方式来处理命令行参数。通过 flag.Type 定义参数、flag.Parse() 解析参数,以及辅助函数(如 flag.Args()flag.NArg()flag.NFlag()),开发者可以轻松实现灵活的命令行工具。结合实际需求,flag 库是 Go 语言开发中不可或缺的工具之一。

相关推荐
摇滚侠3 小时前
Spring Boot 3零基础教程,WEB 开发 静态资源默认配置 笔记27
spring boot·笔记·后端
天若有情6735 小时前
Java Swing 实战:从零打造经典黄金矿工游戏
java·后端·游戏·黄金矿工·swin
一只叫煤球的猫6 小时前
建了索引还是慢?索引失效原因有哪些?这10个坑你踩了几个
后端·mysql·性能优化
magic334165637 小时前
Springboot整合MinIO文件服务(windows版本)
windows·spring boot·后端·minio·文件对象存储
开心-开心急了8 小时前
Flask入门教程——李辉 第一、二章关键知识梳理(更新一次)
后端·python·flask
掘金码甲哥8 小时前
调试grpc的哼哈二将,你值得拥有
后端
小学鸡!8 小时前
Spring Boot实现日志链路追踪
java·spring boot·后端
用户21411832636029 小时前
OpenSpec 实战:用规范驱动开发破解 AI 编程协作难题
后端
Olrookie10 小时前
若依前后端分离版学习笔记(二十)——实现滑块验证码(vue3)
java·前端·笔记·后端·学习·vue·ruoyi
LucianaiB10 小时前
招聘可以AI面试,那么我制作了一个AI面试教练不过分吧
后端