os.Args获取命令行参数
- os.Args参数列表
- 0 :程序路径(go run 运行
0 为临时工作目录的路径
,编译后运行,0 二进制文件名
) - 1 第一个参数
- 2 第二个参数...
- ...
- 0 :程序路径(go run 运行
- len(os.Args) 参数数量
示例
/**
* @Author : jinchunguang
* @Date : 19-11-4 上午10:37
* @Project : tcp-chat
*/
package main
import (
"fmt"
"os"
)
func main() {
// 获取命令行参数
fmt.Println("命令行参数数量:", len(os.Args))
for k, v := range os.Args {
fmt.Printf("args[%v]=[%v]\n", k, v)
}
fmt.Printf("username=%v password=%v host=%v port=%v ", os.Args[2], os.Args[4], os.Args[6], os.Args[8])
}
run 直接运行
编译运行
flag包获取命令行参数
/**
* @Author : jinchunguang
* @Date : 19-11-4 上午10:37
* @Project : tcp-chat
*/
package main
import (
"flag"
"fmt"
"os"
)
// 用户
var username string
// 密码
var password string
// 主机名
var host string
// 端口号
var port int
func main() {
/*
flag 要放在循环外部,不能重复定义
*/
// 变量,参数名,默认值,解释说明(-h显示)
flag.StringVar(&username, "u", "", "用户名")
flag.StringVar(&password, "p", "", "密码")
flag.StringVar(&host, "h", "127.0.0.1", "主机地址")
flag.IntVar(&port, "P", 3306, "端口号")
flag.Parse()
// visit只包含已经设置了的flag
fmt.Println("------ flag遍历开始 ------")
flag.Visit(func(f *flag.Flag) {
fmt.Println(f.Name, f.Value, f.Usage, f.DefValue)
})
fmt.Println("------ flag遍历结束 ------")
/*
测试逻辑
*/
// 用户名密码不能为空
if username == "" || password == "" {
flag.PrintDefaults()
fmt.Println("warn: 用户名,密码不能为空", username, password)
os.Exit(1)
}
// 用户名密码指定为root、root
if username != "root" || password != "root" {
flag.PrintDefaults()
fmt.Println("warn: 用户名,密码不正确", username, password)
os.Exit(1)
}
// 打印
fmt.Printf("参数值:username=%v password=%v host=%v port=%v ", username, password, host, port)
}
用户名,密码不能为空
用户名,密码不正确
正常输出
fmt.Scanf()来捕捉输入
/**
* @Author : jinchunguang
* @Date : 19-11-4 上午10:37
* @Project : tcp-chat
*/
package main
import (
"fmt"
)
// 用户
var username string
// 密码
var password string
// 主机名
var host string
// 端口号
var port int
func main() {
fmt.Println("请输入用户名:")
if _, err := fmt.Scanf("%s", &username); err != nil {
fmt.Printf("%s\n", err)
return
}
fmt.Println("请输入密码:")
if _, err := fmt.Scanf("%s", &password); err != nil {
fmt.Printf("%s\n", err)
return
}
fmt.Println("请输入主机地址:")
if _, err := fmt.Scanf("%s", &username); err != nil {
fmt.Printf("%s\n", err)
return
}
fmt.Println("请输入端口:")
if _, err := fmt.Scanf("%s", &username); err != nil {
fmt.Printf("%s\n", err)
return
}
// 打印
fmt.Printf("参数值:username=%v password=%v host=%v port=%v ", username, password, host, port)
}
示例
bufio.Scanner 来捕捉输入
/**
* @Author : jinchunguang
* @Date : 19-11-4 上午10:37
* @Project : tcp-chat
*/
package main
import (
"bufio"
"fmt"
"os"
)
func main() {
scanner := bufio.NewScanner(os.Stdin)
fmt.Println("请输入用户名:")
scanner.Scan()
username := scanner.Text()
if err := scanner.Err(); err != nil {
fmt.Fprintln(os.Stderr, "reading standard input:", err)
}
fmt.Println("请输入密码:")
scanner.Scan()
password := scanner.Text()
if err := scanner.Err(); err != nil {
fmt.Fprintln(os.Stderr, "reading standard input:", err)
}
fmt.Println("请输入主机地址:")
scanner.Scan()
host := scanner.Text()
if err := scanner.Err(); err != nil {
fmt.Fprintln(os.Stderr, "reading standard input:", err)
}
fmt.Println("请输入用端口:")
scanner.Scan()
port := scanner.Text()
if err := scanner.Err(); err != nil {
fmt.Fprintln(os.Stderr, "reading standard input:", err)
}
fmt.Printf("参数值:username=%v password=%v host=%v port=%v ", username, password, host, port)
}
示例
[图片上传失败...(image-d15dd0-1572847112810)]
bufio.NewReader 来捕捉输入
/**
* @Author : jinchunguang
* @Date : 19-11-4 上午10:37
* @Project : tcp-chat
*/
package main
import (
"bufio"
"fmt"
"os"
"strings"
)
func main() {
text:=""
reader := bufio.NewReader(os.Stdin)
fmt.Println("请输入用户名")
text, _ = reader.ReadString('\n')
// 替换掉回车,否则会有空行
username := strings.Replace(text, "\n", "", -1)
fmt.Println("请输入密码")
text, _ = reader.ReadString('\n')
// 替换掉回车,否则会有空行
password := strings.Replace(text, "\n", "", -1)
fmt.Println("请输入主机地址")
text, _ = reader.ReadString('\n')
// 替换掉回车,否则会有空行
host := strings.Replace(text, "\n", "", -1)
fmt.Println("请输入端口号")
text, _ = reader.ReadString('\n')
// 替换掉回车,否则会有空行
port := strings.Replace(text, "\n", "", -1)
fmt.Printf("参数值:username=%v password=%v host=%v port=%v ", username, password, host, port)
}
示例
由于时间问题,先写到这吧
有疑问加站长微信联系(非本文作者)