golang基礎語法
Go 程序可以由多個標記組成,可以是關鍵字,標識符,常量,字符串,符號。
Go 語言的基礎組成有以下幾個部分:
- 包聲明
- 引入包
- 函數
- 變量
- 語句 & 表達式
- 注釋
基本語法介紹
行分隔符
在 Go 程序中,一行代表一個語句結束。不像其它語言一樣以分號 ; 結尾,因為這些工作都將由 Go 編譯器自動完成。
注釋
單行注釋是最常見的注釋形式,你可以在任何地方使用以 // 開頭的單行注釋。多行注釋也叫塊注釋,均已以 /* 開頭,并以 */ 結尾。
字符串連接
Go 語言的字符串可以通過 + 實現
關鍵字
下面列舉了 Go 代碼中會使用到的 25 個關鍵字或保留字:
程序一般由關鍵字、常量、變量、運算符、類型和函數組成。
程序中可能會使用到這些分隔符:括號 (),中括號 [] 和大括號 {}。
程序中可能會使用到這些標點符號:.、,、;、: 和 …。
示例代碼
package main
import (
"fmt"
"math"
"time"
)
func main() {
// hello world
/**
hello world
*/
fmt.Println("hello world")
fmt.Println("##################### values")
values()
fmt.Println("##################### variables")
variables()
fmt.Println("##################### constants")
constants()
fmt.Println("##################### forFunc")
forFunc()
fmt.Println("##################### ifElse")
ifElse()
fmt.Println("##################### switchFunc")
switchFunc()
}
// 值
func values() {
// 字符串拼接用 +
fmt.Println("hello " + "world " + "!")
// 整數和浮點數
fmt.Println("1+2 =", 1+2)
fmt.Println("11-1 =", 11-1)
fmt.Println("99*99 =", 99*99)
fmt.Println("8.0/3.0 =", 8.0/3.0)
// 布爾型
fmt.Println(true && false)
fmt.Println(true || false)
fmt.Println(!true)
}
// 變量
func variables() {
// var 聲明 1 個或者多個變量。
var a string = "hello"
fmt.Println(a)
var b, c int = 3, 5
fmt.Println(b, c)
// 會自動推斷已經初始化的變量類型。
var d = true
fmt.Println(d)
// 聲明變量且 初始化為0
var e int
fmt.Println(e)
// := 簡寫會自動推斷類型,只能用在初始化
f := "short"
fmt.Println(f)
}
// 常量
// 全局常量
const con = "const"
func constants() {
fmt.Println(con)
// const 語句可以出現在任何 var 語句可以出現的地方
const num = 500 * 500 * 500
// 常數表達式可以執行任意精度的運算
const num2 = 4e21 / num
fmt.Println(num2)
// 數值型常量是沒有確定的類型的,直到它們被給定了一個類型,比如說一次顯示的類型轉化。
fmt.Println(int64(num2))
// 當上下文需要時,一個數可以被給定一個類型,比如變量賦值或者函數調用。
// 舉個例子,這里的 math.Sin函數需要一個 float64 的參數。
fmt.Println(math.Sin(num))
}
// For循環
func forFunc() {
// 最常用的方式,帶單個循環條件。
i := 1
for i <= 4 {
fmt.Println(i)
i = i + 1
}
// 經典的初始化/條件/后續形式 for 循環。
for j := 6; j <= 8; j++ {
fmt.Println(j)
}
// 不帶條件的 for 循環將一直執行,直到在循環體內使用了 break 或者 return 來跳出循環。
for {
fmt.Println("for...")
break
}
for n := 0; n <= 7; n++ {
if n%2 == 0 {
continue
}
fmt.Println(n)
}
}
// if/else
func ifElse() {
if 9%2 == 0 {
fmt.Println("9 is even")
} else {
fmt.Println("9 is odd")
}
// 你可以不要 else 只用 if 語句。
if 12%4 == 0 {
fmt.Println("12 is divisible by 4")
}
// 在條件語句之前可以有一個語句;
// 任何在這里聲明的變量都可以在所有的條件分支中使用。
if num := 7; num < 0 {
fmt.Println(num, "正數")
} else if num < 10 {
fmt.Println(num, "小于10")
} else {
fmt.Println(num, "其他")
}
// 注意,在 Go 中,你可以不適用圓括號,但是花括號是需要的。
// Go 里沒有三目運算符,
// 所以即使你只需要基本的條件判斷,你仍需要使用完整的 if 語句。
}
// 分支結構
func switchFunc() {
i := 2
switch i {
case 1:
fmt.Println("1")
case 2:
fmt.Println("2")
case 3:
fmt.Println("3")
}
// 在一個 case 語句中,你可以使用逗號來分隔多個表達式。
// 在這個例子中,我們很好的使用了可選的default 分支。
switch time.Now().Weekday() {
case time.Saturday, time.Sunday:
fmt.Println("星期天")
default:
fmt.Println("工作日")
}
// 不帶表達式的 switch 是實現 if/else 邏輯的另一種方式。
// 這里展示了 case 表達式是如何使用非常量的。
t := time.Now()
switch {
case t.Hour() < 12:
fmt.Println("12點前")
default:
fmt.Println("12點后,包含12點")
}
// 這里是一個函數變量
whatAmI := func(i interface{}) {
switch t := i.(type) {
case bool:
fmt.Println("bool")
case int:
fmt.Println("int")
default:
fmt.Printf("什么類型 %Tn", t)
}
}
whatAmI(true)
whatAmI(1)
whatAmI("嘿")
}