gpt4 book ai didi

go - Golang类型转换与类型转换

转载 作者:行者123 更新时间:2023-12-01 22:38:28 24 4
gpt4 key购买 nike

在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)

即使是这种映射,也可能以更安全的方式实现。

最佳答案

问题中不安全的恶作剧与类型转换类似。不需要这些恶作剧。使用转换:

bar := *(*Bar)(&foo)

或更简单地说:
bar := Bar(foo)

specification的相关报价是:

在以下任何一种情况下,可以将非恒定值x转换为类型T:


  • ...
  • 忽略struct标记(参见下文),x的类型和T具有相同的基础类型。
  • 忽略struct标记(请参见下文),x的类型和T是未定义的指针类型,并且它们的指针基类型具有相同的基础类型。


  • 引号中的第一点适用于 Bar(foo),因为 FooBar具有相同的基础类型。

    引号中的第二点适用于转换 (*Bar)(&foo),因为:
  • *Foo*Bar是指针类型
  • *Foo*Bar不是定义的类型。
  • 基本类型FooBar具有相同的基础类型。
  • 关于go - Golang类型转换与类型转换,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59745588/

    24 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com