文档章节

GO 类型断言

汤汤圆圆
 汤汤圆圆
发布于 07/31 18:13
字数 436
阅读 7
收藏 0
package main

import(
	"fmt"
)
type Usb interface {
	Start()
	Stop()
}
type Phone struct{

}
func (p Phone) Start() {
	fmt.Println("手机开始工作")
}
func (p Phone) Stop() {
	fmt.Println("手机停止工作")
}
func (p Phone) Call() {
	fmt.Println("手机正在打电话")
}

type Cammera struct {

}
func (c Cammera) Start() {
	fmt.Println("相机开始工作")
}
func (c Cammera) Stop() {
	fmt.Println("相机停止工作")
}

type Computer struct {

}

//利用类型断言来区分usb是Phone 还是 Commera
func (cp *Computer)Working(usb Usb) {
	usb.Start()
	if p,ok := usb.(Phone); ok == true {
		p.Call()
	}
	usb.Stop()
}

func main()  {
	var a interface{}
	var b float32 = 1.25
	a = b //b可以赋值给a
	var y float32 
	var z float64
	//y = a //这样不行
	y = a.(float32)//需要这样
	z, ok := a.(float64) //不是什么类型都能断言,需要看a的基础类型
	if ok == true {
		fmt.Printf("转换成成功%T,%v", z, z)
	} else {
		fmt.Println("转换失败")
	}
	fmt.Println(y)

	var usbArr [3]Usb
	usbArr[0] = Phone{}
	usbArr[1] = Cammera{}
	usbArr[2] = Phone{}

	var cp Computer
	for _,usb := range usbArr {
		cp.Working(usb)
		fmt.Println("---------------")
	}

	var n1 float32 = 1.2
	var n2 float64 = 1013.12313
	var n3 int = 33
	var n4 string = "afda"
	var n5 Phone = Phone{}
	var n6 *Phone = &Phone{}

	judeType(n1, n2, n3, n4, n5, n6)
}


func judeType(items ...interface{}) {
	for index,item := range items {
		switch item.(type) {
			case string:
				fmt.Printf("第%v个参数是string类型值为 %v\n", index, item)
			case float32:
				fmt.Printf("第%v个参数是float32类型值为 %v\n", index, item)
			case float64:
				fmt.Printf("第%v个参数是float64类型值为 %v\n", index, item)	
			case bool:
				fmt.Printf("第%v个参数是bool类型值为 %v\n", index, item)	
			case int,int32,int64:
				fmt.Printf("第%v个参数是int类型值为 %v\n", index, item)
			case Phone:
				fmt.Printf("第%v个参数是phone类型值为 %v\n", index, item)
			case *Phone:
				fmt.Printf("第%v个参数是*phone类型值为 %v\n", index, item)			
			default:
				fmt.Printf("第%v个参数是未知类型值为 %v\n", index, item)		
		}
	}
}

© 著作权归作者所有

上一篇: symfony2 创建 命令
下一篇: 闭包小案列
汤汤圆圆

汤汤圆圆

粉丝 11
博文 82
码字总数 26104
作品 0
昌平
程序员
私信 提问
go语言的类型断言(Type Assertion)

检查x的动态类型是否是T,其中x必须是接口值。 如果T是具体类型 类型断言检查x的动态类型是否等于具体类型T。如果检查成功,类型断言返回的结果是x的动态值,其类型是T。换句话说,对接口值x...

勤奋happyfire
2017/12/14
0
0
Typescript 类型断言

类型断言(Type Assertion)就是手动指定一个值的类型。具体看看怎么做吧 介绍语法 招式一 招式二 推荐使用这种,因为在 tsx 语法中只认它。而 tsx 是 react 的 jsx 语法的 ts 版,后面实战篇...

pr
06/22
0
0
断言库chai的用法

工作中经常需要自己写单元测试,而写单元测试除了掌握测试框架,还必须掌握断言库的用法。现就断言库chai的用法作以总结。chai有三种断言风格供我们使用,,,。本文只介绍风格的断言用法。 ...

tiancai啊呆
2018/01/05
0
0
PHP教程:PHPUnit学习笔记(四)断言详解

断言(Assertions)是PHPUnit提供的一系列对程序执行结果测试的方法。通俗的讲,就是断言执行程序结果为我们期待的值,如果不是则测试失败,下面是断言方法的详细介绍,内容全部来翻译自PHPUn...

peasant
2014/11/07
27
0
粗略的整理了一下c++11特性

1.c++11 定义了5种有符号类型 signed char,short int ,int ,long int ,long long int 2.c++11 提供了静态断言;所谓的静态断言,是在编译期的断言,不同于运行时断言assert;静态断言static_...

刘大神
2015/10/21
91
0

没有更多内容

加载失败,请刷新页面

加载更多

Replugin借助“UI进程”来快速释放Dex

public static boolean preload(PluginInfo pi) { if (pi == null) { return false; } // 借助“UI进程”来快速释放Dex(见PluginFastInstallProviderProxy的说明) return PluginFastInsta......

Gemini-Lin
44分钟前
3
0
Hibernate 5 的模块/包(modules/artifacts)

Hibernate 的功能被拆分成一系列的模块/包(modules/artifacts),其目的是为了对依赖进行独立(模块化)。 模块名称 说明 hibernate-core 这个是 Hibernate 的主要(main (core))模块。定义...

honeymoose
今天
4
0
CSS--属性

一、溢出 当内容多,元素区域小的时候,就会产生溢出效果,默认是纵向溢出 横向溢出:在内容和容器之间再套一层容器,并且内部容器要比外部容器宽 属性:overflow/overflow-x/overflow-y 取值...

wytao1995
今天
4
0
精华帖

第一章 jQuery简介 jQuery是一个JavaScript库 jQuery具备简洁的语法和跨平台的兼容性 简化了JavaScript的操作。 在页面中引入jQuery jQuery是一个JavaScript脚本库,不需要特别的安装,只需要...

流川偑
今天
7
0
语音对话英语翻译在线翻译成中文哪个方法好用

想要进行将中文翻译成英文,或者将英文翻译成中文的操作,其实有一个非常简单的工具就能够帮助完成将语音进行翻译转换的软件。 在应用市场或者百度手机助手等各大应用渠道里面就能够找到一款...

401恶户
今天
3
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部