咔叽游戏

 找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 415|回复: 0

[Golang] Go语言基础go接口用法示例详解

[复制链接]
  • TA的每日心情
    无聊
    2019-6-2 14:11
  • 签到天数: 4 天

    [LV.2]圆转纯熟

    发表于 2022-1-1 11:03:14 | 显示全部楼层 |阅读模式
    目录

      概述语法
        定义接口实现接口
        空接口接口的组合
      总结

    Go语言基础go接口用法示例详解-1.png


    概述

    Go 语言中的接口就是方法签名的集合,接口只有声明,没有实现,不包含变量。

    语法


    定义接口
    1. type [接口名] interface {
    2.     方法名1(参数列表) 返回值列表   
    3.     方法名2(参数列表) 返回值列表
    4.     ...
    5. }
    复制代码
    例子
    1. type Isay interface{
    2.   sayHi()
    3. }
    复制代码
    实现接口


    例子
    1. //定义接口的实现类
    2. type Chinese struct{}
    3. //实现接口
    4. func (_ *Chinese) sayHi() {
    5.   fmt.Println("中国人说嗨")
    6. }
    复制代码
    1. //中国人
    2. type Chinese struct{}
    3. //美国人
    4. type Americans struct{}
    5. func (this *Chinese) sayHi()  {
    6.   fmt.Println("中国人说嗨")
    7. }
    8. func (this Americans) sayHi()  {
    9.   fmt.Println("美国人说hi")
    10. }
    11. //调用
    12. &Chinese{}.sayHi()
    13. Americans{}.sayHi()
    复制代码
    空接口

    在Go语言中,所有其它数据类型都实现了空接口。
    1. interface{}
    复制代码
    1. var v1 interface{} = 1
    2. var v2 interface{} = "abc"
    3. var v3 interface{} = struct{ X int }{1}
    复制代码
    如果函数打算接收任何数据类型,则可以将参考声明为interface{}。最典型的例子就是标准库fmt包中的Print和Fprint系列的函数:
    1. func Fprint(w io.Writer, a ...interface{}) (n int, err error)
    2. func Fprintf(w io.Writer, format string, a ...interface{})
    3. func Fprintln(w io.Writer, a ...interface{})
    4. func Print(a ...interface{}) (n int, err error)
    5. func Printf(format string, a ...interface{})
    6. func Println(a ...interface{}) (n int, err error)
    复制代码
    接口的组合

    一个接口中包含一个或多个接口
    1. //说话
    2. type Isay interface{
    3.   sayHi()
    4. }
    5. //工作
    6. type Iwork interface{
    7.   work()
    8. }
    9. //定义一个接口,组合了上述两个接口
    10. type IPersion interface{
    11.   Isay
    12.   Iwork
    13. }
    14. type Chinese struct{}
    15. func (_ Chinese) sayHi() {
    16.   fmt.Println("中国人说中国话")
    17. }
    18. func (_ Chinese) work() {
    19.         fmt.Println("中国人在田里工作")
    20. }
    21. //上述接口等价于:
    22. type IPersion2 interface {
    23.         sayHi()
    24.         work()
    25. }
    复制代码
    总结

    interface类型默认是一个指针使用空接口可以保存任意值不能比较空接口中的动态值定义了一个接口,这些方法必须都被实现,这样编译并使用
    示例
    1. package main
    2. import "fmt"
    3. //中国话
    4. type Isay interface {
    5.         sayHi()
    6. }
    7. //工作
    8. type Iwork interface {
    9.         work()
    10. }
    11. //中国人
    12. type Chinese struct{}
    13. //美国人
    14. type Americans struct{}
    15. func (this *Chinese) sayHi() {
    16.         fmt.Println("中国人说嗨")
    17. }
    18. func (this Americans) sayHi() {
    19.         fmt.Println("美国人说hi")
    20. }
    21. type IPersion interface {
    22.         Isay
    23.         Iwork
    24. }
    25. func (_ Chinese) work() {
    26.         fmt.Println("中国人在田里工作")
    27. }
    28. func main() {
    29.         var chinese Isay = &Chinese{}
    30.         chinese.sayHi()
    31.         Americans{}.sayHi()
    32.         //接口组合
    33.         var ipersion IPersion = &Chinese{}
    34.         ipersion.sayHi()
    35.         ipersion.work()
    36. }
    复制代码
    以上就是Go语言基础go接口用法示例详解的详细内容,更多关于Go 语言基础的资料请关注咔叽论坛其它相关文章!

    原文地址:https://www.jb51.net/article/229377.htm

    QQ|免责声明|小黑屋|手机版|Archiver|咔叽游戏

    GMT+8, 2024-3-29 15:25

    Powered by Discuz! X3.4

    © 2001-2023 Discuz! Team.

    快速回复 返回顶部 返回列表