类型断言最佳实践(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 类型&<>

相关文章
|
6月前
|
安全 编译器 C++
【C/C++ 类型转换规则】一文了解C/C++ 中的类型转换规则,帮助你更好的编程
【C/C++ 类型转换规则】一文了解C/C++ 中的类型转换规则,帮助你更好的编程
88 0
|
存储 安全 编译器
原来可以这么玩!Go语言类型断言高级应用技巧发现
原来可以这么玩!Go语言类型断言高级应用技巧发现
86 0
|
3月前
|
存储 安全 程序员
|
6月前
|
JavaScript 安全 编译器
TypeScript中类型断言的使用与风险
【4月更文挑战第23天】TypeScript中的类型断言用于显式指定值的类型,但在不恰当使用时可能引发运行时错误或降低代码可读性。
|
JavaScript 编译器
TypeScript-never和object类型、类型断言概述
TypeScript-never和object类型、类型断言概述
56 0
|
JavaScript 编译器
TypeScript 联合类型(|)、类型断言(<>、as)
TypeScript 联合类型(|)、类型断言(<>、as)
55 0
|
Python
python的unittes框架的断言类型有哪些,如何断言
python的unittes框架的断言类型有哪些,如何断言
|
存储
符合类型相关知识点
符合类型相关知识点
61 0
|
JavaScript 前端开发 编译器
TypeScript入门之类型推断、类型断言、双重断言、非空断言、确定赋值断言、类型守卫、类型别名
TypeScript学习过程中经常会看到类型推断、类型断言、双重断言、非空断言、确定赋值断言、类型守卫、类型别名,这几个概念到底表示啥呢?你真的搞清楚了吗?今天我们就来盘一盘它,帮你一次性弄懂。
305 0
|
测试技术
测试中进行断言是什么意思?底层原理是什么?
测试中进行断言是什么意思?底层原理是什么?
1381 0
下一篇
无影云桌面