【原創】go語言學習(十四)IO操做1

目錄:

  • 格式化輸入
  • 格式化輸出
  • 終端輸入輸出背後的原理理
  • bufio包的使用
  • 命令行參數處理理和urfave/cli使用

格式化輸入

一、從終端獲取⽤用戶的輸入git

格式化輸入github

fmt.Scan(a …interface{}): 從終端獲取⽤用戶輸入,存儲在Scanln中的參數里,空格和換行符做爲分隔符app

fmt.Scanf(format string, a…interface{}): 格式化輸入,空格做爲分隔符,佔位符和格式化輸出一致orm

fmt.Scanln(a …interface{}): 從終端獲取⽤用戶輸入,存儲在Scanln中的參數里,空格做爲分隔符,遇到換行符結束blog

二、終端操做實例字符串

package main
import (
    "fmt"
)
var (
    firstName, lastName, s string
    i int
    f float32
    input = "56.12 / 5212 / Go"
    format = "%f / %d / %s"
)
func main() {
    fmt.Println("Please enter your full name: ")
    fmt.Scanln(&firstName, &lastName)
    // fmt.Scanf("%s %s", &firstName, &lastName)
    fmt.Printf("Hi %s %s!\n", firstName, lastName) // Hi Chris Naegels
    fmt.Sscanf(input, format, &f, &i, &s)
    fmt.Println("From the string we read: ", f, i, s)
}

  

三、從字符串中獲取輸入input

fmt.Sscanf(str, format string, a…interface{}): 格式化輸入,空格做爲分隔符,佔位符和格式化輸出一致cmd

fmt.Sscan(str string, a …interface{}): 從終端獲取⽤用戶輸入,存儲在Scanln中的參數⾥裏里,空格和換行符做爲分隔符string

fmt.Sscanln(str string, a …interface{}): 從終端獲取⽤用戶輸入,存儲在Scanln中的參數⾥裏里,空格做爲分隔符,遇到換行符結束it

格式化輸出

一、格式化輸出

fmt.Println(a …interface{}): 把零個或多個變量量打印到終端, 並換⾏行行
fmt.Printf(format string, a…interface{}): 格式化輸出,並打印到終端
fmt.Print(a …interface{}): 把零個或多個變量量打印到終端

二、格式化並返回字符串

fmt.Sprintln(a …interface{}): 把零個或多個變量量按空格進⾏行行格式化並換⾏行行,返回字符串串
fmt.Sprintf(format string, a…interface{}): 格式化並返回字符串串
fmt.Sprint(a …interface{}): 把零個或多個變量量按空格進⾏行行格式化,返回字符串串

 

終端輸入輸出背後的原理理

一、終端實際上是一個文件

os.Stdin:標準輸⼊入的⽂文件實例例,類型爲*File
os.Stdout:標準輸出的⽂文件實例例,類型爲*File
os.Stderr:標準錯誤輸出的⽂文件實例例,類型爲*File

二、以文件的方式操做終端

File.Read(b []byte)
File.Write(b []byte)
終端讀取:
終端輸出:
File.WriteString(str string)

三、從文件獲取輸入

格式化輸入
fmt.Fscan(file, a …interface{}): 從文件獲取用戶輸入,存儲在Scanln中的參數里,空格和換行符做爲分隔符

fmt.Fscanf(file, format string, a…interface{}): 從文件格式化輸入,空格做爲分隔符,佔位符和 格式化輸出一致

fmt.Fscanln(file, a …interface{}): 從文件獲取用戶輸入,存儲在Scanln中的參數里,空格做爲分隔符,遇到換行符結束

四、格式化輸出到文件中
格式化輸出
fmt.Fprintln(file, a …interface{}): 把零個或多個變量量寫入到文件中, 並換行
fmt.Fprintf(file, format string, a…interface{}): 格式化輸出,並寫⼊入到文件中
fmt.Fprint(file, a …interface{}): 把零個或多個變量量寫入到文件

bufio包的使用

一、帶緩衝區的讀寫

package main
import (
    "bufio"
    "fmt"
    "os"
)
var inputReader *bufio.Reader
var input string
var err error
func main() {
    inputReader = bufio.NewReader(os.Stdin)
    fmt.Println("Please enter some input: ")
    input, err = inputReader.ReadString('\n')
    if err == nil {
        fmt.Printf("The input was: %s\n", input)
    }
}

  

命令行參數處理理和urfave/cli使用

一、os.Args命令行參數的切片

package main
import (
    "fmt"
    "os"
)
func main() {
    who := "Alice"
    if len(os.Args) > 1 {
        who += strings.Join(os.Args[1:], " ")
    }
    fmt.Println("Good Morning", who)
}

  

二、使⽤用flag包獲取命令行參數

package main
import (
    "flag"
    "fmt"
)
func parseArgs() {
    flag.IntVar(&length, "l", 16, "-l ⽣成密碼的長度")
    flag.StringVar(&charset, "t", "num",
        `-t 制定密碼⽣成的字符集,
        num:只使⽤數字[0-9],
        char:只使⽤英⽂字母[a-zA-Z],
        mix: 使⽤數字和字母,
        advance:使⽤數字、字母以及特殊字符`)
    flag.Parse()
}
func main() {
    parseArgs()
}        

  

三、urfave/cli包的使用

package main
import (
    "fmt"
    "os"
    "github.com/urfave/cli"
)
func main() {
    app := cli.NewApp()
    app.Name = "greet"
    app.Usage = "fight the loneliness!"
    app.Action = func(c *cli.Context) error {
        fmt.Println("Hello friend!")
        return nil
    }
    app.Run(os.Args)
}

  

四、獲取命令行參數

package main
import (
    "fmt"
    "os"
    "github.com/urfave/cli"
)
func main() {
    app := cli.NewApp()
    app.Action = func(c *cli.Context) error {
    fmt.Printf("Hello %q", c.Args().Get(0))
        return nil
    }
    app.Run(os.Args)
}

  

五、獲取選項參數

package main
import (
    "fmt"
    "os"
    "github.com/urfave/cli"
)
func main() {
    var language string
    var recusive bool
    app := cli.NewApp()
    app.Flags = []cli.Flag{
    cli.StringFlag{
        Name: "lang, l",
        Value: "english",
        Usage: "language for the greeting",
        Destination: &language,
    },
    cli.BoolFlag{
        Name: "recusive, r",
        Usage: "recusive for the greeting",
        Destination: &recusive,
    },
}
app.Action = func(c *cli.Context) error {
    var cmd string
    if c.NArg() > 0 {
        cmd = c.Args()[0]
        fmt.Println("cmd is ", cmd)
    }
    fmt.Println("recusive is ", recusive)
    fmt.Println("language is ", language)
        return nil
    }
    app.Run(os.Args)
}
相關文章
相關標籤/搜索