一、基礎介紹

Go 是靜態(編譯型)語言,是區別於解釋型語言的弱型別語言(靜態:型別固定,強型別:不同型別不允許直接運算)

例如 python 就是動態強型別語言

1、Go 的特性:

跨平臺的編譯型語言,交叉編譯

管道(channel),切片(slice),併發(routine)

有垃圾回收機制

支援面向物件和麵向過程的程式設計模式(Go 的面向物件沒有類的概念)

2、Go 的常用命令:

go env  	// go的環境變數
-GO111MODULE= // 空的,現在沒有使用MODULE模式
-GOPATH=C:\Users\oldboy\go // 程式碼存放路徑
-GOROOT=c:\go // go sdk安裝路徑
go build // 編譯型語言,需要先編譯再執行,編譯成可執行檔案,執行可執行檔案
go run // 編譯並執行,開發階段用,兩步並作一步 go get // 下載並安裝包和依賴等同於pip install
go version
go fmt // 執行gofmt進行格式化(go fmt :自動將程式碼格式)

3、Hello Word

// 單行註釋

/*
多行註釋
多行註釋
*/ // Go(所有編譯型語言)專案要執行,必須有一個入口
// Go 的入口是 main 包下的 main 函式 // main 包下可不可以有多個 main 函式 package main // 宣告包名,包名是 main,每一個 Go 檔案都屬於某個包 import "fmt" // 匯入包,內建包 func main() { // 定義了一個main函式,大括號包裹是函式體的內容
fmt.Println("Hello World") // 列印函式等同與print()
} // 編譯
go build s1.go
// 執行
s1.exe // 編譯並執行
go run s1.go
// 在goland中,右鍵,執行即可

二、變數

go 語言的變數定義方式主要分為三種方式,並且不能重複定義。

定義方式

1、方式一:全定義

// var 變數名 變數型別 = 變數值

package main	

import "fmt"

func main() {
var age int = 10 // 在go中,變數定義了就必須使用,如果不使用就報錯
fmt.Println(age)
}

2、方式二:型別推導(型別就不需要寫了)

package main

import "fmt"

func main() {
var age = 20
var name = "XiaoYang" fmt.Println(age, name)
fmt.Printf("%T\n",name) // 檢視變數型別 \n表示換行
fmt.Printf("%p",&name) // 檢視變數記憶體地址
} // 輸出
20 XiaoYang
string
0xc000056230

3、方式三:簡略宣告(型別和 var 關鍵字都不寫)

package main

import "fmt"

func main() {
age := 20
var age int = 30 // 重複定義會報錯,不能重複定義 fmt.Println(age)
}

4、其他定義方式:其他定義方式都是在前三種方式的基礎上做出變形而出現的:

只定義不賦值

var age int // 定義變數,如果只定義不賦值,只能用這種方式

var age		// 錯誤,無法判斷型別

宣告多個變數

var width, height int = 100, 50		// 宣告多個變數
var width, height = 100, 50 // 宣告多個變數
var width, height = 100, "XiaoYang" // 宣告多個變數
width, height := 100, "XiaoYang" // 宣告多個變數

宣告多個變數,並賦初始值

var (
name = "XiaoYang"
age int = 20
height int
)
fmt.Println(name, age, height)

注意:

var age int = 20

name, age := "XiaoYang", 21
// 這種情況不會報錯,我們覺得是重複定義,冒號左側只要有一個沒有定義過得變數就可以。 fmt.Println(name, age)

總結:

  1. 變數型別在定義階段就確定了,一旦確定,不允許改變
  2. 變數不可以重複定義
  3. 變數要先定義在使用

變數定義規範

  • 變數命名建儘量使用駝峰(大小寫有特殊意義)
  • Go 檔案命名建議用下劃線
  • 一個名字必須以一個字母(Unicode字母)或下劃線開頭,後面可以跟任意的字母、數字或下劃線
  • 大寫字母和小寫字母是不同的:Name 和 name 是兩個不同的變數
  • 關鍵字和保留字都不建議用作變數名

三、常量

常量定義的定義使用 const 關鍵字定義,不允許改變

方式一:

package main

import "fmt"

func main() {
const age int = 20 // 不允許修改,修改會報錯 fmt.Println(age)
}

方式二:型別推導

package main

import "fmt"

func main() {
const age = 20 fmt.Println(age)
}

注意:不能使用 := 這種方式定義,這樣就是定義變量了

四、基礎資料型別

1、數字

// 有符號整形
int: 在32位機器是int32,在64位機器是int64
int8: 表示整數範圍是:8個位元位,8個bit是1byte ,第一位表示正負數0/1, 所以是2的7次方-1 的範圍
int16: 2的15次方減一
int32: 2的32次方減一
int64: 2的64次方減一
byte: 等於int8
short: 等於int16 // 無符號整形
uint8: 沒有負數表示,所以是2的8次方減一
uint16: 同上
uint32:
uint64:

2、浮點型(小數,32/64表示小數點後長度多少位)

float32
float64

3、布林(Bool)

// 資料型別預設值:

數字型別是		0
字串型別是 空字串
布林型別 false

4、字串

// 雙引號包裹
// 單引號包裹