1. package main
  2. import (
  3. "bufio"
  4. "fmt"
  5. "os"
  6. )
  7. func main() {
  8. reader := bufio.NewReader(os.Stdin)
  9. fmt.Println("请输入你想要输入的内容,按回车结束")
  10. fmt.Print("-> ")
  11. text, err := reader.ReadString('\n')
  12. if err != nil {
  13. panic(fmt.Errorf("发生致命错误: %w \n", err))
  14. }
  15. //TODO 下面我们就可以根据text输入的内容进行调用不同的函数了。
  16. fmt.Println("刚接收到的内容是:",text)
  17. }

第一种方法:os库

os可以通过变量Args来获取命令参数,os.Args返回一个字符串数组,其中第一个参数就是执行文件本身。

  1. package main
  2. import (
  3. "fmt"
  4. "os"
  5. )
  6. func main() {
  7. fmt.Println("命令行的参数有", len(os.Args))
  8. // 遍历 os.Args 切片,就可以得到所有的命令行输入参数值
  9. for i, v := range os.Args {
  10. fmt.Printf("args[%v]=%v\n", i, v)
  11. }
  12. }

结果:

  1. > go run ./main.go laofan 123 456 789
  2. 命令行的参数有 5
  3. args[0]=Temp\go-build\b001\exe\main.exe
  4. args[1]=laofan
  5. args[2]=123
  6. args[3]=456
  7. args[4]=789
  8. >

第二种方法:flag包

如像 mysql 那样:mysql -u root -p 123456,可以指定输入内容,输入顺序可变。 flag包实现了命令行参数的解析。

使用flag来操作命令行参数,支持的格式如下:像flag.Int、flag.Bool、flag.String这样的函数格式都是一样的,第一个参数表示参数名称,第二个参数表示默认值,第三个参数表示使用说明和描述。flag.StringVar这样的函数第一个参数换成了变量地址,后面的参数和flag.String是一样的。

  1. package main
  2. import (
  3. "flag"
  4. "fmt"
  5. )
  6. func main() {
  7. // 定义几个变量,用于接收命令行的参数值
  8. var user string
  9. var password string
  10. var host string
  11. var port int
  12. // &user 就是接收命令行中输入 -u 后面的参数值,其他同理
  13. flag.StringVar(&user, "u", "root", "账号,默认为root")
  14. flag.StringVar(&password, "p", "", "密码,默认为空")
  15. flag.StringVar(&host, "h", "localhost", "主机名,默认为localhost")
  16. flag.IntVar(&port, "P", 3306, "端口号,默认为3306")
  17. // 解析命令行参数写入注册的flag里
  18. flag.Parse()
  19. // 输出结果
  20. fmt.Printf("user:%v\npassword:%v\nhost:%v\nport:%v\n",
  21. user, password, host, port)
  22. }

结果:

  1. > go run ./main.go -p 123 -u laofan -P 3306 -h 127.0.0.1
  2. userlaofan
  3. password123
  4. host127.0.0.1
  5. port3306
  6. >

第三种方法:flag包另一种写法

  1. package main
  2. import (
  3. "flag"
  4. "fmt"
  5. )
  6. func main () {
  7. //获取命令参数
  8. Act := flag.String("act", "", "is ok")
  9. date := flag.String("date", "", "id")
  10. // 解析命令行参数写入注册的flag里
  11. flag.Parse()
  12. fmt.Println("act :", *Act)
  13. fmt.Println("date :", *date)
  14. }

结果:

  1. > go run ./main.go -act laofan -date today
  2. act : laofan
  3. date : today
  4. >

参考:https://www.fujieace.com/golang/os-flag.html