go类型断言

  • 类型断言就是将接口类型的值(x),转换成类型(T)。格式为:x.(T)
  • 类型断言的必要条件就x是接口类型,非接口类型的x不能做类型断言;
  • T可以是非接口类型,如果想断言合法,则T必须实现x的接口;
  • T也可以是接口,则x的动态类型也应该是接口T;
  • 类型断言如果非法,运行时会导致错误,为了避免这种错误,应该总是使用下面的方式来进行类型断言
package main

import (
	"fmt"
)

func main() {

	var x interface{}
	x =100
	value1,ok :=x.(int)
	if ok {
		fmt.Println(value1)
	}
	value2,ok :=x.(string)
	if ok {
		fmt.Println(value2)
	}

}

需要注意的如果不接收第二个参数也就是ok,这里失败的话则会直接panic这里还存在一种情况就是xnil同样会panic

  • 类型不对的情况:
package main

import "fmt"

func main() {

    var x interface{}
    x ="hello"
	value :=x.(int)
	fmt.Println(value)
}

加粗样式

  • xnil
package main

import "fmt"

func main() {

    var x interface{}
    //x ="hello"
	value :=x.(int)
	fmt.Println(value)
}

在这里插入图片描述
若类型检查成功提取到的值也将拥有对应type的方法:

package main

import "fmt"

func main() {
  var a interface{}
  a =A{}
  value :=a.(A)
  value.Hi()
  fmt.Println("看是否输出",value.Name)
}
type A struct {
	Name string
}

func (a A)String() string  {
	return "Type Is A"
}
func (a *A) Hi()  {
	a.Name="fushaohua"
	fmt.Println(a)
}
switch
package main

import "fmt"

func main() {
n :=100
JudgeType(n)
str :="Hello World"
JudgeType(str)
a :=A{}
JudgeType(a)

a1 :=new(A)
JudgeType(a1)
}

func JudgeType(a interface{})  {
	switch value :=a.(type) {
	case nil:
		fmt.Println("Type is nil")
	case int:
		fmt.Println("int:",value)
	case string:
		fmt.Println("string",value)
	case A:
		fmt.Println("类型A",value)
	case *A:
		fmt.Println("指针A",value)
	default:
		fmt.Println("未匹配")
	}
}

type A struct {

}
func (a A)Strubg()string  {
	return "Type Is A"
}

输出:

int: 100
string: Hello World
类型A: Type Is A
指针A Type Is A
  • 1
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值