變量的作用域
- 在函數內部聲明的變量叫做局部變量,生命週期僅限於函數內部;可見性也僅限於函數內部,函數外部皆無法訪問
- 若函數內部有語句塊,如
for
,if
,switch
內部的語句塊,亦指{}
內部,在語句塊內部定義的變量,在跳脫語句塊後也會回收
- 若函數內部有語句塊,如
- 在函數外部聲明的變量叫做全局變量
- 生命週期作用於整個程序
- 如果變量名為大寫可以在外部訪問調用
- 函數外部只能聲明變量、常量,不能執行代碼
數據類型與操作符
bool類型
bool類型只能存true
和false
聲明
1 | var a bool //[1] |
[1] 聲明變量時未初始化值,默認初始化為false
相關操作符
!
: 取反值&&
: and 操作 (注意短路特性,一開始為false
即為false)||
: or 操作 (注意短路特性,一開始為true
即為true)
數字類型
主要有int
,int8
,in16
,int32
,int64
,uint8
,uint16
,uint32
,uint64
,float32
,float64
聲明
1 | var a int8 = 100 |
類型轉換
在Go語言中不同的數字類型之間是不能直接賦值的
以下為錯誤的代碼1
2var a int8 = 100
var b int16 = a
需透過類型轉換才能成功賦值or運算
語法
目標類型(欲轉換的變量)
1
2var a int8 = 100
var b int16 = int16(a)
邏輯操作符
==
,!=
,<
,<=
,>
,>=
用於判斷邏輯操作符兩邊之間的關係,返回bool值
數學操作符
+
,-
,*
,/
,%
practice
使用math/rand
生成10個隨機整數,10個小於100的隨機整數以及10個隨機浮點數1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42package main
import (
"fmt"
"math/rand"
"time"
)
func Create_randint(){
randnum := rand.Int()
fmt.Println(randnum)
}
func Create_randint_100(){
randnum := rand.Intn(100) //[1]
fmt.Println(randnum)
}
func Create_randfloat(){
randnum := rand.Float32()
fmt.Println(randnum)
}
func init(){ //[2]
rand.Seed(time.Now().UnixNano()) //[3]
}
func main(){
fmt.Println("print randnumber:")
for i:=0;i<10;i++{
Create_randint()
}
fmt.Println("print randnumber < 100:")
for i:=0;i<10;i++{
Create_randint_100()
}
fmt.Println("print randfloatnumber")
for i:=0;i<10;i++{
Create_randfloat()
}
}
[1] rand.Intn
為隨機生成一個參數範圍以內的數
[2] 因為Seed初始化在每次運行程序時都必須要做,可放在init函數裡值行
[3] 使用當前時間奈秒數的時間戳作為Seed使得其每次產出的數字皆不一樣
字符類型(byte)
相當於c語言中的char
類型
一個byte
佔據8bits
聲明
1 | var a byte |
[1]使用''
(單引號)來表示字符,只能存放一個字符
example
1 | package main |
[1] 默認打印byte會顯示此字符對應的ASCII碼數字
[2] 使用Printf
格式化輸出,可打印原字符
[3] 將字符轉成字符串類型也可打印原字符
result
1 | 99 |
字符串類型
0個或多個字符組成的字符串
聲明
1 | var str string //[1] |
[1] 聲明string
時沒有初始化變量默認為空字符串
[2] 使用""
(雙引號)來表示字符串,可存放0或多個字符串,具有轉譯的功能
[3] 使用``(反引號)來表示字符串,可存放0或多個字符串,不具轉譯功能(輸出甚麼就是甚麼),為原生字符串,可用在輸出多行
example
1 | package main |
result
1 | str = |