首頁 > 軟體

Go語言標準輸入輸出庫的基本使用教學

2022-02-14 13:01:03

fmt

fmt是go語言中的格式化輸入輸出庫,其中主要分為兩個部分,分別是輸出部分和輸入部分。

輸出

Print

Print函數的主要功能是輸出,和Print類似的函數有以下幾個:

  • func Print(a ...interface{}) (n int, err error):直接輸出
  • func Println(a ...interface{}) (n int, err error):和Print使用方法一樣,但是不同與Print的是Println在每次列印完成之後會自動換行,如果使用Print想要換行需要在結尾加上n
  • func Printf(format string, a ...interface{}) (n int, err error):支援格式化輸出字串,在使用Printf時,可以在函數中使用格式化字串佔位。

程式碼範例:

func main() {
	a := "Lee"
	fmt.Print("大家好,")
	fmt.Printf("我是:%s n",a)
	fmt.Println("我在學習Go語言")
}

執行結果:

常用預留位置:

  • %d:整形十進位制預留位置
  • %b:整形二進位制預留位置
  • %o:整形八進位制預留位置
  • %x:整形十六進位制預留位置,其中a到f為小寫
  • %X:整形十六進位制預留位置,其中A到F為大寫
  • %s:字串預留位置
  • %f:浮點數預留位置
  • %e:浮點數科學計數法:例如:1.234e+10
  • %E:浮點數科學計數法:例如:1.234E+10
  • %t:布林型別預留位置
  • %p:指標,十六進位製表示,並加上0x字首

Fprint

Fprint系列函數同樣有以下三個,該函數會將內容輸出到io.Writer介面型別的變數w中,通常用於朝檔案中寫入資料。

  • func Fprint(w io.Writer, a ...interface{}) (n int, err error)
  • func Fprintf(w io.Writer, format string, a ...interface{}) (n int, err error)
  • func Fprintln(w io.Writer, a ...interface{}) (n int, err error)

程式碼範例:

func main() {
	file, err := os.OpenFile("D://test/a.txt", os.O_CREATE|os.O_WRONLY|os.O_APPEND, 0644)
	if err != nil {
		fmt.Println("開啟檔案出錯:", err)
		return
	}
	name := "lee"
	age := 23
	// 向檔案中寫入資料
	fmt.Fprintf(file, "姓名:%s,年齡:%d n", name, age)
	// 向控制檯寫入資料
	fmt.Fprintf(os.Stdout, "寫入成功")
}

執行結果:

以上程式碼成功將內容寫入到了a.txt檔案中。

Sprint

Sprint會將傳入的內容格式化成一個字串並返回,和Sprint類似的函數有以下幾個:

  • func Sprint(a ...interface{}) string:直接返回
  • func Sprintf(format string, a ...interface{}) string:格式化返回
  • func Sprintln(a ...interface{}) string:自動換行放回

程式碼範例:

func main() {
	a := "Lee"
	s1 := fmt.Sprint("直接返回")
	s2 := fmt.Sprintln("自動換行返回")
	s3 := fmt.Sprintf("格式化返回:%s", a)
	fmt.Print(s1)
	fmt.Print(s2)
	fmt.Print(s3)
}

執行結果:

Errorf

Errorf是根據傳入的內容格式化後返回一個包含該字串的error。

func Errorf(format string, a ...interface{}) error 

程式碼範例:

func main() {
	a := "error"
	error := fmt.Errorf("錯誤:%s", a)
	fmt.Print(error)
}

執行結果:

輸入

在go語言中獲取控制檯輸入可以使用以下幾個函數:

func Scan(a ...interface{}) (n int, err error)
func Scanf(format string, a ...interface{}) (n int, err error)
func Scanln(a ...interface{}) (n int, err error) 

Scan

Scan從標準輸入讀取文字,以空格符或換行符為分隔,將讀取到的內容賦值給函數的引數,函數返回成功讀取到的資料個數和遇到的錯誤。

程式碼範例:

func main() {
	var name string
	var age int
	fmt.Print("請輸入姓名和年齡:")
	fmt.Scan(&name, &age)
	fmt.Printf("姓名:%s,年齡:%d n", name, age)
}

執行結果:

Scanf

Scanf根據format引數指定的格式去讀取由空白符分隔的值儲存到函數的引數中。

程式碼範例:

func main() {
	var name string
	var age int
	fmt.Print("請輸入姓名和年齡:")
	fmt.Scanf("name=%s age=%d", &name, &age)
	fmt.Printf("姓名:%s,年齡:%d n", name, age)
}

執行結果:

使用Scanf進行輸入時,需要完整的在控制檯輸入函數中指定的格式,例如上述程式碼中指定的格式為name=%s age=%d,則在輸入時就必須使用該格式,如果還是和之前的Scan中一樣只輸入lee 23是讀取不到內容的。

Scanln

Scanln類似於Scan,但是不同的是使用Scanln時只要輸入了換行之後就會停止讀取。

程式碼範例:

func main() {
	var name string
	var age int
	fmt.Print("請輸入姓名和年齡:")
	fmt.Scanln(&name, &age)
	fmt.Printf("姓名:%s,年齡:%d n", name, age)
}

執行結果:

例如上述的輸入中,如果僅僅只是輸入了姓名就換行,那麼就會停止讀取,但是在Scan中,如果輸入姓名後換行不會停止讀取還需要繼續輸入年齡後才會停止讀取。

總結

到此這篇關於Go語言標準輸入輸出庫基本使用的文章就介紹到這了,更多相關Go語言標準輸入輸出庫內容請搜尋it145.com以前的文章或繼續瀏覽下面的相關文章希望大家以後多多支援it145.com!


IT145.com E-mail:sddin#qq.com