iT邦幫忙

第 12 屆 iT 邦幫忙鐵人賽

DAY 6
2
Software Development

Go繁不及備載系列 第 6

# Day06 Go開教基本語法 (fmt)

Day06 Go開教基本語法 (fmt)

輸入與輸出

【fmt.Printf】

格式化輸出,用法跟C語言的printf一樣
https://play.golang.org/p/neZ-dtxckJb

a := 10
fmt.Printf("a: %d\n", a)

常用到的格式化輸出輸入參數

%d: digit   (10進位的數字)
%c: char    (字元)
%s: string  (字串)
%v: value   (值)
%+v 見下方
%#v 見下方

參數 v 三者的差異:
https://play.golang.org/p/UKM5CGI-AsR

type Name struct {
	A string
	B bool
	C int
}
func main()  {
	fmt.Printf("%v	\n", Name{})
	fmt.Printf("%+v	\n", Name{})
	fmt.Printf("%#v	\n", Name{})
}
// { false 0}	
// {A: B:false C:0}	
// main.Name{A:"", B:false, C:0}	

用於查看物件結構時,非常方便使用

【fmt.Print】

【fmt.Println】

兩者與fmt.Printf相比,差在不能印格式化輸出
PrintPrintln兩者主要差在ln多了一個換行(new line)

跳脫字元

" "雙引號 內可跳脫字元\t \n等  

` `重音符 內則保留原始字串  

https://play.golang.org/p/cmwxIvITZhi

func main()  {
	fmt.Print("\t \n")
	fmt.Print(`\t \n`)
}
/* result:

\t \n
 */

來比較一下這些Output

https://play.golang.org/p/PgwCHCQzT5A

func main()  {
	a := 10
	fmt.Printf("a: %d\n", a)
	fmt.Println("a: ", a)

	s1 := "I"
	s2 := "am"
	s3 := "string"
	fmt.Printf("%s%s      %s\n",s1, s2, s3)
	fmt.Println(s1 + s2 + s3)
	fmt.Println(s1, s2, s3)

	fmt.Println("========")

	fmt.Print(s1 + s2 + s3)
	fmt.Print(s1, s2, s3)
}
/* result:
a: 10
a:  10
Iam      string
Iamstring
I am string
========
IamstringIamstring
*/

另外,
在一些環境中,輸出最後會出現%百分比符號,
% 表示沒換行(new line)的符號
百分比符號


要玩Input輸入的話沒辦法在playground上執行
VScode也沒辦法直接執行(好像得調一些設定)
通常是在Terminal上 下指令 $ go run main.go
但是Goland IDE就是可以直接跑
等什麼,還不換?

【fmt.Scanf】

跟C語言一樣
fmt.Scanf("%d", &a)

【fmt.Scan】

【fmt.Scanln】

package main

import "fmt"

func main()  {
	var a int
	fmt.Scanf("%d", &a)

	fmt.Println(a)
}
/* result:
`User input`
*/

組合字串

【fmt.Sprint】

【fmt.Sprintln】

【fmt.Sprintf】

fmt.Sprint 不會印出東西,基本上是拿來組合字串用的
組出來之後,需要一個變數去接
fmt.Sprint組字串,比起操作字元、陣列,可讀性會較高一些。

https://play.golang.org/p/WgcVnCvfmBH

func main()  {
	s1 := "I"
	s2 := "am"
	s3 := "string"

	str1 := fmt.Sprintln(s1, s2, s3)
	fmt.Println(str1)

	str2 := fmt.Sprint(s1, s2, s3)
	fmt.Println(str2)
}
/* result:
I am string

Iamstring

*/

可以看出Sprint、Sprintln的一些小差異。


上一篇
# Day05 開寫程式Go ,變數宣告前方小坑
下一篇
# Day07 Go飆車囉-狂教基本語法(if, switch, for, log)
系列文
Go繁不及備載35

尚未有邦友留言

立即登入留言