go 接口interface func (m Market) getName() string {

跟Java不同点:

  1. struct 实现 interface,并没有明显的实现写法,各写各的

  2. struct 可以实现部分interface的方法,而不必要全部实现。直接用没问题,用interface进行引用就报错:

示例代码:

Go 复制代码
// 包路径
package main

import "fmt"

// 接口有两个方法
type Animal interface {
    call()
    getName() string
}

// 创建类Market,有一个name熟悉
type Market struct {
    name string
}

/**
  实现方法:
  1. (m Market): 标识 这个是Market类的方法
  2. call() 接口的方法
*/
func (m Market) call() {
    fmt.Println("market call,", "name:", m.name)
}

func (m Market) getName() string {
    return m.name
}

type Tiger struct {
    name string
}

func (t Tiger) call() {
    fmt.Println("tiger call,", "name:", t.name)
}

func (t Tiger) getName() string {
    return t.name
}

func animalCall(a Animal) {
    a.call()
}

// 空接口,可以接受任何类型的对象,并根据类型判断
func print(v interface{}) {
    switch t := v.(type) {
    case int:
        fmt.Println("integer", t)
    case string:
        fmt.Println("string", t)
    }
}

//  main方法
func main() {
    
    // 接口 interface
    m1 := Market{name: "m111"}
    fmt.Println(m1.getName())
    m1.call()
    
    m2 := new(Market)
    m2.name = "m222"
    m2.call()
    
    t1 := Tiger{name: "t1111"}
    fmt.Println(t1.getName())
    t1.call()
    
    // 根据传值的不同
    animalCall(m1)
    animalCall(t1)
    
    // 定义一个接口,然后复制类对象,按照接口调用就可以
    var a1 Animal
    a1 = m1
    a1.call()
    
    // 将m1转换为 Market类型
    m11 := a1.(Market)
    fmt.Println(m11.name)
    
    // 空接口接受人任何对象
    print(11)
    print("str11")
    
}
相关推荐
羊锦磊3 小时前
[ Mybatis 多表关联查询 ] resultMap
java·开发语言·数据库·mysql·mybatis
ZeroToOneDev5 小时前
Java(泛型和JUnit)
java·开发语言·笔记
许野平6 小时前
Rust:构造函数 new() 如何进行错误处理?
开发语言·后端·rust
mCell6 小时前
Go 并发定时任务避坑指南:从 Sleep 到 Context 的 8 种写法全解析
后端·性能优化·go
先做个垃圾出来………7 小时前
如何培养自己工程化的能力(python项目)
开发语言·python
快乐就是哈哈哈8 小时前
Spring Cloud Alibaba 教程:Nacos 配置中心 + Feign 服务调用一网打尽
后端
Hemy089 小时前
QT_QUICK_BACKEND 环境变量详解(AI生成)
开发语言·qt
艾莉丝努力练剑9 小时前
深入详解C语言的循环结构:while循环、do-while循环、for循环,结合实例,讲透C语言的循环结构
c语言·开发语言·c++·学习
追逐时光者10 小时前
精选 5 款 .NET 开源、功能强大的工作流系统,告别重复造轮子!
后端·.net