91超碰碰碰碰久久久久久综合_超碰av人澡人澡人澡人澡人掠_国产黄大片在线观看画质优化_txt小说免费全本

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

Go語言中的IO操作及Flag包使用實例分析

發布時間:2022-07-19 11:26:24 來源:億速云 閱讀:123 作者:iii 欄目:開發技術

這篇文章主要介紹了Go語言中的IO操作及Flag包使用實例分析的相關知識,內容詳細易懂,操作簡單快捷,具有一定借鑒價值,相信大家閱讀完這篇Go語言中的IO操作及Flag包使用實例分析文章都會有所收獲,下面我們一起來看看吧。

一、格式化輸入和輸出

1.從終端獲取用戶的輸入

fmt.Scanf 空格作為分隔符,占位符和格式化輸出的一致

fmt.Scan 從終端獲取用戶的輸入,存儲在Scanln中的參數里,空格和換行符作為分隔符

fmt.Scanln 從終端獲取用戶的輸入,存儲在Scanln中的參數里,空格作為分隔符,換行符作為結束

Scanf 例子:

package main
 
import (
   "fmt"
)
 
func TestScanf(){
   var a int
   var b string
   var c float32
   fmt.Scanf("%d%s%f",&a,&b,&c)
   fmt.Printf("a=%d b=%s c=%f",a,b,c)
}
 
func main(){
   TestScanf()
}

結果:

> 111 abvc 111
a=111 b=abvc c=111.000000

這里我們是通過一行輸入的,并且是以空格作為分割的,但是如果想通過多行輸入,那么在Windows下Scanf可能會存在一個問題,如下:

func TestScanf(){
   var a int
   var b string
   var c float32
   fmt.Scanf("%d",&a)
   fmt.Scanf("%s",&b)
   fmt.Scanf("%f",&c)
   fmt.Printf("a=%d b=%s c=%f",a,b,c)
}

然后我們在windows下面去運行一下

Go語言中的IO操作及Flag包使用實例分析

由上面的我們可以看到,只接受到了第一個值,第二值輸入之后回車,發現b和c都沒有值。主要是由于Windows下面,回車會 自動加上 \r\n。

如果想要正確的獲取這個值,可以修改如下:在每一個scanf上面都加上“\n”

func TestScanf(){
   var a int
   var b string
   var c float32
   fmt.Scanf("%d\n",&a)
   fmt.Scanf("%s\n",&b)
   fmt.Scanf("%f\n",&c)
   fmt.Printf("a=%d b=%s c=%f \n",a,b,c)
}

Scan例子:

func TestScan(){
   var a int
   var b string
   var c float32
   fmt.Scan(&a,&b,&c)
   fmt.Printf("a=%d b=%s c=%f \n",a,b,c)
}

Scanln例子:

func TestScanln(){
   var a int
   var b string
   var c float32
   fmt.Scanln(&a)
   fmt.Scanln(&b)
   fmt.Scanln(&c)
   fmt.Printf("a=%d b=%s c=%f \n",a,b,c)
}

2.從字符串中獲取

上面是從終端輸入的字符串中提取數據,然后還可以從一個已經存在的字符串中提取。

fmt.Sscanf 空格作為分隔符,占位符和格式化輸出的一致

fmt.Sscan 從字符串獲取用戶的輸入,存儲在Scanln中的參數里,空格和換行符作為分隔符

fmt.Sscanln 從字符串獲取用戶的輸入,存儲在Scanln中的參數里,空格作為分隔符,換行符作為結束

下面的例子就是從str中提取整數、字符串和浮點數

func TestSscanf(){
   var a int
   var b string
   var c float32
   str := "123 hello 111.1"
   fmt.Sscanf(str,"%d%s%f",&a,&b,&c)
   fmt.Printf("a=%d b=%s c=%f \n",a,b,c)
}

備注:一定要傳地址進去,否則修改是變量的副本,也就是說讀取不到用戶的輸入了。

3.從文件中獲取

fmt.Fscanf 空格作為分隔符,占位符和格式化輸出的一致

fmt.Fscan 從文件獲取用戶的輸入,存儲在Scanln中的參數里,空格和換行符作為分隔符

fmt.Fscanln 從文件獲取用戶的輸入,存儲在Scanln中的參數里,空格作為分隔符,換行符作為結束

4.終端輸入輸出的原理

終端相當于是一個文件, 所以可以用 os.stdin 和os.stdout 作為輸入和輸出。查看源碼可以看到他們其實就是*File

二、bufio包的使用

為了完善文件本身讀取性能差的問題,增加了緩沖區操作。

package main
 
import (
   "bufio"
   "os"
)
 
func main() {
   reader := bufio.NewReader(os.Stdin)
   buf, _ := reader.ReadBytes('\n')
   println((string)(buf))
}

備注:這里可以看到NewReader的參數是一個io.Reader接口 , os.Stdin則是返回一個*File ,由于File實現了io.Reader的Read方法,所以可以接受File作為參數(鴨子類型)。

關于“Go語言中的IO操作及Flag包使用實例分析”這篇文章的內容就介紹到這里,感謝各位的閱讀!相信大家對“Go語言中的IO操作及Flag包使用實例分析”知識都有一定的了解,大家如果還想學習更多知識,歡迎關注億速云行業資訊頻道。

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

阜平县| 南雄市| 栾城县| 富锦市| 苍山县| 涞水县| 灌阳县| 盐山县| 江孜县| 金坛市| 南召县| 横山县| 汪清县| 湖南省| 汶川县| 泾川县| 久治县| 永清县| 太原市| 金门县| 突泉县| 包头市| 嘉义市| 平罗县| 苍梧县| 山东省| 灵石县| 镇雄县| 耒阳市| 汤原县| 东乡族自治县| 五指山市| 台湾省| 崇阳县| 体育| 南部县| 洪泽县| 甘德县| 乌审旗| 固始县| 广河县|