如何将类型别名的切片进行类型转换

huangapple go评论94阅读模式
英文:

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

huangapple
  • 本文由 发表于 2016年4月26日 12:24:14
  • 转载请务必保留本文链接:https://go.coder-hub.com/36855225.html
匿名

发表评论

匿名网友

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen:

确定