Hike News
Hike News

Go初識-day2-保留字、基本結構、包別名

Notice

  1. 變量或函數命名須以字母或是下劃線開頭,大小寫有區分,不能包含運算符
  2. _ 是特殊標示符,用來忽略結果
  3. 保留關鍵字如下:
break default func interface select
case defer go map struct
chan else goto package switch
const fallthough if range type
continue for import return var

Go程序的基本結構

1
2
3
4
5
6
7
package main

import "fmt"

func main(){
fmt.Println("Hello World")
}

import (引用其他package)

通常會習慣寫成

1
2
3
4
import (
"fmt"
"os"
)

可允許寫成

1
2
import ("fmt")
import ("os")

包中函數調用

  1. 同一個包中的函數可以直接調用,與大小寫無關
  2. 不同package中函數,通過包名+點+函數名進行調用 如:calc.Add(100,200)
  3. 包之間的訪問規則:
    • 大寫意味著這個函數/變量是可導出
    • 小寫意味著這個函數/變量是私有的 —>包外部不能訪問

Practice

  • 寫一個程序,對於給定一個數字n,求出所有兩兩相加等於n的組合
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    package main

    import "fmt"

    func two_num_sum(sum int){
    for i:=0;i<=sum;i++ {
    fmt.Printf("%d + %d = %d\n",i,sum-i,sum) //[1]
    }
    }

    func main(){
    var sum int
    fmt.Printf("Input the sum number:")
    fmt.Scanf("%d\n",&sum) //[2]
    two_num_sum(sum)
    }

[1] fmt.Printf為格式化輸出,用法與c語言相同
[2] fmt.Scanf為格式化輸入,用法與c語言相同,須注意在變量前面加入取址符&

  • 寫一個程序包含add和main兩個package,其中add包中有兩個變量:Name和Age,請問main包中如何訪問Name和Age?
    day2\practice2\add\add.go
    1
    2
    3
    4
    package add

    var Name string = "Taroballz" //[1]
    var Age int = 27

[1] 變量需大寫才能被外部包調用
宣告變量時就初始化,表示變量初始值即為=右邊的值
因為Go屬於編譯型語言而非腳本語言,需要有入口函數去執行代碼
所以在main函數外部的全局域

1
2
3
4
var Name string
var Age int
Name = "Taroballz"
Age = 27

或是

1
2
Name := "Taroballz"
Age := 27

會因為找不到入口函數而無法賦值

day2\practice2\main\main.go

1
2
3
4
5
6
7
8
9
10
package main

import ("fmt"
"go_lesson/day2/practice2/add"
)

func main(){
fmt.Println("My Name is",add.Name)
fmt.Println("I'm",add.Age,"years old")
}


包的別名

要是導入的包名太長,可自定義包的別名來取代原本的包名,並使用包的別名引用函數

格式

1
import 別名 "包名"   //[1]

[1] 注意別名與包名之間的空格

example

1
2
3
4
5
6
7
package main

import f "fmt" //[1]

func main(){
f.Println("Hello World!") //[2]
}

[1] 將fmt包的別名自訂義為f
[2] 使用別名f調用函數Println

result

1
Hello World!

tips

  • 要是將包導入但不會去用到包中的函數或是變量的話可將別名改為-,表示將包導入並初始化,但是包被忽略不引用