1. 程式人生 > >Go學習筆記(十)基礎遺漏整理。

Go學習筆記(十)基礎遺漏整理。

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.

map巢狀map時需要每一層map都要初始化。
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和閉包的坑:不作為引數傳遞的都是引用地址的傳遞。需要作為引數傳遞(進行值拷貝傳遞)。

線上網站:

疑問? 閉包的概念