GO語言的基本語法之變數,常量,條件語句,迴圈語句
阿新 • • 發佈:2021-08-04
GO語言的基本語法之變數,常量,條件語句,迴圈語句
作為慕課網得筆記自己看
定義變數:
使用var關鍵字
- var a, b, C bool
- var s1, s2 string = "hello", "world'
- 可放在函式內,或直接放在包內
- 使用var()集中定義變數
讓編譯器自動決定型別
- vara,b,i,s1, s2 = true, false, 3, "hello", "world"
使用:=定義變數
- a,b,i,s1, s2:= true, false, 3, "hello", "world"
- 只能在函式內使用
內建變數型別:
- bool, string就是正常的布林和string
- (u)int, (u)int8, (u)int16, (u)int32, (u)int64, 加個u就是無符號整數,不加u就是有符號整數
- 有符號整數還分為兩類,一種規定長度,一種沒規定長度,沒規定長度的跟著作業系統走
- uintptr就是指標,長度一樣是跟著作業系統來的
- byte, rune ,其中的rune就是字元型,就是GO語言的char型別,32位
- float32, float64, complex64, complex128,浮點數型別,這個complex是複數,就是帶有實部和虛部的那個
強制型別轉換:
只有強制的型別轉換
常量定義:
- const filename = "abc.txt"
- const 數值可作為各種型別使用
- consta,b=3,4
- var C int = int(math.Sqrt(a*a + b * b))
還有特殊的常量,列舉型別
- 普通的列舉型別
- 自增值的列舉型別
示例程式碼如下:
package main import ( "fmt" "math" "math/cmplx" ) //函式外面定義變數,不能使用:= //這樣的全部都是包內的變數,不是全域性變數 var ( aa = 3 ss = "kkk" bb = true ) //這裡是用函式定義一個變數 func variableZeroValue() { var a int var s string fmt.Printf("%d %q\n", a, s) } //這裡是賦上初值,PS:定義了就必須要用 func variableInitialValue() { var a, b int = 3, 4 var s string = "abc" fmt.Println(a, b, s) } //省略型別名,自動辨識初值,不是一個型別也可以寫在一行 func variableTypeDeduction() { var a, b, c, s = 3, 4, true, "def" fmt.Println(a, b, c, s) } //省略var,使用:=和使用var是一樣的 //第一次必須要使用:=,後面就還要用=,不需要再用:= func variableShorter() { a, b, c, s := 3, 4, true, "def" b = 5 fmt.Println(a, b, c, s) } //尤拉公式 func euler() { fmt.Printf("%.3f\n", cmplx.Exp(1i*math.Pi)+1) } //強制型別轉換 func triangle() { var a, b int = 3, 4 fmt.Println(calcTriangle(a, b)) } //強制型別轉換 func calcTriangle(a, b int) int { var c int c = int(math.Sqrt(float64(a*a + b*b))) return c } //設定常量 func consts() { const ( filename = "abc.txt" a, b = 3, 4 ) var c int c = int(math.Sqrt(a*a + b*b)) fmt.Println(filename, c) } //特殊常量:列舉型別 func enums() { const ( cpp = iota//iota表示自增值 _ python golang javascript ) const ( b = 1 << (10 * iota) kb mb gb tb pb ) fmt.Println(cpp, javascript, python, golang) fmt.Println(b, kb, mb, gb, tb, pb) } func main() { fmt.Println("Hello world") variableZeroValue() variableInitialValue() variableTypeDeduction() variableShorter() fmt.Println(aa, ss, bb) euler() triangle() consts() enums() }
變數定義要點:
- 變數型別寫在變數名之後
- 編譯器可推測變數型別
- 沒有char ,只有rune
- 原生支援複數型別
條件語句:
if:
- if的條件不需要括號括起來
- if的條件裡可以賦值
- if的條件裡賦值的變數作用域就在這個if語句中
switch:
- switch會自動break,除非使用fallthrough
- switch後面可以不帶表示式
示例程式碼如下:
package main
import (
"fmt"
"io/ioutil"
)
//switch函式用法
func grade(score int) string {
g := ""
switch {
case score < 0 || score > 100:
panic(fmt.Sprintf(
"Wrong score: %d", score))
case score < 60:
g = "F"
case score < 80:
g = "C"
case score < 90:
g = "B"
case score <= 100:
g = "A"
}
return g
}
func main() {
// If "abc.txt" is not found,
// please check what current directory is,
// and change filename accordingly.
const filename = "abc.txt"
//ioutil.ReadFile讀出abc.txt的內容
if contents, err := ioutil.ReadFile(filename); err != nil {
fmt.Println(err)
} else {
fmt.Printf("%s\n", contents)
}
fmt.Println(
grade(0),
grade(59),
grade(60),
grade(82),
grade(99),
grade(100),
// Uncomment to see it panics.
// grade(-3),
)
}
迴圈語句:
for:
- for的條件裡不需要括號
- for的條件裡可以省略初始條件,結束條件,遞增表示式
- 可以省略初始條件,相當於while
- 什麼都省略的情況為死迴圈
示例程式碼如下:
package main
import (
"bufio"
"fmt"
"io"
"os"
"strconv"
"strings"
)
//將整數轉換為二進位制表示式
func convertToBin(n int) string {
result := ""
for ; n > 0; n /= 2 {
lsb := n % 2
//strconv.Itoa變為字串
result = strconv.Itoa(lsb) + result
}
return result
}
//讀取檔案
func printFile(filename string) {
file, err := os.Open(filename)
if err != nil {
panic(err)
}
printFileContents(file)
}
//讀取檔案內容
func printFileContents(reader io.Reader) {
scanner := bufio.NewScanner(reader)
for scanner.Scan() {
fmt.Println(scanner.Text())
}
}
//死迴圈
func forever() {
for {
fmt.Println("abc")
}
}
func main() {
fmt.Println("convertToBin results:")
fmt.Println(
convertToBin(5), // 101
convertToBin(13), // 1101
convertToBin(72387885),
convertToBin(0),
)
fmt.Println("abc.txt contents:")
printFile("lang/basic/branch/abc.txt")
fmt.Println("printing a string:")
s := `abc"d"
kkkk
123
p`
printFileContents(strings.NewReader(s))
// Uncomment to see it runs forever
// forever()
}
基本語法要點:
- for, if後面的條件沒有括號
- if 條件裡也可定義變數
- 沒有while
- switch不需要break ,也可以直接switch多個條件