一:補充:go run/ go install/ go build / go get的區別
- go run 執行當個.go檔案
- go install 在編譯原始碼之後還安裝到指定的目錄
- go build 加上可編譯的go原始檔可以得到一個可執行檔案
- go get = git clone + go install 從指定源上面下載或者更新指定的程式碼和依賴,並對他們進行編譯和安裝
二:單引號、雙引號和反引號
而在Go中,雙引號是用來表示字串string,其實質是一個byte型別的陣列,單引號表示rune型別。還有一個反引號,用來建立原生的字串字面量,它可以由多行組成,但不支援任何轉義序列
三:變數
www.studygolang.com/articles/11…
1。宣告單個變數
var age int //如果沒有為變數賦值,自動初始化,賦值該變數型別的零值
2。宣告變數並初始化
var age int = 29
3.型別推斷,如果變數有初始值,那麼go自動推斷變數的型別
var age = 29
4.宣告多個變數
var width, height int = 100,50
宣告不同型別的變數
var (
name = "bob"
age = 20
height int
)
5.簡短宣告 操作符左邊至少有一個變數是尚未宣告的
name, age := "bob", 29
go是強型別的,不允許某一型別的變數賦值為其他型別的值複製程式碼
四:型別
www.studygolang.com/articles/11…
1、go支援的基本型別:
bool
數字型別:
int8,int16, int32, int64, int
uint8, uint16, uint32, uint64, uint
float32, float64
complex64, complex128
byte //uint8的別名
rune //int32的別名
string
2、有符號整型
int8:8位有符號整型,-128-127
int16:16位有符號整型 -32768-32767
int:根據不同的底層平臺,表示32或64位整型 在32位系統下是32位,在64位系統下是64位
在Printf方法中,%T格式說明符,可以列印出變數的型別
go的unsafe包提供一個Sizeof函式,該函式接收變數並返回它的位元組大小。unsafe包應該小心使用,使用unsafe包可能帶來可移植性問題
//Printf方法中,%T列印出變數的型別
var num int = 89
fmt.Printf("type num is %T,size of a is %d", num, unsafe.Sizeof(num))
3。無符號整型
uint8:表示8位無符號整型 0-255
4。浮點型別
float32:32浮點型 float64:64位浮點型
5。複數型別
complex64:實部和虛部都是float32型別的複數
complex128:實部和虛部都是float64型別的複數
c1 := complex(5,7)
c2 := 6+7i
6.string型別
在go中,字串是位元組的集合
7。型別轉換
go有著嚴格的強型別特徵,go沒有自動型別提升和型別轉換
把v轉換為T型別的語法是T(v) i := 10 var j float64 = float64(i)複製程式碼
五:常量
www.studygolang.com/articles/11…
常量不能再重新賦值為其他的值,常量的值會在編譯時確定。因為函式呼叫發生在執行時,所以不能將函式的返回值賦值給常量
1。字串常量
a:無型別的字串屬於常量 const hello = "hello world"
b:go是強型別語言,所有的變數都必須有明確的型別,那麼下面是如何將無型別的常量Sam賦值給變數name的呢?
var name = "Sam"
無型別的常量有一個與他們相關聯的預設型別,並且當且僅當一行程式碼需要時才提供
c:建立一個帶型別的常量 const typehello string = "hello world"
d:不允許將一種型別的變數賦值給另一種型別的變數
var defaultName = "Sam" //允許
type myString string
var customName myString = "Sam" //允許
customName = defaultName //不允許
2。布林型別
3。數字常量
const a = 5
var intVar int = a
var int32var int32 = a
4。數字表示式
數字常量可以在表示式中自由混合和匹配,只有當它們被分配給變數或者在需要型別的程式碼中的任何地方使用時,才需要型別
var a = 5.9/8 //a是float64複製程式碼
六:函式
www.studygolang.com/articles/11…
1。函式的宣告
func calculateBill(price int,no int) int {
var total = price * no
return total
}
2.示例函式 如果有連續若干個引數,它們的型別一致,無須一一羅列,只需最後一個引數後新增該型別
func calculateBill(price, no int) int {
var total = price * no
return total
}
3、多返回值
func rectProps(length, width float64)(float64, float64){
var area = length * width
var perimeter = (length + width) * 2
return area, perimeter
}
4、空白符
_ 在go中被用作空白符,可以用作表示任何型別的任何值複製程式碼
七:包
www.studygolang.com/articles/11…
1、匯出名字
在go中,任何以大寫字母開頭的變數或者函式都是被匯出的名字。
2、init函式 沒有任何返回值型別和引數
包的初始化:
a:初始化包級別的變數
b:緊接著呼叫init函式。包可以有多個init函式
3、使用空白識別符號
匯入包,卻不在程式碼中使用 是非法的 使用空白識別符號複製程式碼
八:if-else語句
www.studygolang.com/articles/11…
if num := 10;num % 2 == 0 {
fmt.Println(num)
} else {
fmt.Println(num)
}複製程式碼
九:迴圈
www.studygolang.com/articles/11…
for是go語言唯一的迴圈語句
for i := 1;i <= 10;i++{
fmt.Printf(i)
}複製程式碼
十:switch語句
www.studygolang.com/articles/11…
finger := 4
switch finger {
case 1:
fmt.Println(4)
}
1、預設情況
switch finger := 8;finger {
case 1:
fmt.Println(4)
default:
fmt.Println(3)
}
2、多表示式判斷
letter := "i"
switch letter {
case "a", "e", "i":
fmt.Println("w")
default:
fmt.Println("not")
}
3、無表示式的switch
4、Fallthrough語句
使用Fallthrough語句可以在已經執行完成的case語句之後,把控制權轉移到下一個case的執行程式碼中複製程式碼