go語言基礎(main函數、數據類型)
1、Go語言介紹
- Go語言是雲計算時代的c語言
- c和c++這類語言提供了很快的執行速度,而Rudy和python這類語言則擅長快速開發。Go語言則介於兩者之間,不僅提供了高性能的語言,同時也讓開發更快速
優勢
- 部署簡單,可直接編譯成機器碼、不依賴其他庫,部署就是扔一個文件上去就完成了
- 靜態類型語言(c是靜態語言、python解釋性語言),但是有動態語言的感覺,靜態類型的語言就是可以在編譯的時候檢查出來隱藏的大多數問題,動態語言的感覺就是有很多的包可以使用,寫起來的效率高
- 語言層面支持並發,這是Go最大的特色。可以充分的利用多核,很容易的使用並發
- 內置runtime,支持垃圾回收GC,不需要手動釋放
- 關鍵字25個,支持:繼承、重載、對象等
- 豐富的標准庫
- 跨平台編譯
- 內嵌c支持
2、 main函數
- go語言以包作為管理單位
- 每個文件必須先聲明包
- 程序必須有一個main包(重要),沒有程序無法編譯
- 程序要有一個入口函數main函數,並且有且只有一個,也就是說在liteide直接圖形界面編譯,一個文件夾只能有一個main函數
- 左括號必須和函數同行
- "hello world"用fmt.Println打印到屏幕,Println()會自動換行
- // 和/* */注釋,選中代碼,按ctrl+\,注釋和取消注釋代碼的快捷鍵
- 會自動格式化
- 語句結尾沒有分號
- 運行:ctrl+R
- import導入的包必須使用,聲明的變量也必須使用
3、使用命令行運行文件(在cmd文件的目錄下)
- go build XXX.go:編譯生成一個可執行程序(可以解決在一個文件中快捷鍵只能生成可執行文件.exe的問題)。如go bulid 02_hello.go,go build 01_hello.go運行2次,也會生成2個可執行文件
- cls:清屏
- go run XXX.go:不生成程序,直接運行
4、變量、常量、枚舉
4.1 輸出
- Println:一段一段處理,自動加換行符
- Printf:格式化輸出,把a的內容放在%d的位置
如:
fmt.Println("a = ", a)
fmt.Println("a = ", a, ", b = ", b, " ,c = ", c)
fmt.Printf("a = %d\n", a)
fmt.Printf("a = %d, b = %d, c = %d\n", a, b, c)
4.2 聲明變量
- var a int(申明一個變量)
- var a,b int(聲明2個變量)
- var b int = 10(聲明變量,同時初始化賦值)
- 自動推導類型,必須初始化,通過初始化的值確定類型(常用),只能一次,賦值可以多次
如:
c := 30
fmt.Printf("c type is %T\n", c) //%T打印變量所屬的類型
多次賦值,以及值的交換
i, j := 10, 20
j, i = j, i
多個變量不同類型的聲明(定義)
var (
a int
b float64
)
var (
a int = 1
b float64 = 1.1
)
var (
a = 1
b = 1.1
)
4.3 匿名變量
匿名變量,丟棄數據不處理,匿名變量配合函數返回值使用,才有優勢
tmp, _ = i, j
fmt.Println("tmp = ", tmp)
func test() (a, b, c int){
return 1, 2, 3
}
var c, d, e int
_, d, _ = test()
fmt.Printf("d = %d/n", d)
4.4 常量
- 變量:程序運行期間,可以改變的量,變量聲明需要var
-
常量:程序運行期間,不可以改變的量,常量聲明需要const,常量自動推導不需要冒號
const a int = 10 fmt.Println("a = ", a)
const b = 11.2 //自動推導不需要冒號 fmt.Printf("b type is %T\n", b) fmt.Println("b = ", b)
多個常量的聲明 const ( i int = 10 j float64 = 3.14 ) const ( i int = 10 j float64 = 3.14 ) const ( i = 10 j = 3.14 )
4.5 枚舉iota
- iota常量自動生成器,每個一行,自動累加1
- iota給常量賦值使用
- iota遇到const,重置為0
- 可以只寫一個iota
- 如果是同一行,值都一樣
如:
const (
a = iota //0
b = iota //1
c = iota //2
)
const d = iota //重置為0
const (
a1 = iota //0
b1 //1
c1 //2
)
const (
i = iota //0
j1, j2, j3 = iota, iota, iota //1
k = iota //2
)
5 數據類型
數據類型的作用:告訴編譯器這個數(變量)應該以多大的內存存儲
類型 | 名稱 | 長度 | 默認值 | 說明 |
---|---|---|---|---|
bool | 布爾類型 | 1 | false | true 或 fasle |
byte | 字節型 | 1 | 0 | uint8別名,只能存儲英文字符 |
rune | 字符類型 | 4 | 0 | 可以存儲英文或漢字字符,存儲unicode編碼,等價於uint32 |
int,uint | 整型 | 4或8 | 0 | 有符號位和無符號位,32位或者64位 |
int8,uint8 | 整型 | 1 | 0 | -128~127, 0~255 |
int16,uint16 | 整型 | 2 | 0 | |
int32,uint32 | 整型 | 4 | 0 | |
int64,uint64 | 整型 | 8 | 0 | |
float32 | 浮點型 | 4 | 0.0 | 小數精確到7位 |
float64 | 浮點型 | 8 | 0.0 | 小數精確到15位 |
complex64 | 復數類型 | 8 | ||
complex128 | 復數類型 | 16 | ||
uintptr | 整型 | 4或8 | ||
string | 字符串 |