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")
    
}
相关推荐
2301_7634724618 分钟前
C++20概念(Concepts)入门指南
开发语言·c++·算法
TechWJ41 分钟前
PyPTO编程范式深度解读:让NPU开发像写Python一样简单
开发语言·python·cann·pypto
Coder_Boy_1 小时前
基于SpringAI的在线考试系统-考试系统开发流程案例
java·数据库·人工智能·spring boot·后端
lly2024061 小时前
C++ 文件和流
开发语言
m0_706653231 小时前
分布式系统安全通信
开发语言·c++·算法
2501_941982051 小时前
深度对比:Java、Go、Python 实现企微外部群推送,哪个效率更高?
java·golang·企业微信
寻寻觅觅☆2 小时前
东华OJ-基础题-104-A == B ?(C++)
开发语言·c++
lightqjx2 小时前
【C++】unordered系列的封装
开发语言·c++·stl·unordered系列
掘金者阿豪2 小时前
关系数据库迁移的“暗礁”:金仓数据库如何规避数据完整性与一致性风险
后端
zh_xuan2 小时前
kotlin lazy委托异常时执行流程
开发语言·kotlin