美文网首页GO相关
golang 终端读写

golang 终端读写

作者: 零一间 | 来源:发表于2019-11-04 13:58 被阅读0次

    os.Args获取命令行参数

    • os.Args参数列表
      • 0 :程序路径(go run 运行 0 为临时工作目录的路径,编译后运行,0 二进制文件名)
      • 1 第一个参数
      • 2 第二个参数...
      • ...
    • 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 直接运行

    image.png

    编译运行

    image.png

    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)
    }
    
    

    用户名,密码不能为空

    image.png

    用户名,密码不正确

    image.png

    正常输出

    image.png

    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)
    
    }
    
    

    示例


    image.png

    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)
    
    }
    
    

    示例


    image.png

    由于时间问题,先写到这吧

    相关文章

      网友评论

        本文标题:golang 终端读写

        本文链接:https://www.haomeiwen.com/subject/ftqdbctx.html