类型转化

题目:

关于类型转化,下面选项正确的是?

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
A.
type MyInt int
var i int = 1
var j MyInt = i

B.
type MyInt int
var i int = 1
var j MyInt = (MyInt)i

C.
type MyInt int
var i int = 1
var j MyInt = MyInt(i)

D.
type MyInt int
var i int = 1
var j MyInt = i.(MyInt)

答案:

1
C

解析:

  • ​ A选项是错误的,因为将int类型的变量赋值给MyInt类型的变量是不允许的。
  • 选项 B 是错误的,应该是使用类型转换语法将 int 类型的变量转换为 MyInt 类型,即 var j MyInt = MyInt(i)
  • 对于选项 C,使用类型转换表达式 MyInt(i) 可以将 i 的值从 int 类型转换为 MyInt 类型,并将结果赋给 j
  • 对于选项 D,使用类型断言 i.(MyInt) 是错误的,因为 i 的底层类型是 int,而不是 MyInt,所以无法将其转换为 MyInt 类型。

类型断言:用于将接口类型的值转换为具体的类型。在转换的过程中需要注意以下几点:

  1. 语法:value.(type)
    • value:接口类型的值
    • type:需要转换的具体类型
  2. 转换前需要判断接口类型的值是否为 nil 或者对应类型的零值,避免在转换时出现 panic。

下面是一个类型断言的正确使用示例:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
package main

import (
"fmt"
"reflect"
)

func main() {
var i interface{} = 1

v, _ := i.(int)
str, _ := i.(string)
fmt.Println("v type is", reflect.TypeOf(v))
fmt.Println("str type is", reflect.TypeOf(str))
}

输出如下:

1
2
v type is int
str type is string

类型转化
http://example.com/2023/04/27/Go每日一题/类型转化/
作者
Feng Tao
发布于
2023年4月27日
更新于
2023年4月27日
许可协议