Go學習筆記(十)基礎遺漏整理。
阿新 • • 發佈:2019-01-22
1 導包可以加入別名
import std “fmt” 之後程式可以呼叫 std. 代替fmt。這樣會防止包名重複。
2 資料型別 byte(等同於uint8) rune(等於int32)
3“strconv”包下 int=》string;string=》int;
//int=》string
strconv.Itoa(a)
//string=》int
strconv.Atoi(b)
4常量用 const 宣告。 大寫
5運算子:&^
/*
6: 0110
11:1011
-------
&^ 0100 (如果下面的位數是1則需要強行改成0,否則不對第一個書進行操作)
*/
6 迴圈:標籤和goto結合使用,標籤放在goto語句後面避免死迴圈。
7. 陣列:
a := [20]int[19:1] //(即將索引為19的賦值為1)
陣列可以進行比較 ==或者!= 需要型別和長度相同才能進行比較。
8.氣泡排序
// BubbleSort project 氣泡排序
package main
import (
"fmt"
)
func main() {
//陣列定義是大括號,
a := [5]int{5, 2, 6, 3, 9}
fmt.Println(a)
lenth := len(a)
for i := 0 ; i < lenth; i++ {
for j := i + 1; j < lenth; j++ {
if a[i] < a[j] {
temp := a[i]
a[i] = a[j]
a[j] = temp
}
}
}
fmt.Println(a)
}
9. Slice切片:copy(s1,s2)以長度短的為準。append追加切片,長度超過,重新分配記憶體地址。切片取陣列中的一部分如果長度不超過,修改其中一個數組,取出來的數值也會變。
10.
for i,v:=rang slice{} //i 是索引或者key
11 函式function
func A() (int,int,int){ //第二個小括號內是返回型別
}
func B(B ... int){ //不定長變參必須是最後一個引數。
}
- 如果傳遞的是slice型別的在函式內部修改slice的,外部的slice 也被修改了。如果傳入的是int,string 等這種值傳遞不影響外部。如果傳遞指標型別的話,就改變原始值。
閉包的作用是:返回一個匿名函式
- defer 後定義的先呼叫,逆序向上呼叫
- 沒有異常機制,有Panic/recover模式來處理錯誤。
- Panic可以在任何地方引發,但是recover只有在defer呼叫的函式中有效;Panic執行之後之後就不運行了。defer func(){ recover}放在Panic之前。
package main
import (
"fmt"
)
func main() {
A()
B()
C()
}
func A() {
fmt.Println("func a")
}
func B() {
defer func() {
if err := recover(); err != nil {
fmt.Println("recover in b")
}
}()
panic("func b")
}
func C() {
fmt.Println("func c")
}
匿名結構
a := &struct { //取地址
Name string
Age int
}{
Name: "hif",
Age: 10,
}
匿名欄位
type nimingstring struct {
string
int
}
//初始化的時候必需對應I
s := nimingstring{"sad", 1}
組合結構(結構的嵌入)
type human struct {
Sex int
}
type teacher struct {
human
Name string
Age int
}
type student struct {
human
Name string
Age int
}
//初始化
t := teacher{Name: "as", Age: 2, human: human{Sex: 1}}
st := student{Name: "aasasasas", Age: 22, human: human{Sex: 0}}
t.Sex = 1
可能遇到的問題
- 導包 儘量寫絕對路徑
- slice特性是指向地址。但是寫方法對slice進行處理,為了避免指向地址變了,寫上返回值。
- time包。自定義時間型別,Format(常量或者api內部型別(全複製))。禁止修改,會影響結果。
- for range和閉包的坑:不作為引數傳遞的都是引用地址的傳遞。需要作為引數傳遞(進行值拷貝傳遞)。
線上網站:
疑問? 閉包的概念