【发布时间】:2016-04-15 09:16:13
【问题描述】:
在 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)
【问题讨论】:
-
没有类型继承之类的东西。这是类型转换。见golang.org/ref/spec#Conversions。
-
尝试 printf 和 "%p" 和他们的指针,你会看到它自己
-
不,不会。您可以更改 myInts 中的值,它也将应用于 myIntsArr。 @Anzel 回答也是一种检查方法。
-
好的,它对切片有效,但我有更一般的问题。结构体呢?似乎它会复制:play.golang.org/p/NXgM8Cr-qj 但这是因为使用值类型。我试图弄清楚是否可以将指向结构的指针转换为不同类型的指针。像这样的东西:play.golang.org/p/FwM9dv-j_7
标签: go