Go语言类型强制转换

Go语言类型强制转换,第1张

概述由于 Go语言是强类型的语言,如果不满足自动转换的条件,则必须进行强制类型转换。任意两个不相干的类型如果进行强制转换,则必须符合一定的规则。 强制类型的语法格式: var a 由于 Go语言是强类型的语言,如果不满足自动转换的条件,则必须进行强制类型转换。任意两个不相干的类型如果进行强制转换,则必须符合一定的规则。

强制类型的语法格式:var a T = (T) (b),使用括号将类型和要转换的变量或表达式的值括起来。

非常量类型的变量 x 可以强制转化并传递给类型 T,需要满足如下任一条件:

1) x 可以直接赋值给 T 类型变量。

2) x 的类型和 T 具有相同的底层类型。

示例代码如下所示:
package mainimport{    "fmt"}type Map map[string]stringfunc (m Map) Print() {    for _,key := range m {        fmt.Println (key)    }}type iMap Map//只妥底层类型是 slice、map 等支持 range 的类型字面量,新类型仍然可以使用 range 迭代func (m iMap) Print() {    for _,key := range m {        fmt.Println(key)    }}func main() {    mp := make(map[string]string,10)    mp["hi"] = "tata"    //mp 与 ma 有相同的底层类型 map[string]stirng,并且 mp 是未命名类型    var ma Map = mp    // im 与 ma 虽然有相同的底层类型,但是二者中没有一个是字面量类型,不能直接赋佳,可以    // 强制进行类型转换    //var im iMap = ma    var im iMap = (iMap) (ma)    ma.Print()    im.Print()}
3) x 的类型和 T 都是未命名的指针类型,并且指针指向的类型具有相同的底层类型。

4) x 的类型和 T 都是整型,或者都是浮点型。

5) x 的类型和 T 都是复数类型。

6) x 是整数值或 []byte 类型的值, T 是 string 类型。

7) x 是一个字符串,T 是 []byte 或 []rune 。

字符串和字节切片之间的转换最常见,示例如下:

s := "hello,世界!"
var a []byte
a = []byte(s)
var b string
b = string(a)
var c []rune
c = []rune(s)
fmt.Printf("%T\n",a) //[]uint8 byte 是 int8 的别名
fmt.Printf("%T\n",b) //string
fmt.Printf("%T\n",c) //int32 rune 是 int32 的别名

注意:数值类型和 string 类型之间的相互转换可能造成值部分丢失;其他的转换仅是类型的转换,不会造成值的改变。string 和数字之间的转换可使用标准库 strconv。Go语言没有语言机制支持指针和 interger 之间的直接转换,可以使用标准库中的 unsafe 包进行处理。 总结

以上是内存溢出为你收集整理的Go语言类型强制转换全部内容,希望文章能够帮你解决Go语言类型强制转换所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址:https://www.54852.com/langs/1271165.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2022-06-08
下一篇2022-06-08

发表评论

登录后才能评论

评论列表(0条)

    保存