fmt - skynocover/Wiki-for-GoLang GitHub Wiki

fmt

可參考go fmt

輸入

Scan

func ffmt(){
    var i int
    var d float32
    var s string
    fmt.Scan(&i, &d, &s)
    fmt.Println(i,d,s)
}

input 2131,1321,3213
output 2131,0
1321,3213

  • 以空格跟換行作為輸入

Scanf

    var i int
    var d float32
    var s string
    fmt.Scanf("%d %f \n%s", &i, &d, &s)
    fmt.Println(i, d, s)

input 123 212 321
output 123 212 321

  • 可以自定義輸入的格式,比方說\n
    var i int
    var d float32
    var s string
    fmt.Scanf("%3d%3f%s", &i, &d, &s)
    fmt.Println(i, d, s)

input 12321321321
output 123 213 21321

  • 也可以自定義輸入的長度

Scanln

    var i int
    var d float32
    var s string
    fmt.Scanln(&i, &d, &s)
    fmt.Println(i, d, s)

input 12313 132132 3213
output 12313 132132 3213

  • 以換行做為一次輸入的結束

輸出

  1. print 字串會字型黏在一起
  2. println 自動加上換行,字串會自動加上空格
  3. printf 有佔位符號可用
  4. Sprintf 沒辦法印出東西,需要另外使用fmt.Print
fmt.Print("a", "b", 1, 2, 3, "c", "d", "\n")
fmt.Println("a", "b", 1, 2, 3, "c", "d")
fmt.Printf("ab %d %d %d cd\n", 1, 2, 3)
fmt.Sprintf("%s", testStr) //印不出東西
// ab1 2 3cd
// a b 1 2 3 c d
// ab 1 2 3 cd

printStr := fmt.Sprintf("%s", testStr) //用這種方式來格式化符號
fmt.Println(printStr)    //test str

佔位符

  • %d

會顯示格式化後的文字

var pi = 3.1416
var three = 3
out := fmt.Sprintf("PI is %d,3 is %d", pi ,three)
fmt.Println(out)
// PI is 3,3 is %!d(float64=3.1416)
  • %v

會顯示原本的格式

out2 := fmt.Sprintf("PI is %v,three is %v,True is %v", pi,three, true)
fmt.Println(out2)
//PI is 3.1416,three is 3,True is true
  • 使用struct
profile := &struct {
	Name string
	HP   int
}{
	Name: "rat",
	HP:   150,
}
fmt.Printf("使用'%%+v' %+v\n", profile)
fmt.Printf("使用'%%#v' %#v\n", profile)
fmt.Printf("使用'%%T' %T\n", profile)
//使用'%+v' &{Name:rat HP:150}
//使用'%#v' &struct { Name string; HP int }{Name:"rat", HP:150}
//使用'%T' *struct { Name string; HP int }
佔位符 功能
%v 按值輸出
%+v 對struct展開
%b 二進位顯示
%o 八進制
%d 十進制
%x 十六進制(小寫)
%X 十六進制(大寫)
%U Unicode
%f float

顏色輸出

前景 背景 顏色
30 40 黑色
31 41 红色
32 42 绿色
33 43 黄色
34 44 蓝色
35 45 紫红色
36 46 青蓝色
37 47 白色

顯示方式
0 默認設定
1 高亮 4 使用下畫線
5 閃爍
7 反白
8 不可見

//  0  默認設置
//  1  高亮
//  4  使用下畫線
//  5  閃爍
//  7  反白顯示
//  8  不可見
for b := 40; b <= 47; b++ { // 背景色彩 = 40-47
        for f := 30; f <= 37; f++ { // 前景色彩 = 30-37
            for d := range []int{0, 1, 4, 5, 7, 8} { // 显示方式 = 0,1,4,5,7,8
                fmt.Printf(" %c[%d;%d;%dm%s(f=%d,b=%d,d=%d)%c[0m ", 0x1B, d, b, f, "", f, b, d, 0x1B)
            }
            fmt.Println("")
        }
        fmt.Println("")
    }
fmt.Printf("%c[1;40;32m%s%c[0m\n", 0x1B, "testPrintColor", 0x1B)

指標

顯示位址

fmt.Println(&a)

若傳值為變數

func Compute(a int) {
	a = 0
}
func main() {
	x := 5
	Compute(x)
	fmt.Println(x)
}

5

若傳值為位址

func Compute(a *int) {
	*a = 0
}
func main() {
	x := 5
	Compute(&x)
	fmt.Println(x)
}

0x414020