在 Go 中,如果我有一个继承自的自定义类型,假设我将一个整数数组转换为我的自定义类型,那么它会涉及新的内存分配吗?


http://play.golang.org/p/cNpKELZ3X- :


package main


import (

    "fmt"

)


type MyIntsArray []int


func (a MyIntsArray) Sum() int {

    sum := 0

    for _, i := range a {

        sum += i

    }

    return sum

}


func main() {

    myInts := []int{1,2,3,5,7,11}

    myIntsArr := MyIntsArray(myInts)

    fmt.Println(fmt.Sprintf("myInts: %v, myIntsArr: %v, Sum: %v", myInts, myIntsArr, myIntsArr.Sum()))

}

更新:好的,对于切片没有内存分配,因为切片是指针。


但我有更普遍的问题。结构体呢?似乎它复制了:http : //play.golang.org/p/NXgM8Cr-qj,这是因为使用值类型。


我想弄清楚是否可以将指向结构的指针转换为不同类型的指针。像这样的东西:http : //play.golang.org/p/BV086ZAeGf


package main


import (

    "fmt"

)


type MyType1 struct {

    Val int

    Values []int

}


type MyType2 MyType1


func main() {

    t1 := &MyType1{Val: -1, Values: []int{1,3,5}}

    var t2 *MyType2 

    t2 = *MyType2(t1)

    fmt.Printf("t1: %v, t2: %v\n", t1, t2)

    t1.Val = -10

    t1.Values[1] = 200

    fmt.Printf("t1: %v, t2: %v\n", t1, t2)

}


prog.go:17: cannot convert t1 (type *MyType1) to type MyType2

prog.go:17: invalid indirect of MyType2(t1) (type MyType2)