zoukankan      html  css  js  c++  java
  • Third glance in Go

    在Go語言裏關於數組(Array),切片(Slice)和映射表(Map)的使用是非常常見的。有過其他語言編程背景的人會比較熟悉一下,但是也是因爲過於的熟悉,從而導致一個慣性思維,往往就會踢到“石頭”,我就是其中之一。先說數組問題:

    其他的沒什麼,但是在傳遞數組指針到函數的時候,Go裏面是這樣的如果你想傳遞一個數組指針到函數裏,你必須明確給出數組的大小

    func updateItem(arr *[]int) {
        arr[2] = 1
    }
    
    func main() {
        arr := new([10]int)
        updateItem(arr)
    }

    這樣是不行的,編譯時會給你報一個類型不匹配的錯誤,你必須這樣寫

    func updateItem(arr *[10]int) {
        arr[2] = 1
    }

     除了指針以外,你還可以使用切片來傳遞數組,只不過會變成這樣,不過這也是Go裏面常規的做法。

    func updateItem(arr []int) {
        arr[2] = 1
    }
    
    func main() {
        arr := new([10]int)
        updateItem(arr[:])
    }

     另外一个疑惑就是切片的长度与容量的定义,搞不清楚make([]int, 10, 50)后,如何去填充后40个内存空间的值? 原来是可以通过切片的扩容来对后40个空间进行访问。切片重新扩容必须以0开始,如

    var slice1 = make([]int, 10, 50)
    slice1 = slice1[0:len(slice1) +1]

    这样就给切片增加了一个空间。

  • 相关阅读:
    异象石(引理证明)
    Codeforces Round #664 (Div. 2)
    2020 年百度之星·程序设计大赛
    Codeforces Round #663 (Div. 2)
    Codeforces Round #662 (Div. 2)
    相等运算符
    Unicode编码
    算术运算符
    强制类型转换到Boolean
    强制类型转换到Number
  • 原文地址:https://www.cnblogs.com/moonz-wu/p/4264491.html
Copyright © 2011-2022 走看看