猿问

类型转换与类型转换

在 Go 中,由于它是静态类型语言,我们可以看到很多类型转换,例如,


var x float64

var y =32

x=float64(32)

尽管 Go 支持类型转换,但据我所知,它很少使用。有人可以解释为什么可以使用类型转换的原因和用例。以下是一个使用类型转换的示例。


type Common struct {

        Gender int

        From   string

        To     string

    }


    type Foo struct {

        Id    string

        Name  string

        Extra Common

    }


    type Bar struct {

        Id    string

        Name  string

        Extra Common

    }

    foo:=Foo{

        Id:"123",

        Name:"damitha",

        Extra: struct {

            Gender int

            From   string

            To     string

        }{Gender:1 , From:"xx", To:"yy" },

    }

    bar:=*(*Bar)(unsafe.Pointer(&foo))

    fmt.Printf("%+v\n",bar)

甚至这种映射也有可能以更安全的方式实现。


陪伴而非守候
浏览 149回答 2
2回答

牛魔王的故事

问题中的不安全恶作剧类似于类型转换。这些恶作剧是不需要的。使用转换:bar := *(*Bar)(&foo)或更简单地说:bar := Bar(foo)规范中的相关引用是:在以下任何一种情况下,非常量值 x 都可以转换为类型 T:...忽略结构标签(见下文),x 的类型和 T 具有相同的基础类型。忽略结构标签(见下文),x 的类型和 T 是未定义类型的指针类型,它们的指针基类型具有相同的底层类型。引用中的第一点适用于Bar(foo)因为Foo和Bar具有相同的基础类型。报价中的第二点适用于转换(*Bar)(&foo),因为:*Foo并且*Bar是指针类型*Foo并且*Bar不是定义的类型。基本类型Foo和Bar具有相同的基础类型。

HUWWW

Go 既不支持类型转换也不支持隐式类型转换,而许多静态支持语言(如 Java C/C++)同时支持两者。Go 只支持类型转换。
随时随地看视频慕课网APP

相关分类

Go
我要回答