英文:
How to type convert a slice of type aliases
问题
package main
import (
"fmt"
)
type alias int
type aliases []*alias
func main() {
a1 := alias(1)
t := aliases{&a1}
fmt.Println([]*int([]*alias(t)))
}
类型type aliases []*alias
本质上是[]*int
我想要能够将aliases
转换回[]*int
。
英文:
package main
import (
"fmt"
)
type alias int
type aliases []*alias
func main() {
a1 := alias(1)
t := aliases{&a1}
fmt.Println([]*int([]*alias(t)))
}
The type type aliases []*alias
is essentially []*int
I want to be able to type convert aliases
back to []*int
答案1
得分: 2
你可以使用unsafe.Pointer,但这是有一定风险的,不建议使用。
PointerToSliceOfPointersToInt := (*([]*int))(unsafe.Pointer(&t))
尝试一下,看看是否有效:https://play.golang.org/p/6AWd1W_it3
英文:
You can with unsafe.Pointer, a little bit unsafe so not recommended
PointerToSliceOfPointersToInt := (*([]*int))(unsafe.Pointer(&t))
try it works https://play.golang.org/p/6AWd1W_it3
答案2
得分: 1
尝试这个,你可以通过正确的类型转换来实现。
type alias int
type aliases []*alias
func main() {
a1 := alias(1)
t := aliases{&a1}
orig := int(*([]*alias(t)[0]))
fmt.Println(orig)
}
示例:http://play.golang.org/p/1WosCIUZSa
如果你想获取所有的值(而不仅仅是第一个索引),你需要循环并对每个元素进行类型转换。
func main() {
a1 := alias(1)
t := aliases{&a1}
orig := []*int{}
for _, each := range t {
temp := int(*each)
orig = append(orig, &temp)
}
fmt.Printf("%#v\n", orig) // []*int{(*int)(0x10434114)}
}
示例:http://play.golang.org/p/Sx4JK3kA45
英文:
Try this, you could do that by doing right casting.
type alias int
type aliases []*alias
func main() {
a1 := alias(1)
t := aliases{&a1}
orig := int(*([]*alias(t)[0]))
fmt.Println(orig)
}
Example on http://play.golang.org/p/1WosCIUZSa
If you want to get all values (not just the first index) you have to loop and cast each element.
func main() {
a1 := alias(1)
t := aliases{&a1}
orig := []*int{}
for _, each := range t {
temp := int(*each)
orig = append(orig, &temp)
}
fmt.Printf("%#v\n", orig) // []*int{(*int)(0x10434114)}
}
Example: http://play.golang.org/p/Sx4JK3kA45
通过集体智慧和协作来改善编程学习和解决问题的方式。致力于成为全球开发者共同参与的知识库,让每个人都能够通过互相帮助和分享经验来进步。
评论