Golang -- 空接口interface{} -- 类型转换x.(type)

已知,空接口可以表示/接收任意类型,因此,空接口可以转换为预期的类型,以下介绍两种使用方法

  1. 将变量x,转换为指定类型

    /*
     *   变量x,转换为指定类型,结果保存在y中
     * @return  ok  转换成功/失败
     *          y   转换后,x保存在y中
     */
    y, ok = x.(具体类型)
    
  2. 断言变量x的类型是什么

    /*
     *   判断x的类型是什么,必须结合switch...case...一起使用
     */
    y, ok = x.(type)
    

示例代码

package main

import "fmt"

func typeCast(x interface{}) {
	y, ok := x.(int)      // 类型转换
	fmt.Println(y, ok)    // 0 false

	z, ok1 := x.(string)  // 类型转换
	fmt.Println(z, ok1)   // darren true
}

func switch_type_test(x interface{}) {
	// 1.不能直接使用x.(type)
	// fmt.Println(x.(type))  // 编译失败: use of .(type) outside type switch

	// 2.正确的x.(type)使用方式: 与switch...case...
	switch x.(type) {
	case string:
		fmt.Printf("x is string: %s\n", x)
	case int:
		fmt.Printf("x is int: %d\n", x)
	}
}

func main() {
	s := "darren"
	typeCast(s)

	switch_type_test(1)
	switch_type_test("Tom")
}

执行结果:

0 false
darren true
x is int: 1
x is string: Tom
  • 补充说明:结构体类型、指向结构体类型的指针是两种不同的类型
    • 二者区别----指向结构体类型的指针,在打印表示上,有个取地址符&,表示它是一个指针
package main

import "fmt"

type Rect struct {
	Width  int
	Height int
}

func main() {
	var a interface{}
	var r = Rect{50, 50}
	a = &r

	var rx = a.(*Rect) // a类型转换为: Rect*
	fmt.Println("r:", r)    // r: {50 50}
	fmt.Println("rx:", rx)  // rx: &{50 50}
}
  • 3
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值