GO相关

golang 终端读写

2019-11-04  本文已影响0人  零一间

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

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

上一篇下一篇

猜你喜欢

热点阅读