码迷,mamicode.com
首页 > 其他好文 > 详细

golang类型断言

时间:2019-02-17 23:42:45      阅读:206      评论:0      收藏:0      [点我收藏+]

标签:pac   代码   int   lin   call   ring   func   简单的   calling   

什么是类型断言

因为接口是一般类型,不知道具体类型,如果要转成具体类型就要使用类型断言

先看简单的(报错的代码)

package main

import "fmt"

type Point struct {
	x int
	y int
}

func main() {
	var a interface{}
	p := Point{1,2}
	a =p
	var b Point
	b = a//这里会报错
	fmt.Println(b)
}

 用类型断言,没用类型断言无法确定a就是Point类型:

package main

import "fmt"

type Point struct {
	x int
	y int
}

func main() {
	var a interface{}
	p := Point{1,2}
	a =p
	var b Point
	b = a.(Point)
	fmt.Println(b)
}

 再看一段:

package main

import "fmt"

type Usb interface {
	Start()
	Stop()
}

type Phone struct {
	name string
}
func (this Phone) Start() {
	fmt.Println("the phone is start working ")
}
func (this Phone) Call() {
	fmt.Println("calling..")
}
func (this Phone) Stop() {
	fmt.Println("the phone is stop working")
}

type Camera struct {
	name string
}
func (this Camera) Start() {
	fmt.Println("Camera is start working")
}
func (this Camera) Stop() {
	fmt.Println("Camera is stop")
}

type Computer struct {
	
}

func (this Computer) Working(usb Usb)  {
	usb.Start()
	if phone,ok := usb.(Phone); ok {
		phone.Call()
	}
	usb.Stop()
}

func main() {
	c :=Computer{}
	phone1 :=Phone{"小米"}
	phone2 := Phone{"华为"}
	camera := Camera{"索尼"}
	var usbarr [3]Usb
	usbarr[0] = phone1
	usbarr[1] = phone2
	usbarr[2] = camera
	for _,v:= range usbarr {
		c.Working(v)
	}
}

 

golang类型断言

标签:pac   代码   int   lin   call   ring   func   简单的   calling   

原文地址:https://www.cnblogs.com/cfc-blog/p/10392776.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!