Go-數據類型以及變數,常量,函數,包的使用
- 2020 年 3 月 3 日
- 筆記
Go-數據類型以及變數,常量,函數,包的使用
一.數據類型
1.字元串類型
string -雙引號包裹的:"xxx" -反引號包裹,可以換行, 注意: 區別於python,是沒有單引號,三引號的 用法: var s string=` 你好 我好 大家好 ` var b string="你好n" + "我好" + "大家好" 2.數字類型
有符號整型(整數 含正負):
- int: int 在32位機器上是int32 在64位機器是int64
- int8: 表示佔一個位元組(8個比特位)表示的範圍是:正負2的7次方-1
- int16: 表示佔兩個位元組(16個比特位)表示的範圍是:正負2的15次方-1
- int32: 類似int8
- int64: 類似int8
無符號整型(正整數 ):
- uint :uint 在32位機器上是uint32 在64位機器是uint64
- uint8 : int8 表示數字範圍是 正2的8次方-1
- uint16
- uint32
- uint64
浮點型
float32 : 有符號小數,32後7位
float64: 64 有符號小數,32後7位
都是表示小數點後範圍不一樣(程式碼裡面沒有float,只有float64和float32)
complex64: 32 位實數和虛數
complex128: 64 位實數和虛數
別名
- rune:rune是int32的別名
- byte:byte 是uint8的別名
3.布爾類型(首字母小寫)
false 和 true 4.派生類型(簡單介紹)
指針類型(Pointer)
數組類型
結構化類型(struct)
Channel 類型
函數類型
切片類型
介面類型(interface)
Map 類型
二.變數的聲明
方式一(全定義)
單個變數
var 變數名 變數數據類型=變數值 多個變數
a,b,c都為string必須3個變數類型相同
var a,b,c string="1","2","3" //注意string必須是雙引號 方式二(類型推導) 類型可以省略
單個變數
var 變數名 =變數值 多個變數
a,c為string,b為int
a,b,c三個變數類型不同也可以聲明 var a,b,c="1",2,"3" 方式三(簡略聲明)
單個變數
變數名 := 變數值 //注意點:= 必須連著不能有空格 多個變數
a,b,c都為string
a,b,c三個變數類型不同也可以聲明 a,b,c :="1",2,"3" 注意點
- 同一變數名不能重複聲明
- 變數定義和賦初值(int 空值是 0 string空值是 "")
- 變數要先定義後才可以賦值再使用
- 變數名定義後必須使用,否則報錯
- 可以聲明多個變數(三種方式都可以用)
- 如果聲明後的變數需要修改值用
=
var a int a=100 三.常量的聲明
方式一
const 變數名 變數類型 =值 方式二
const 變數名 =值 package main import "fmt" //程式運行期間不允許修改 //資料庫,redis連接 //const關鍵字 常量名 =常量值 賦值一次,不允許修改 //const NAME = "cxk" //const NAME string = "cxk" const sex = true func main() { //fmt.Println(NAME) //fmt.Println(sex) //sex=false fmt.Println(sex) } 注意點
常量一旦被定義賦值後將無法第二次修改
四、函數的使用
無參數無返回值
方式一 func 函數名()(){} 方式二 func 函數名(){} 無參數有返回值
方式一 func 函數名()(返回參數1的數據類型1){} 定長參數,有返回值
func 函數名(參數1 類型,參數2 類型)(返回參數1的數據類型1,返回參數2的數據類型){} //如果參數1與參數2的數據類型相同 func 函數名(參數1,參數2 類型)(返回參數1的數據類型1,返回參數2的數據類型){} //如果參數1與參數2的數據類型為int,參數3數據類型為uint func 函數名(參數1,參數2 int,參數3 uint)(返回參數1的數據類型1,返回參數2的數據類型){} 定長參數,無回值
//方式一 func 函數名(參數1 類型,參數2 類型){} //方式二 func 函數名(參數1 類型,參數2 類型)(){} 不定長參數
//方式一 func 函數名(不定長參數1 ...類型){} //有定長參數和不定長參數 func 函數名(定長參數 類型,不定長參數1 ... 類型){} //不定長的參數必須寫在定長的參數後面 //不定長參數所有數據類型 func 函數名(不定長參數1... interface{}){} 匿名函數
//定義 func (參數一,參數二)(返回參數1的數據類型1){return 1 } //定義+調用 func (參數一,參數二)(返回參數1的數據類型1){return 1 }() 命名返回值
package main import "fmt" func abc()(a int,b int){ //var a,b int 相當於默認執行這條 //但是ab只在函數內生效函數外部生效 return //return 與return a,b是一樣的 } func main() { fmt.Println(abc()) } 注意點
- 由於是編譯型語言main 與main裡面使用的函數不需要注意先後關係
沒有關鍵字傳參沒有默認參數- 函數沒有縮進的約數,但是為了排版還是要注意縮進不然會看上去非常非常
丑
函數使用實例:
//函數 package main func main() { //test() //test(3,4,"xxx") //沒有關鍵字參數一說,都按位置傳,也沒有默認參數 //test(3,4,"xxx") //三種方法調用 //var a int =test(3,4) //定義變數a接收返回值 //var a =test(3,4) //a :=test(3,4) //fmt.Println(a) //返回兩個值,就要用兩個值來接受 //a,b:=test(3,4) //這種用的多 //var a,b int=test(3,4) //var a,b =test(3,4) //fmt.Println(a,b) //如果有個值不想接收 // _,a,_:=test(3,4) //fmt.Println(a) // py中 _ 是一個真正的變數,go中,就是沒有 //fmt.Println(_) test(1,2,3,4,5,5,6,7) } //func關鍵字 函數名(參數1 參數類型,參數2 參數類型)(){ //函數體的內容 //} //函數使用1(沒有先定義再使用這一說) //func test() { // fmt.Println("我是test") //} //函數使用2 帶參數 //func test(a int,b int,c string) { // fmt.Println(a+b) // fmt.Println(c) //} //函數使用3 //func test(a ,b int,c string) { // fmt.Println(a+b) // fmt.Println(c) //} ////函數使用 4 規定返回值類型 //func test(a,b int) int { // //返回a+b的結果 // return a+b //} //函數使用 5 規定返回值類型,返回多個值 //func test(a,b int) (int,int,string) { // //返回a+b的結果 // return a+b,a*b,"ok" //} //函數使用6 不定長參數 //func test(z ...int) { // fmt.Println(z) // //} 五、包的使用
包的介紹以及使用
為什麼使用包? 為了更加好的維護程式碼
包的位置? 必須在GOPATH路徑的src中
能導入的內容? 導入的內容名稱必須是大寫字母開頭不然無法導入包
src中的一個文件夾為一個包
包內的變數以及函數名 在同一文件夾下,就相當於同一包中,任何變數名不能進行二次定義
在同一包中,可以互相使用其他GO文件下的函數且不需要導入
go 程式中必須有一個main和一個main入口 如果不是package main他就是一個包,他會把裡面的函數都進行保存,不能有main函數
main`也是一個特殊的包,其中必須要有main函數,作為程式的入口,也就是執行這個文件的時候其中就是運行`main函數 導入第三方模組
語法:go get 第三方模組路徑
文件會被安裝在GOPATH路徑的src文件夾下

