Golang 筆記

How to write Go code? See this

  • 編譯原始碼為可執行檔 go build .
  • 執行 go run .
  • 查詢說明 go doc <pkg> <sym>[.<method>]

每個 .go 原始碼,都必須從 package 定義開始,而具有 package main.go 原始碼是程式進入點。

Package

package 中定義的函式,名稱必須是以大寫開頭,若函式名稱是小寫,那麼會是套件中才可以使用的函式。

import

  • 套件名稱指定別名 ex.import f "fmt"
  • 若指定別名時使用 .,就不需要套件名稱作為前置名稱
    ex. f.Println("owo") -> Println("owo")
  • owo

遠端套件

main.go

import "githubURL"

本地套件

  • 一個 package 可以有數個原始碼檔案

hi.go

package goexample //存放點的資料夾名稱 Ex. ./src/goexample import "fmt" func Hi() { fmt.Println("Hi") }

hello.go

package goexample import "fmt" func Hello() { fmt.Println("Hello") }

main.go

package main import "goexample" func main() { goexample.Hi() goexample.Hello() }

go run main.go 輸出

Hi
Hello

宣告

基本變數

如果要同時宣告不同的變數,可以用小括弧把變數括起來,但是要換行。

var x, y, z = 10, "owo", 3.14
var (
	x int = 10
	y string = "owo"
	z float64 = 3.14
)

兩種寫法皆通,也可省略型態,讓 go 自動判別

短變數宣告

僅能在函式中使用,函式外所有語法必須以關鍵字做開始

x, y, z := 10, "owo", 3.14

常數 const

不同於變數 var,宣告為常數後如未使用,執行時不會跳錯誤,但變數會。

const (
    x = 10
    y = 3.14
    z = "Justin"
)

字串 string

定義由唯讀的 UTF-8 編碼位元組構成,而 rune 用於儲存 Unicode,宣告後無法改變內容。

text := "Go語言"
fmt.Println(text[0])

僅會輸出97,若要輸出字元的話,需要先將型態轉為 []runeint32 的別名),將 UTF-8 編碼的位元組,轉換為 Unicode 後輸出

text := "Go語言"
cs := []rune(text)
fmt.Printf("%c\n", cs[2]) // 語

陣列

建立陣列的方式是 [n]type,其中 n 為陣列的元素數量,type 是元素的型態。例如:

var x[]int //可以留空
var scores [10]int
scores[0] = 90
scores[1] = 87
scores[2] = 92
scores := [10]int{
    90, 
    87, 
    92,
}

迴圈

只有for迴圈一種,且不需要(),無窮迴圈則條件部份留空即可

sum := 0
for i := 0; i < 10; i++ {
    sum += i
}

slice

x := make([]type, 長度, 容量)

sum := 0
for i := 0; i < 10; i++ {
    sum += i
}

map

var x map[keyType]valueType

sum := 0
for i := 0; i < 10; i++ {
    sum += i
}