golang append() evaluated but not used

后端 未结 5 1335
失恋的感觉
失恋的感觉 2021-02-01 12:12
func main(){
     var array [10]int
     sliceA := array[0:5]
     append(sliceA, 4)
     fmt.Println(sliceA)
}

Error : append(sliceA, 4

相关标签:
5条回答
  • 2021-02-01 12:27

    sliceA =append(sliceA, 4) append returns a slice containing one or more new values. Note that we need to accept a return value from append as we may get a new slice value.

    0 讨论(0)
  • 2021-02-01 12:30

    Per the Go docs:

    The resulting value of append is a slice containing all the elements of the original slice plus the provided values.

    So the return value of 'append', will contain your original slice with the appended portion.

    0 讨论(0)
  • 2021-02-01 12:39

    Refer: Appending to and copying slices

    In Go, arguments are passed by value.

    Typical append usage is:

    a = append(a, x)
    

    You need to write:

    func main(){
        var array [10]int
        sliceA := array[0:5]
        // append(sliceA, 4)  // discard
        sliceA = append(sliceA, 4)  // keep
        fmt.Println(sliceA)
    }
    

    Output:

    [0 0 0 0 0 4]
    

    I hope it helps.

    0 讨论(0)
  • 2021-02-01 12:39

    you may try this:

    sliceA = append(sliceA, 4)
    

    built-in function append([]type, ...type) returns an array/slice of type, which should be assigned to the value you wanted, while the input array/slice is just a source. Simply, outputSlice = append(sourceSlice, appendedValue)

    0 讨论(0)
  • 2021-02-01 12:42

    The key to understand is that slice is just a "view" of the underling array. You pass that view to the append function by value, the underling array gets modified, at the end the return value of append function gives you the different view of the underling array. i.e. the slice has more items in it

    your code
    sliceA := array[0:5]  // sliceA is pointing to [0,5)
    append(sliceA, 4) // sliceA is still the original view [0,5) until you do the following
    
    sliceA = append(sliceA, 4)
    

    reference: https://blog.golang.org/slices

    0 讨论(0)
提交回复
热议问题