go 语言中的类型判断

_. ok := interface{
   }(a).(B)

此语句用于判断对象a是否是B类型

也可以判断对象a是否实现了B接口

package main

import "fmt"

type Pet interface {
   
	SetName(name string)
	Name() string
	Category() string
}
type Dog struct {
   
	name string
}

func (dog *Dog) SetName(name string) {
   
	dog.name = name
}
func (dog Dog) Name() string {
   
	return dog.name
}
func (dog Dog) Category() string {
    return "dog" }
func main() {
   
	dog := Dog{
   "little pig"}

	_, ok := interface{
   }(dog).(Pet)
	fmt.Printf("Dog implements interface Pet: %v\n", ok)
	_, ok = interface{
   }(&dog).(Pet)
	fmt.Printf("*Dog implements interface Pet: %v\n", ok)
	fmt.Println()
	var pet Pet = &dog
	fmt.Printf("This pet is a %s, the name is %q.\n",
		pet.Category(), pet.Name())
}

输出为:

Dog implements interface Pet: false

*Dog implements interface Pet: true

This pet is a dog, the name is "little pig".

一个指针类型实现了某某接口类型,但它的基本类型却不一定能够作为该接口的实现类型。

怎样判定一个数据类型的某一个方法实现的就是某个接口类型中的某个方法呢?

这有两个充分必要条件:

  • 一个是两个方法的签名需要完全一致
  • 另一个是两个方法的名称要一模一样

显然,这比判断一个函数是否实现了某个函数类型要更加严格一些。
这就意味着,Dog类型本身的方法集合中只包含了2个方法, 也就是所有的值方法。而它的指针类型*Dog方法集合却包含了 3 个方法

相关推荐

  1. go 语言类型判断

    2024-01-07 13:14:02       64 阅读
  2. Go语言Go语言接口类型

    2024-01-07 13:14:02       37 阅读
  3. go 语言别名类型

    2024-01-07 13:14:02       55 阅读
  4. 深入探讨 Go 语言 Map 类型

    2024-01-07 13:14:02       53 阅读
  5. 深入探讨 Go 语言 Map 类型(续)

    2024-01-07 13:14:02       59 阅读
  6. Go 语言接口类型转换详解

    2024-01-07 13:14:02       53 阅读
  7. Go语言工作负载类型对并发影响

    2024-01-07 13:14:02       34 阅读

最近更新

  1. docker php8.1+nginx base 镜像 dockerfile 配置

    2024-01-07 13:14:02       98 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2024-01-07 13:14:02       106 阅读
  3. 在Django里面运行非项目文件

    2024-01-07 13:14:02       87 阅读
  4. Python语言-面向对象

    2024-01-07 13:14:02       96 阅读

热门阅读

  1. keil 5 armlink 链接错误和警告解释大全

    2024-01-07 13:14:02       54 阅读
  2. C#-词法结构

    2024-01-07 13:14:02       52 阅读
  3. STM32 FOC算法调节电机

    2024-01-07 13:14:02       53 阅读
  4. Linux 系统 curl 命令详解

    2024-01-07 13:14:02       60 阅读
  5. Midjourney词库

    2024-01-07 13:14:02       40 阅读
  6. 龙芯loongarch64服务器编译安装tensorflow

    2024-01-07 13:14:02       78 阅读
  7. 【攻防世界】Reverse—— IgniteMe writeup

    2024-01-07 13:14:02       57 阅读
  8. linux 测速 speedtest

    2024-01-07 13:14:02       54 阅读
  9. JVM

    JVM

    2024-01-07 13:14:02      62 阅读
  10. Mybatis插件运行原理及自定义插件

    2024-01-07 13:14:02       85 阅读
  11. CSS实现瀑布流

    2024-01-07 13:14:02       69 阅读