Skip to content

Latest commit

 

History

History
339 lines (258 loc) · 8.34 KB

03-字串與Printf.md

File metadata and controls

339 lines (258 loc) · 8.34 KB
tags
Golang魔法使

#3 字串與Printf | Golang魔法使

前言

這次小櫻前往{水族館|aquarium}校外教學,卻不幸遇到可惡的「字串」Golang牌,導致水族館員和企鵝差點被淹死,小櫻的哥哥恰好在這裡打工,縱身一躍跳進水池解救了大家,像這樣

要如何把這個囂張的 Golang 牌繩之以法呢?「知己知彼百戰百勝」,螢幕前小櫻的工具人,一起來了解字串 Golang 牌的運作吧!

了解字串前要先了解什麼是字元

在了解字串前我們必需先了解什麼是字元,字元其實就是指「單一一個字」,這個字也是由數字所組成,在 Go 語言中是以 UTF-8 來做為字元的編碼方式,舉個例子,小櫻的「小」在是以 23567 的二進位來儲存「櫻」則是以 27387 的二進位來儲存

要宣告一個字元我們會用 rune (中文:符文)來表示,runeint32 是一樣的東西

package main
import "fmt"
func main(){
    var a rune = '小' // 以單引號包住字元
    var b rune = '櫻'
    fmt.Println(a)
    fmt.Println(b)
}

執行結果: 23567 27387

為什麼會這樣?

因為 rune 就是 int32,通過 fmt.Println 當然會把他當作數字來做處理,如果我們要以「文字」印出,則必需使用 fmt.Printfprintf 指的就是 print + formatformat(格式)決定要以什麼形式印出,使用方法如下:

package main
import "fmt"
func main(){
    var a rune = '小'
    var b rune = '櫻'
    fmt.Printf("%c", a)
    fmt.Printf("%c", b)
}

其中的 %c 就是告訴魔仗我要印字元出來,至於要印哪個字元呢?則是看 , 後面第一個變數

執行結果: 小櫻

當然也可以用 %c %c 他會依序對應 , 後面的變數

package main
import "fmt"
func main(){
    var a rune = '小'
    var b rune = '櫻'
    fmt.Printf("%c%c", a, b)
}

執行結果: 小櫻

另外常用的還有 %d, %f, %s

%c 的 c 是指 character 以字元印出

%d 的 d 是指 decimal 以十進位印出

%e 的 e 是指 exponent 以科學計號方式印出

%f 的 f 是指 float 以浮點數印出

%s 的 s 是指 string 以字串印出

%% 是用來印出 %

單引號其實是將「文字」轉為「數字」

當我們使用 '小' 這個用法時,電腦會直接把他視為 23567 你甚至可以試試把 '小' 減去 23566 讓他變成 1

package main
import "fmt"
func main(){
    var a rune = '小' - 23566
    fmt.Printf("%d", a)
}

執行結果: 1

'小' - 23566 對於Go語言來說會直接視為 23567-23566 比如:fmt.Printf("%d", a) 則視為 fmt.Printf("%d", 1)

字串是什麼?

相信大家都知道字元是什麼了,「字元不過就是個數字」,那「字串」呢?字串其實就是一串「字元」。(詳細原理會再後續課程說明)

字串怎麼使用呢?舉個例子大家應該就懂了!

package main
import "fmt"
func main(){
    var release string = "封印解除"
    release2 := "レリーズ"
    fmt.Println(release)
    fmt.Println(release2)
}

執行結果: 封印解除 レリーズ

如同整數一樣,字串也元運算符號,也就是「加法」,在資訊科學(魔法科學)中稱為 concatenate

package main
import "fmt"
func main(){
    str1 := "隱藏著黑暗力量的鑰匙啊"
    str2 := "在我面前顯示你真正的力量"
    fmt.Println(str1 + str2)
}

執行結果: 隱藏著黑暗力量的鑰匙啊在我面前顯示你真正的力量

如何將數字型態 int 轉成字串型態 string

如果我們只是要印出數字可以用 Printf 來印出

法一:Printf

package main
import "fmt"
func main(){
    sakura := "小櫻今年"
    grade := "年級"
    fmt.Printf("%s%d%s", sakura, 4, grade)
}

執行結果: 小櫻今年4年級

法二:Print

package main
import "fmt"
func main(){
    sakura := "小櫻今年"
    grade := "年級"
    fmt.Print(sakura, 4, grade)
}

執行結果: 小櫻今年 4 年級

fmt.Print(sakura, 4, grade) 可以視為

fmt.Print(sakura)
fmt.Print(" ")
fmt.Print(4)
fmt.Print(" ")
fmt.Print(grade)

以上提到的方法都是直接印在螢幕上(標準輸出 standard output)。那有沒有方法直接將結果印在變數裡?

法三:使用 Sprintf

package main
import "fmt"
func main(){
    sakura := "小櫻今年"
    grade := "年級"
    result := fmt.Sprintf("%s%d%s", sakura, 4, grade)
    fmt.Printf(result)
}

這個用法會將原本應該印出於螢幕上的字串印在變數 result 當中

字串轉成數字?

如果今天我是想把 "4" (字串) 轉成 4 (整數)那要怎麼轉呢? 其實這個可以把字串拆成字元再用字元去做運算,但是剛剛就說了,依現在各位魔法使的實力,還不夠,所以我們就先跳過吧!

print 使用方法整理

Go 語言常用的印出方法可以簡單分為三種 fmt.Print, fmt.Println, fmt.Printf

其中,fmt.Printlnfmt.Print 差不多,只是 fmt.Println 會在每次印出時都會在行尾做換行。fmt.Printf 可以指定以哪 format 印出,而其他兩者都是以預設 format 印出


後記

這部分2021年被我刪減掉一些,感覺之前教太難:smile:

圖片大多來自:庫洛魔法使第一季第三集以及庫洛魔法使第一季第四集