美文网首页
Go语言为任意类型添加方法

Go语言为任意类型添加方法

作者: 码二哥 | 来源:发表于2020-02-09 18:34 被阅读0次

参考:
http://c.biancheng.net/view/70.html

关键点

1、面向对象编程

2、如果基本类型,如int,string,bool等类型,改为面向对象的编程想法的话, 可以使用type + 接收器方式实现

A、使用type 基于基本类型 自定义的类型(type的使用场景之一)

B、使用接收器,为自定义的新类型,添加方法,从而将方法新类型的实例,进行了绑定,从而不能独自调用该方法

Go语言可以对任何类型添加方法,给一种类型添加方法就像给结构体添加方法一样,因为结构体也是一种类型。

1、为基本类型添加方法

在Go语言中,使用 type 关键字可以定义出新的自定义类型,之后就可以为自定义类型添加各种方法了。

我们习惯于使用面向过程方式判断一个值是否为 0,例如:

if  v == 0 {
    // v等于0
}

如果将 v 当做整型对象,那么判断 v 值就可以增加一个 IsZero() 方法,通过这个方法就可以判断 v 值是否为 0,例如:

if  v.IsZero() {
    // v等于0
}
image

为基本类型添加方法的详细实现流程如下:

package main
import (
    "fmt"
)
// 将int定义为MyInt类型
type MyInt int
// 为MyInt添加IsZero()方法
func (m MyInt) IsZero() bool {
    return m == 0
}
// 为MyInt添加Add()方法
func (m MyInt) Add(other int) int {
    return other + int(m)
}
func main() {
    var b MyInt
    fmt.Println(b.IsZero())
    b = 1
    fmt.Println(b.Add(2))
}

代码输出如下:

true
3

代码说明如下:

  • 第 8 行,使用 type MyInt int 将 int 定义为自定义的 MyInt 类型。

  • 第 11 行,为 MyInt 类型添加 IsZero() 方法,该方法使用了 (m MyInt) 的非指针接收器,数值类型没有必要使用指针接收器。

  • 第 16 行,为 MyInt 类型添加 Add() 方法。

  • 第 17 行,由于 m 的类型是 MyInt 类型,但其本身是 int 类型,因此可以将 m 从 MyInt 类型转换为 int 类型再进行计算。

  • 第 24 行,调用 b 的 IsZero() 方法,由于使用非指针接收器,b的值会被复制进入 IsZero() 方法进行判断。

  • 第 28 行,调用 b 的 Add() 方法,同样也是非指针接收器,结果直接通过 Add() 方法返回。

相关文章

  • Go语言为任意类型添加方法

    参考:http://c.biancheng.net/view/70.html 关键点 1、面向对象编程2、如果想为...

  • Go语言 为类型添加方法

    在Java中,有基本类型:int,short等,这些基本类型是没有包含对应的操作方法,比如int就需要通过装箱成i...

  • go入门(五) 2018-07-19

    方法和接口 方法 Go语言中没有类,但是可以在结构类型上定义方法,实际上可以对包中的任意类型定义任意方法,但是不能...

  • golang笔记之方法(一)方法声明

    在能够给任意类型定义方法这一点上,Go和很多其他的面向对象的语言不太一样。因此在Go语言里,我们为一些简单的数值、...

  • go语言利用reflect存储函数和参数

    go语言利用reflect存储函数和参数 本文提供go语言中一种存储任意类型函数和参数的方法。源代码链接:http...

  • 第04天(面对对象编程)_02

    05_结构体指针类型匿名字段.go 06_面向过程和对象函数的区别.go 07_为结构体类型添加方法.go 08_...

  • Golang基础(七)——方法method

    Golang基础(七)——方法method @([07] golang)[Go总结] 可以对包内的任意类型定义任意...

  • Go语言如何选择方法接收器的类型

    Go语言中的方法 方法用于给指定数据类型(非内置数据类型)添加新的行为,方法实质上也是函数,与函数不同的是,每个方...

  • 7 Go一等公民:函数、闭包及函数式编程

    一、函数 1.函数定义 Go语言的函数定义非常灵活强大,其有以下特征: 支持任意多个任意类型的参数 参数类型后置 ...

  • day2 任意值

    任意值(Any)用来表示允许赋值为任意类型。 但如果是 any 类型,则允许被赋值为任意类型。 任意值的属性和方法...

网友评论

      本文标题:Go语言为任意类型添加方法

      本文链接:https://www.haomeiwen.com/subject/txynxhtx.html