iT邦幫忙

0

Golang 每日一小時(Day3)

go
  • 分享至 

  • xImage
  •  

複習完 package 之後,注意到「輸出文字」的 Println 綁在這個模組內

import "fmt"

想說這個 fmt 是不是類似 C 的 stdio.h,查了之後發現 fmt 主要管理的是「格式化 I/O」,fmt 其實就是 format,看來都是屬於標準庫,只是功能更專一。

不過發現一件神奇的事,我隨便一查就查到了三種 print 的方式:

  1. fmt.Println
  2. fmt.Print
  3. fmt.Printf

嚴格來說還有第四個,Go 極少數的 builtin "println",不過在官方文件明確指出這是 "for debugging",短期內我也不要去亂用會比較好...

慢慢推敲太麻煩了,直接讓 GPT 整理出這三種 Print 的差異:

功能 Println Print Printf
自動空格
自動換行
格式控制

對比 Python 一個 print 魔法打天下,Go 的 functions 真的是拆得非常明確...
寫 Python 寫多來寫這個可能會感到厭煩呢,不過隨著專案越來越大,好像還是這樣更好一點,查都查了就來實操一遍。

package main

import (
	"fmt"
	"math/rand"
)

func main() {
	fmt.Println("My favorite number is", rand.Intn(10))
	fmt.Print("My favorite number is", rand.Intn(10))
	fmt.Printf("\nMy favorite number is %d and %d", rand.Intn(10), rand.Intn(10))
}

[Running] go run "d:\Program FIles\GoNote\hello.go"
My favorite number is 9
My favorite number is9
My favorite number is 0 and 0

有一些沒看過的佔位符,這邊紀錄一下:

符號 意思
%v 數值(任意型別)
%T 型別本身

總算是可以繼續往下學了,來到 Packages, variables, and functions.,沒想到 Go 的型別是寫在參數後面,甚至 function 的形式有好幾種,感覺還蠻酷的

func add(x int, y int) int {
	return x + y
}
func divide(a, b int) (int, int) {
    return a / b, a % b
}

甚至還可以預先命名回傳的參數,return 後面就不用指定參數了,感覺我會非常喜歡這個寫法!

func split(sum int) (x, y int) {
	x = sum * 4 / 9
	y = sum - x
	return
}

[Running] go run "d:\Program FIles\GoNote\hello.go"
7 10

還有跟 Python 一樣的符號 ":=",不過用途有點差異,這個符號只能在 function 內使用,而且是 declare + assign,所以應該就是拿來快速宣告區域內一些過度用的變數,像是迴圈:

func main() {
	sum := 0
	for i := 0; i < 10; i++ {
		sum += i
	}
	fmt.Println(sum)
}

這樣看下來真的是比 C 方便很多,又比 Python 嚴謹很多,感覺挺奇妙的。

而且 Go 只有 for 這個迴圈敘述,把 for 三個元素之間的分號去掉,只留中間條件式,就變成了 while:

func main() {
	sum := 1
	for sum < 1000 {
		sum += sum
	}
	fmt.Println(sum)
}

1024

if else 就沒有什麼特別的了,今天進度總算是多了一點點,Tour of Go 內甚至還有例題可以寫,把 for 的寫完就可以休息了~


圖片
  熱門推薦
圖片
{{ item.channelVendor }} | {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言