美文网首页
Go语言接口知识点2 和 别名

Go语言接口知识点2 和 别名

作者: 超级皮波9 | 来源:发表于2018-09-28 16:11 被阅读0次

接口的断言

1. 如果结构体实现了某个接口你那么就可以使用接口类型来保存结构体变量, 那么该变量只能访问接口中的方法,不能访问结构中的特有方法,以及结构体中的属性
package main

import "fmt"

//定义一个接口
type USB interface{
    start()
}
//定义结构体Computer 实现接口
type Computer struct {
    name string
}
// 接口声明的方法
func (cm Computer)start(){
    fmt.Println(cm.name,"开机")
}

// say 方法是结构体 Computer 特有的方法 和接口USB 没有直接关系
func (cm Computer)say(){
    fmt.Println(cm.name)
}

func main() {
    // 定义接口变量 保存结构体类型
    var in USB = Computer{"联想电脑"}

    fmt.Println(in) // {联想电脑}

    in.start() // 联想电脑 开机
    
    fmt.Println(in.name)  // 报错 接口变量没有访问结构体内属性的权限
    
    in.say() // 报错  接口变量不能访问结构体特有的方法

}
  • 图片简解
微信图片_20180928150753.png
  • 注意点
  1. 这种方法也可以用来把抽象的接口类型转为 具体的接口类型 或者结构体

2. 如果接口类型变量保存了实现接口的结构体,想要访问结构体特有的方法和属性,需要将接口类型转换为结构体类型

  • 将接口类型转换为结构体类型 方法1
  • 格式
转化后的变量 , ok  := 接口类型变量名.( 结构体类型 ) 

方式一: 通过 value, ok := 接口变量名.(具体数据类型)
package main

import "fmt"

//定义一个接口
type USB interface{
    start()
}
//定义结构体Computer 实现接口
type Computer struct {
    name string
}
// 接口声明的方法
func (cm Computer)start(){
    fmt.Println(cm.name,"开机")
}

// say 方法是结构体 Computer 特有的方法 和接口USB 没有直接关系
func (cm Computer)say(){
    fmt.Println(cm.name)
}

func main() {
    // 定义接口变量 保存结构体类型
    var in USB = Computer{"联想电脑"}

    fmt.Println(in) // {联想电脑}

    in.start() // 联想电脑 开机

    cm,ok := in.(Computer)

    fmt.Println(ok)  // true
    fmt.Printf("cm = %T\n",cm) // cm = main.Computer

    // 企业一般这么写
    if cm,ok := in.(Computer);ok{
        fmt.Println(cm.name)
        cm.say()
    }

}

  • 将接口类型转换为结构体类型 方法2
  • 格式
方式二: 通过switch value := 接口变量名.(type) { case 具体数据类型: }
package main

import "fmt"

//定义一个接口
type USB interface{
    start()
}
//定义结构体Computer 实现接口
type Computer struct {
    name string
}
// 接口声明的方法
func (cm Computer)start(){
    fmt.Println(cm.name,"开机")
}

// say 方法是结构体 Computer 特有的方法 和接口USB 没有直接关系
func (cm Computer)say(){
    fmt.Println(cm.name)
}

func main() {
    // 定义接口变量 保存结构体类型
    var in USB = Computer{"联想电脑"}

    fmt.Println(in) // {联想电脑}

    in.start() // 联想电脑 开机

    switch cm:= in.(type) {
    case Computer:
        fmt.Println(cm.name)
        cm.say()
    default:
        fmt.Println("不是Computer类型")
    }

}

别名

  • 在Go语言中可以通过type 给某种类型其别名
  • 格式一: type 新类型名 愿类型名
type Inter  int
  • 注意点
  1. 格式1 代表重新定义了一个新的类型 叫做新类型名
  2. 格式1 定义的 新类型 和 愿类型在编译器开来是两个不同的类型
  • 格式二: type 新类型名 = 原类型名
type  inter = int
  • 注意点
  1. 格式二 代表给原类型名起了一个别名叫做新类型名
  2. 格式二 定义的新类型 和愿类型在编译器看来是同一个类型

相关文章

  • Go语言接口知识点2 和 别名

    接口的断言 1. 如果结构体实现了某个接口你那么就可以使用接口类型来保存结构体变量, 那么该变量只能访问接口中的方...

  • go语言基础

    go语言基础 go 语言接口

  • Go 语言程序设计(5)

    polar2cartesian.go 示例代码: 知识点: Go 语言的并发依赖的并不是线程,而是协程 Go 语言...

  • Golang 学习笔记七 接口

    一、概念 《快学 Go 语言》第 9 课 —— 接口 1.接口定义Go 语言的接口类型非常特别,它的作用和 Jav...

  • Go语言入门第三节 Go 语言面向对象机制

    Go语言面向对象编程 Go语言的面相对象和主流语言有很大的不同,如Go 语言里是不支持继承,Go语言的接口实现也不...

  • Go语言 方法和接口的知识点

    Go语言方法 概念 Go语言中的方法就是一个特殊的函数, 这个函数和某种数据绑定在一起,就称之为方法一般都是和结构...

  • Go语言起别名

    C语言中可以通过typedef 原类型名 新类型名 Go语言中可以通过 格式一: type 新类型名 原类型名 格...

  • 15-Go语言面向对象

    Go语言起别名 在Go语言中可以通过type给某种类型起一个别名格式一:type 新类型名 原类型名格式二: ty...

  • Go语言方法和接口

    定义一个结构体,将函数和结构体绑定在一起的东西就是方法 格式:func (接收者名称 接收者类型)函数名称(形参列...

  • Go语言接口和方法

    因为几乎任何东西都可加以方法,几乎任何东西都可满足某界面。一个展示的例子是 http 包定义的 Handler 界...

网友评论

      本文标题:Go语言接口知识点2 和 别名

      本文链接:https://www.haomeiwen.com/subject/unhpoftx.html