如何将一个接口变量,赋值给一个自定义类型的变量?
package main
import "fmt"
type Point struct {
x int
y int
}
func main(){
// 案例1
var a interface{} // a 是空接口变量
var point Point = Point{1, 2}
a = point // ok
var b Point
b = a.(Point) // 类型断言:判断 a 是否是指向Point类型的变量;如果是,则转成Point类型并赋给 b 变量,否则报错
fmt.Println(b)
// 案例2
var x interface{}
var c float32 = 1.1
x = c // 空接口可以接收任意类型
//y = x.(float64) 运行出现panic,不匹配
y = x.(float32) // 使用类型断言;类型要匹配
// 带检测的类型断言
if y, ok := x.(float32); ok == true{
fmt.Println("convert succeed")
fmt.Println(y)
}else {
fmt.Println("convert fail")
}
fmt.Println("继续执行")
}
package main
import "fmt"
// 定义接口
// 在接口中定义方法
type Usber interface{
Start()
Stop()
}
// 定义两个结构体
type Phone struct{}
type Camera struct{}
// 给 phone 实现接口中全部的方法
func (p Phone) Start(){
fmt.Println("手机开始工作")
}
func (p Phone) Stop(){
fmt.Println("手机停止工作")
}
// 给 camera 实现接口中全部的方法
func (c Camera) Start(){
fmt.Println("相机开始工作")
}
func (c Camera) Stop(){
fmt.Println("相机停止工作")
}
type Computer struct{}
func (c Computer) Working(usb Usber){
// 通过接口变量 usb 来调用接口 Usber 中的方法
usb.Start()
// 需求:当是手机Phone的时候,增加 call() 的方法
// 不能直接使用usb.call():否则camera中也会拥有call的方法
if phone,ok := usb.(Phone);ok{ // 类型断言
phone.Call()
}
usb.Stop()
}
func main(){
// 创建结构体变量
var usbArr [3]Usb
usbArr[0] = Phone{"vivo"}
usbArr[1] = Phone{"小米"}
usbArr[2] = Phone{"尼康"}
for _,v := range usbArr{
computer.Working(v)
fmt.Println()
}
}
package main
import "fmt"
type Student struct{
}
// 编写函数,判断输入的参数是什么类型
func TypeJudge(items... interface{}){ // 可变参数...
for index, x := range items{
switch x.(type){
case bool:
fmt.Println(index, x)
case float32:
fmt.Println(index, x)
case int, int32, int64:
fmt.Println(index, x)
case Student:
fmt.Println(index, x)
case *Student:
fmt.Println(index, x)
default:
fmt.Println("类型不确定")
}
}
}
func main(){
var n1 float32 = 1.1
var n2 float64 = 2.3
var name string = "xiaoming"
address := "北京"
n4 := 300
stu1 := Student{}
stu2 := &Student{}
TypeJudge(n1, n2, name, address, n4, stu1, stu2)
}