練習go基礎語法
goland 工具啟用地址
https://golangcaff.com/topics/62/jetbrains-goland-201812-activates-license-server-address
參考連結
https://studygolang.com/subject/2
Go 語言的基礎組成有以下幾個部分:
一、基礎資料型別
bool型別 數字型別: uint8,uint16,uint32,uint64以及對應的無符號型別 float32,float64 浮點數 complex64, 實部和虛部都是 float32 型別的的複數。 complex128 實部和虛部都是 float64 型別的的複數 byte :uint8的別名 rune(重點):int32的別名 uintptr:無符號整型,用於存放一個指標. 字串型別 string go語言型別轉換 type_name(expression) type_name為型別,expression為表示式
二、變數
2.1 宣告變數
2.2 宣告多個變數,並進行初始化
var vname1, vname2, vname3 type
vname1, vname2, vname3 = v1, v2, v3
var vname1, vname2, vname3 = v1, v2, v3 //和python很像,不需要顯示宣告型別,自動推斷
簡短宣告形式,使用:=賦值操作符,變數的初始化時變數的型別由系統自動推斷,宣告語句加上var關鍵字有點多餘,因此可以使用賦值運算子簡寫.但是這種宣告方式只能在函式體內,不能用於全域性變數的宣告和賦值.
a, b, c := 10, 20, 30
三、常量
const型別變數
四、控制流程
if else條件語句
switch分支語句
while迴圈語句
for range 遍歷
五、函式
5.1 函式宣告和使用
func function_name( [parameter list] ) [return_types] {
函式體
}
使用func關鍵詞來定義函式,把"返回值型別"移動到了"函式形參"的後面
5.2 函式返回值
函式可返回多個值
命名函式返回值
空白符’_’,用來表示任何型別的任何值
5.3 區分開函式和方法的區別
六、包
go語言引入了包的概念,包用於組織Go原始碼,提供了更好的可讀性和可重用性。由於包提供了程式碼的封裝,因此使得Go程式碼更加利於維護。
屬於某一個包的原始檔應該放到一個包名命名的資料夾中。
6.1 建立自定義包
package package_name
6.2 匯入自定義包
import package_name
6.3 init函式
所有包都可以包含一個init函式,用於執行初始化任務。
七、Map集合
7.1 map建立
map_variable := make(map[key_data_type] value_data_type)
key_data_type是map的鍵的型別,value_data_type是map的值的型別
如果不初始化 map,那麼就會建立一個 nil map。空map 不能用來存放鍵值對
personSalary := make(map[string] int)
personSalary[“haolipeng”] = 5000
personSalary[“zhouyang”] = 4000
personSalary[“yuxiuzhi”] = 3000
或者
personSalary := map[string] int {
“haolipeng” :5000,
“zhouyagn” :4000
}
7.2 給map新增元素
7.3 獲取map中元素
7.4 從map中刪除元素
八、指標
8.1 指標的宣告
b := 200
var a *int = &b
8.2 宣告指標變數時使用’*’,
對地址解引用時使用’&’
指標的零值是nil
不支援指標運算
8.3 指標作為函式形參
8.3 不要想函式傳遞陣列的指標,而應該使用切片
九、結構體
結構體指標
結構體或結構體指標作為函式形參
結構體代替類
在像 Java 這樣的 OOP 語言中,是使用構造器來解決這種問題的。一個合法的物件必須使用引數化的構造器來建立,在Go語言中可以自己實現New函式返回建立好的結構體來讓外部包引用,而非直接引用結構體。
![在這裡插入圖片描述](https://img-blog.csdn.net/20181003090401400?watermark/2/text/aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L2hhb2xpcGVuZ3poYW5zaGVu/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70)
組合代替繼承
十、陣列和切片(需要細化一點)
切片相當於動態陣列,可以追加元素,在必要時使切片的容量增大.
var slice1 []type = make([]type, len)
也可以簡寫為
slice1 := make([]type, len)
type:切片的型別
len:切片的長度
go介面
golang中方法和函式是不同的
函式則是獨立的程式實體。我們可以宣告有名字的函式,也可以宣告沒名字的函式,也可以把它們當成普通值來傳遞。
方法需要與名字,不能當成值來看待,必須隸屬於某一個型別,方法所屬的型別會通過其宣告中的接收者(receiver)宣告。
func (接收者型別宣告) SetName(name string) {
}
go語言的嵌入欄位(介面型別或結構體型別嵌入),是變相實現了C++語言中的組合
方法隸屬的型別其實並不侷限於結構體型別
go小寫的只能包內訪問。
如何向函式傳遞陣列引數
var balance = [5]float32{1000.0, 2.0, 3.4, 7.0, 50.0}
[5]float32表明元素型別是float32,元素個數是5,
後面的{1000.0, 2.0, 3.4, 7.0, 50.0}是實際初始化的值