---
title: Golang 筆記
---
# Golang 筆記
How to write Go code? [See this](https://golang.org/doc/code.html)
- 編譯原始碼為可執行檔 ``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``
``` Go =
import "githubURL"
```
### 本地套件
- 一個 package 可以有數個原始碼檔案
``hi.go``
``` Go=
package goexample //存放點的資料夾名稱 Ex. ./src/goexample
import "fmt"
func Hi() {
fmt.Println("Hi")
}
```
``hello.go``
``` Go=
package goexample
import "fmt"
func Hello() {
fmt.Println("Hello")
}
```
``main.go``
``` Go=
package main
import "goexample"
func main() {
goexample.Hi()
goexample.Hello()
}
```
``go run main.go`` 輸出
```
Hi
Hello
```
## 宣告
### 基本變數
如果要同時宣告不同的變數,可以用小括弧把變數括起來,但是要換行。
```go =
var x, y, z = 10, "owo", 3.14
```
```go =
var (
x int = 10
y string = "owo"
z float64 = 3.14
)
```
兩種寫法皆通,也可省略型態,讓 go 自動判別
### 短變數宣告
僅能在函式中使用,函式外所有語法必須以關鍵字做開始
```go =
x, y, z := 10, "owo", 3.14
```
### 常數 const
不同於變數 ``var``,宣告為常數後如未使用,執行時不會跳錯誤,但變數會。
```go =
const (
x = 10
y = 3.14
z = "Justin"
)
```
### 字串 string
定義由唯讀的 UTF-8 編碼位元組構成,而 rune 用於儲存 Unicode,宣告後無法改變內容。
```go =
text := "Go語言"
fmt.Println(text[0])
```
僅會輸出``97``,若要輸出字元的話,需要先將型態轉為 ``[]rune``(``int32`` 的別名),將 UTF-8 編碼的位元組,轉換為 Unicode 後輸出
```go =
text := "Go語言"
cs := []rune(text)
fmt.Printf("%c\n", cs[2]) // 語
```
### 陣列
建立陣列的方式是 ``[n]type``,其中 n 為陣列的元素數量,type 是元素的型態。例如:
```go =
var x[]int //可以留空
var scores [10]int
scores[0] = 90
scores[1] = 87
scores[2] = 92
```
```go =
scores := [10]int{
90,
87,
92,
}
```
## 迴圈
只有``for``迴圈一種,且不需要`()`,無窮迴圈則條件部份留空即可
```go =
sum := 0
for i := 0; i < 10; i++ {
sum += i
}
```
## slice
``x := make([]type, 長度, 容量)``
```go =
sum := 0
for i := 0; i < 10; i++ {
sum += i
}
```
## map
``var x map[keyType]valueType``
```go =
sum := 0
for i := 0; i < 10; i++ {
sum += i
}
```