golang断言实践
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 | package main import "fmt" type Usb interface { Start() Stop() } //手机 type Phone struct { Name string } //相机 type Camera struct { Name string } //计算机 type Computer struct { } //手机实现USB接口方法 func (p Phone) Start() { fmt.Println( "手机开始工作..." ) } func (p Phone) Stop() { fmt.Println( "手机停止工作..." ) } func (p Phone) Call() { //该方法未定义 fmt.Println( "我是手机,我要打电话..." ) } //相机实现USB接口方法 func (c Camera) Start() { fmt.Println( "相机开始工作..." ) } func (c Camera) Stop() { fmt.Println( "相机停止工作..." ) } //编写一个方法Working,接收一个USB接口类型变量 //实现了USB接口的所有方法 func (c Computer) Working(usb Usb) { //通过usb接口变量调用start和stop方法 usb.Start() //如果USB是指向Phone结构体变量,还需要调用Call方法 phone, ok := usb.(Phone) if ok { phone.Call() } usb.Stop() } func main() { var usbArr [3]Usb usbArr[0] = Phone{} usbArr[1] = Camera{} usbArr[2] = Phone{} //Phone还有一个特有的方法call(),请遍历Usb数组,如果是Phone变量, //除了调用Usb接口声明的方法外,还需要调用Phone特有方法Call(类型断言) var computer Computer for _, v := range usbArr { computer.Working(v) } } |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 | package main import "fmt" type student struct { } func TypeJudge(items ... interface {}) { for index, x := range items { switch x.( type ) { case bool: fmt.Printf( "第%v个参数是 bool 类型,值是%v\n" , index, x) case float64, float32: fmt.Printf( "第%v个参数是 float 类型,值是%v\n" , index, x) case int, int32, int64: fmt.Printf( "第%v个参数是 int 类型,值是%v\n" , index, x) case string: fmt.Printf( "第%v个参数是 string 类型,值是%v\n" , index, x) case student: fmt.Printf( "第%v个参数是 student 类型,值是%v\n" , index, x) case *student: fmt.Printf( "第%v个参数是 *student 类型,值是%v\n" , index, x) default : fmt.Printf( "第%v个参数是 %v 类型不确定" , index, x) } } } func main() { var n1 float32 = 1.1 var n2 float64 = 2.2 var n3 int32 = 30 var name string = "tom" address := "北京" n4 := 300 stu := student{} stu1 := &student{} TypeJudge(n1, n2, n3, n4, name, address, stu, stu1) } |
__EOF__

本文作者:StarGazer
本文链接:https://www.cnblogs.com/PatrickStarGazer/p/15991142.html
关于博主:评论和私信会在第一时间回复。或者直接私信我。
版权声明:本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!
声援博主:如果您觉得文章对您有帮助,可以点击文章右下角【推荐】一下。您的鼓励是博主的最大动力!
本文链接:https://www.cnblogs.com/PatrickStarGazer/p/15991142.html
关于博主:评论和私信会在第一时间回复。或者直接私信我。
版权声明:本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!
声援博主:如果您觉得文章对您有帮助,可以点击文章右下角【推荐】一下。您的鼓励是博主的最大动力!
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· ollama系列01:轻松3步本地部署deepseek,普通电脑可用
· 25岁的心里话
· 按钮权限的设计及实现