Go语言接口定义

幸运草 2020年4月20日23:18:04前端框架评论阅读模式

Go语言接口定义

接口介绍

Go 语言中的接口很特别,而且提供了难以置信的一系列灵活性和抽象性。它们指定一个特定类型的值和指针表现为特定的方式。从语言角度看,接口是一种类型,它指定一个方法集,所有方法为接口类型就被认为是该接口。

interface是一种类型,默认是一个指针。interface类型可以定义一组方法,但是这些不需要实现。并且interface不能包含任何变量。

接口定义

第一种,定义一个空接口

空接口 interface{} 没有任何方法签名,也就意味着任何类型都实现了空接口。

var i interface{}

第二种,定义一个接口,并赋值

var name interface{} = "oldboy"

第三种,使用interface定义一组方法,方法签名的集合

type I interface {
    method1()                            // 无参数、无返回值
    method2(i int)                       // 单参数、无返回值
    method3(x, y int)                    // 多参数、无返回值
    method4() (i int)                    // 无参数、单返回值
    method5(x, y int) (z int, err error) //多参数、多返回值
}

类型断言

Go语言类型断言语法为value, ok := em.(T) 如果确保em 是同类型的时候可以直接使用value:=em.(T)一般用于switch语句中。

em :代表要判断的变量

T :代表被判断的类型

value:代表返回的值

ok:代表是否为改类型

注意:要判断的变量必须为initerface类型才可以进行类型断言。

package main

import "fmt"

func main() {
    s := "golang"
    if v, ok := s.(string); ok {
        fmt.Println(v)
    }
}

编译错误:

./main.go:7:15: invalid type assertion: s.(string) (non-interface type string on left)

用 switch 做批量类型判断,不支持 fallthrough,实例如下:

package main

import "fmt"

type User struct {
    id   int
    name string
}

func (self *User) String() string {
    return fmt.Sprintf("%d, %s", self.id, self.name)
}

func main() {
    var i interface{} = &User{18, "oldboy"}

    switch v := i.(type) {
    case nil:
        fmt.Println("nil")
    case fmt.Stringer:
        fmt.Println(v)
    case func() string:
        fmt.Println(v())
    case *User:
        fmt.Printf("%d, %sn", v.id, v.name)
    default:
        fmt.Println("unknown")
    }
}

特别声明:以上文章内容仅代表作者本人观点,不代表变化吧观点或立场。如有关于作品内容、版权或其它问题请于作品发表后的30日内与变化吧联系。

  • 赞助本站
  • 微信扫一扫
  • weinxin
  • 加入Q群
  • QQ扫一扫
  • weinxin
幸运草
Go语言接口规则 前端框架

Go语言接口规则

Go语言接口规则 接口是一个或多个方法签名的集合。任何类型的方法集中只要拥有该接口对应的全部方法签名。就表示它 "实现" 了该接口,无须在该类型上显式声明实现了哪个接口。对应方法,是指有相同名称、参数...
Go语言中处理 HTTP 服务器 前端框架

Go语言中处理 HTTP 服务器

1 概述 包 net/http 提供了HTTP服务器端和客户端的实现。本文说明关于服务器端的部分。 快速开始: package main import (   "log"   "net/http" )...

发表评论