Hike News
Hike News

Go初識-day4-作用域、數據類型與操作符

變量的作用域

  1. 在函數內部聲明的變量叫做局部變量,生命週期僅限於函數內部;可見性也僅限於函數內部,函數外部皆無法訪問
    • 若函數內部有語句塊,如for,if,switch內部的語句塊,亦指{}內部,在語句塊內部定義的變量,在跳脫語句塊後也會回收
  2. 在函數外部聲明的變量叫做全局變量
    • 生命週期作用於整個程序
    • 如果變量名為大寫可以在外部訪問調用
    • 函數外部只能聲明變量、常量,不能執行代碼

數據類型與操作符

bool類型

bool類型只能存truefalse

聲明

1
2
3
var a bool   //[1]
var a bool = true
var a = true

[1] 聲明變量時未初始化值,默認初始化為false

相關操作符

! : 取反值
&& : and 操作 (注意短路特性,一開始為false即為false)
|| : or 操作 (注意短路特性,一開始為true即為true)

數字類型

主要有int,int8,in16,int32,int64,uint8,uint16,uint32,uint64,float32,float64

聲明

1
2
3
4
var a int8 = 100
var b int16 = 200
var c float32
var d float64

類型轉換

在Go語言中不同的數字類型之間是不能直接賦值的
以下為錯誤的代碼

1
2
var a int8 = 100
var b int16 = a

需透過類型轉換才能成功賦值or運算

語法

目標類型(欲轉換的變量)

1
2
var 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
42
package 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
2
var a byte
var b byte = 'c' //[1]

[1]使用''(單引號)來表示字符,只能存放一個字符

example

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

import "fmt"

var b byte = 'c'

func main(){
fmt.Println(b) //[1]
fmt.Printf("%c\n",b) //[2]
fmt.Println(string(b)) //[3]
}

[1] 默認打印byte會顯示此字符對應的ASCII碼數字
[2] 使用Printf格式化輸出,可打印原字符
[3] 將字符轉成字符串類型也可打印原字符

result

1
2
3
99
c
c

字符串類型

0個或多個字符組成的字符串

聲明

1
2
3
var str string //[1]
var hello string = "Hello World!!" //[2]
var speical string = `\n \t` //[3]

[1] 聲明string時沒有初始化變量默認為空字符串
[2] 使用""(雙引號)來表示字符串,可存放0或多個字符串,具有轉譯的功能
[3] 使用``(反引號)來表示字符串,可存放0或多個字符串,不具轉譯功能(輸出甚麼就是甚麼),為原生字符串,可用在輸出多行

example

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
package main

import "fmt"

var str string
var hello string = "Hello\tWorld\n!!"
var speical string = `Hello\tWorld\n!!`
var poem string = `白日依山盡
黃河 入海流
欲窮千里目,更上一層樓`

func main(){
fmt.Println("str =",str)
fmt.Println("hello =",hello)
fmt.Println("special =",speical)
fmt.Println("poem = ",poem)
}

result

1
2
3
4
5
6
7
str = 
hello = Hello World
!!
special = Hello\tWorld\n!!
poem = 白日依山盡
黃河 入海流
欲窮千里目,更上一層樓