2016-04-06 14 views
-2

Bir sonraki kodda, bir dilim diliminin bir elemanını eklemeye çalışıyorum, ancak Git referans ile çalıştığı için, b dilimini değere göre kullanarak bunu nasıl kullanabilirim?Git işlevi, bir dilim iletilirken neden referansla çalışır?

package main 

import (
    "fmt" 
) 

func main() { 
    a := []int{1} 
    arr := [][]int{a} 

    b := []int{2} 

    arr = append(arr, b) 
    fmt.Println(arr) 

    b[0] = 3 
    arr = append(arr, b) 

    fmt.Println(arr) 
} 

geçen println [[1] [2] [3]], fakat bu kadar olduğu tahmin [[1] [3] [3]].

+2

kullanıyorsunuz 'Git herşeyin değeri tarafından geçirilir, çünkü değeriyle b'. – JimB

cevap

3

"Dilimle" bir dilim eklemenin bir yolu yoktur; Eğer eklemeden önce dilimin bir copy yapmak gerekir:

package main 

import (
    "fmt" 
) 

func copy_ints(c []int) []int { 
    s := make([]int, len(c)) 
    copy(s, c) 
    return s 
} 

func main() { 
    a := []int{1} 
    arr := [][]int{copy_ints(a)} 

    b := []int{2} 

    arr = append(arr, copy_ints(b)) 
    fmt.Println(arr) 

    b[0] = 3 
    arr = append(arr, copy_ints(b)) 

    fmt.Println(arr) 
} 

https://play.golang.org/p/Tds5FGj3nf

İlgili konular