Golang学习笔记(09-6-命令行参数解析)

126 阅读1分钟

1. flag包常用方法和函数

flag 包的使用分为三个步骤:
1.	定义接收参数的变量,一般都把这些变量封装到一个结构体中
2.  注册变量到flag包,常用的类型有: stringintbool
3.	执行 Parse() 方法解析参数

# 常用方法
1.  flag.StringVar()
		Syntax: func StringVar(p *string, name string, value string, usage string)
    Man:		StringVar用指定的名称、默认值、使用信息注册一个string类型flag,并将flag的值保存到p指向的变量。

2.  flag.StringVar()
		Syntax: func IntVar(p *int, name string, value int, usage string)
    Man:		IntVar用指定的名称、默认值、使用信息注册一个int类型flag,并将flag的值保存到p指向的变量。

3.  flag.BoolVar()
		Syntax: func BoolVar(p *bool, name string, value bool, usage string)
    Man:		BoolVar用指定的名称、默认值、使用信息注册一个bool类型flag,并将flag的值保存到p指向的变量。

4.  flag.StringVar()
		Syntax: func Parse()
    Man:		从os.Args[1:]中解析注册的flag。必须在所有flag都注册好而未访问其值时执行。

2. 案例

flag 包常用在一个项目的配置 config 文件下进行参数处理,处理的过程一般写在 init() 函数中,用于从命令行接收参数作为全局配置,如数据库信息、日志等级等等。

package config

import "flag"

type Config struct {
	Host       string
	ListenPort int
	User       string
	Password   string
	Debug      bool
}

var GlobalConfig Config

func init() {
	flag.StringVar(&GlobalConfig.Host, "h", "127.0.0.1", "监听的IP")
	flag.IntVar(&GlobalConfig.ListenPort, "p", 8080, "监听的端口")
	flag.StringVar(&GlobalConfig.User, "u", "root", "登陆的用户")
	flag.StringVar(&GlobalConfig.Password, "pwd", "123456", "用户密码")
	flag.BoolVar(&GlobalConfig.Debug, "d", false, "是否开启debug模式")
	flag.Parse()
}
package main

import (
	"fmt"
	"studygo/models/flag/config"
)

func main()  {
	fmt.Println("Host:", config.GlobalConfig.Host)
	fmt.Println("Host:", config.GlobalConfig.ListenPort)
	fmt.Println("Host:", config.GlobalConfig.User)
	fmt.Println("Host:", config.GlobalConfig.Password)
	fmt.Println("Host:", config.GlobalConfig.Debug)
}
E:\Projects\Go\src\studygo\models\flag\main>go run main.go
Host: 127.0.0.1
Host: 8080
Host: root
Host: 123456
Host: false