初識 go 語言:資料類型

來源:互聯網
上載者:User

標籤:sde   stp   str   長度   from   取數   tst   映射   副本   

目錄

  • 資料類型
    • 指標
    • 結構體
    • 數組
    • 切片
    • 切片的方法
    • 映射
    • 函數閉包
  • 結束語

前言: go語言的第三篇文章,主要講述go語言中的資料類型,包括指標,結構體,數組,切片,映射,函數閉包等,每個都提供了樣本,可直接運行。

資料類型指標

指標儲存了值的記憶體位址;

  • (* 操作符)表示指標指向的底層值;
  • (& 操作符)會產生一個指向其運算元的指標;
    樣本:
func testPoint() {    i := 20    p := &i    fmt.Println(*p)    *p = 1    fmt.Println(i)}

解讀:*p 的值為 20 ,i 的值為 1

  • 第一個輸出:通過指標 p 讀取 i
  • 第二個輸出: 通過指標 p 設定 i
結構體

使用 struct 關鍵字表示一個結構體。
結構體就是一個欄位的集合,可以使用.來取值
樣本:

/*struct*/type user struct {    name string    age  int}func testStruct() {    x := user{"mingyu", 23}    fmt.Println("對象", x)    fmt.Println("姓名", x.name)    x.name = "xiaona"    fmt.Println("從新設定姓名", x.name)    //通過指標訪問    y := &x    fmt.Println(*y)    fmt.Println(y.age)    //指定屬性賦值    z := user{age: 11}    fmt.Println("對象", z)}
數組

類型 [n]T 表示擁有 n 個 T 類型的值的數組。
樣本:

//數組func testArray() {    arr := [2]int{1, 2}    fmt.Println("數組", arr)    //指定下標賦值    arr[1] = 10    fmt.Println("數組", arr)}
切片

切片的感念是基於數組的,通過指定數組的下標,動態擷取數組。
如:arr[1:3] 截取下標為1到3的資料 [下標前算後不算,中間用:分割]:

  • [1:3] 下標1到3; [:2]:下標0到2之前;[1:]下標為1。

切片並不儲存任何資料,它只是描述了底層數組中的一段,所以修改切片資料,數組資料也會改變。
切片 s 的長度和容量可通過運算式 len(s) 和 cap(s) 來擷取,零值是 nil。
樣本:

//切片func testSection() {    arr := [5]int{1, 2, 3, 4, 5}    fmt.Println("數組", arr)    simpleArr := arr[1:3]    fmt.Println("切片", simpleArr)    simpleArr[1] = 20    fmt.Println("修改切片後的數組", arr)}
切片的方法

make:

  • make建立切片b := make([]int, 0, 5)
  • 參數含義: 1.類型,2:len(長度),3:cap(容量);

append

  • 追加切片數組 s = append(s, 2, 3, 4)
  • 給切片s尾部追加元素2,3,4

Range

  • 用於for迴圈遍曆切片或映射
  • 每次迭代都會返回兩個值:第一個值為當前元素的下標,第二個值為該下標所對應元素的一份副本
    • 可以將下標或值賦予 _ 來忽略它
      • 若你只需要索引,去掉value 的部分即可

樣本:

//切片方法func testSectionFunc() {    arr := make([]string, 0, 0)    fmt.Println(len(arr), cap(arr), arr)    arr = append(arr, "陳", "明羽")    fmt.Println(len(arr), cap(arr), arr)    for i, v := range arr {        fmt.Println(i, v)    }    fmt.Println("-----------")    for _, v := range arr {        fmt.Println(v)    }    fmt.Println("-----------")    for i := range arr {        fmt.Println(i)    }}
映射

將鍵映射到值,也就是map。
make 函數會返回給定類型的映射,並將其初始化備用。
樣本:

//映射func testMap() {    m := make(map[string]user)    m["1號"] = user{        "明羽", 23,    }    fmt.Println(m["1號"])    //還可以這麼寫,還是覺得這麼寫舒服    var mor = map[string]user{        "1號": {            "明羽", 23,        },        "2號": {            "小娜", 23,        },    }    fmt.Println(mor)}

相關方法:

  • 射 m 中插入或修改元素:m[key] = elem
  • 元素:elem = m[key]
  • 素:delete(m, key)
  • 雙賦值檢測某個鍵是否存在:elem, ok = m[key]
    • 若 key 在 m 中,ok 為 true;否則,ok 為 false。
    • 若 key 不在映射中,那麼 elem 是該映射元素類型的零值
    • 若 elem 或 ok 還未聲明,你可以使用短變數聲明:elem, ok := m[key]
函數閉包

函數可以像值一樣傳遞。
樣本:

//函數閉包func testB() func(int) int {    x := 10    return func(a int) int {        return x + a    }}// c 就是testB返回的方法c(i)就是調到x+afunc testA() {    c := testB()    for i := 0; i < 5; i++ {        fmt.Println(c(i))    }}


結束語

初識 go 語言系列

  • [x] 初識 go 語言
  • [x] 初識 go 語言:文法
  • [x] 初識 go 語言:資料類型
  • [ ] 初識 go 語言:方法,介面及並發

//x表示以完成

關注公眾號

初識 go 語言:資料類型

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.