类型断言最佳实践(2)|学习笔记

简介: 快速学习类型断言最佳实践(2)

开发者学堂课程【Go 语言核心编程 - 面向对象、文件、单元测试、反射、TCP 编程:类型断言的最佳实践(1)】学习笔记,与课程紧密联系,让用户快速学习知识。

课程地址:https://developer.aliyun.com/learning/course/626/detail/9708


类型断言最佳实践(2)

 

内容介绍:

一、类型断言的最佳实践2

二、类型断言的最佳实践3

 

一、类型断言的最佳实践2

1. 编写函数,循环判断传入参数的类型。

//编写一个函数,可以判断输入的函数是什么类型

func  TypeJudge(items...interface()){  //“items ... interface{}”此参数称为可变参数,“...”可表示 TypeJudge 可以接收任意多个实参,“interface{}”表示可以接收任意类型的实参。

for i,x:=range items{

switch x.(type){  //使用 switch 语句进行语句断言,此处 type 是一个关键字,固定写法,作用为判断 x 的函数类型。

case boo1:

fmt.Printf("第%v个参数是 float32 类型 值是%v\n",i,x)

case float32:

fmt.Printf("第%v个参数是 float32 类型 值是%v\n",i,x)

case float64:

fmt.Printf("第%v个参数是 float64 类型 值是%v\n",i,x)

case int,int32,int34:

fmt.Printf("第%v个参数是 整数 类型 值是%v\n",i,x)

case string:

fmt.Printf("第%v个参数是 string 类型 值是%v\n",i,x)

default:

fmt.Printf("第%v个参数是 类型 不确定, 值是%v\n",i,x)

}

}

}

func main(){

var n1 float32=1.1

var n2 float64=2.3

var n3 int32=30

var name string="tom"

address:="北京"

n4:=300

TypeJudge(n1,n2,n3,name,address,n4)

}

运行结果:

第0个参数是 float32类型 值是1.1

第1个参数是 float64类型 值是2.3

第2个参数是 整数 类型 值是30

第3个参数是 string 类型 值是 tom

第4个参数是 string 类型 值是北京

第5个参数是 整数 类型 值是300

 

二、类型断言的最佳实践3

1. 在之前代码基础上,增加判断 Student 类型和*Student 类型,学员自己完成。

//定义 Student 类型

type Student struct{

}

//编写一个函数,可以判断输入的函数是什么类型

func  TypeJudge(items...interface()){

for i,x:=range items{

switch x.(type){

case boo1:

fmt.Printf("第%v 个参数是 float32 类型 值是%v\n",i,x)

case float32:

fmt.Printf("第%v 个参数是 float32 类型 值是%v\n",i,x)

case float64:

fmt.Printf("第%v 个参数是 float64 类型 值是%v\n",i,x)

case int,int32,int64:

fmt.Printf("第%v 个参数是 整数 类型 值是%v\n",i,x)

case string:

fmt.Printf("第%v 个参数是 string 类型 值是%v\n",i,x)

case Student:

fmt.Printf("第%v 个参数是 Student 类型 值是%v\n",i,x)

case *Student:

fmt.Printf("第%v 个参数是 *Student 类型 值是%v\n",i,x)

default:

fmt.Printf("第%v 个参数是 类型 不确定, 值是%v\n",i,x)

}

}

}

func main(){

var n1 float32=1.1

var n2 float64=2.3

var n3 int32=30

var name string="tom"

address:="北京"

n4:=300

stu1:=Student{}

stu2:=Student*{}

TypeJudge(n1,n2,n3,name,address,n4,stu1,stu2)

}

运行结果:

第0个参数是 float32类型 值是1.1

第1个参数是 float64类型 值是2.3

第2个参数是 整数 类型 值是30

第3个参数是 string 类型 值是 tom

第4个参数是 string 类型 值是北京

第5个参数是 整数 类型 值是300

第6个参数是 Student 类型 值是<>

第7个参数是 *Student 类型&<>

相关文章
|
3月前
|
安全 编译器 C++
【C/C++ 类型转换规则】一文了解C/C++ 中的类型转换规则,帮助你更好的编程
【C/C++ 类型转换规则】一文了解C/C++ 中的类型转换规则,帮助你更好的编程
43 0
|
3月前
|
机器学习/深度学习 算法 编译器
【C++ 泛型编程 中级篇】深度解析C++:类型模板参数与非类型模板参数
【C++ 泛型编程 中级篇】深度解析C++:类型模板参数与非类型模板参数
65 0
|
10月前
|
存储 安全 编译器
原来可以这么玩!Go语言类型断言高级应用技巧发现
原来可以这么玩!Go语言类型断言高级应用技巧发现
66 0
|
28天前
|
编译器 C++ 运维
开发与运维函数问题之函数的返回类型如何解决
开发与运维函数问题之函数的返回类型如何解决
25 6
|
10月前
|
JavaScript 编译器
TypeScript-never和object类型、类型断言概述
TypeScript-never和object类型、类型断言概述
48 0
|
JavaScript 编译器
TypeScript 联合类型(|)、类型断言(<>、as)
TypeScript 联合类型(|)、类型断言(<>、as)
50 0
|
Python
python的unittes框架的断言类型有哪些,如何断言
python的unittes框架的断言类型有哪些,如何断言
|
前端开发
前端学习案例12-断言&匹配模式1
前端学习案例12-断言&匹配模式1
50 0
前端学习案例12-断言&匹配模式1
|
前端开发
前端学习案例13-断言&匹配模式2
前端学习案例13-断言&匹配模式2
44 0
前端学习案例13-断言&匹配模式2
|
JavaScript 前端开发 编译器
TypeScript入门之类型推断、类型断言、双重断言、非空断言、确定赋值断言、类型守卫、类型别名
TypeScript学习过程中经常会看到类型推断、类型断言、双重断言、非空断言、确定赋值断言、类型守卫、类型别名,这几个概念到底表示啥呢?你真的搞清楚了吗?今天我们就来盘一盘它,帮你一次性弄懂。
274 0