golang方法入门

2023-05-22 16:05:00 方法 入门 Golang

golang是一种强类型、静态类型的编程语言,它在性能、并发性、简洁性和安全性方面都有着不俗的表现。其中,方法是Golang中一个非常重要的概念,它可以让程序员更方便地对结构体进行操作。本文将为读者介绍Golang中的方法,包括方法定义、调用和继承等方面的知识,以帮助初学者快速熟悉方法的使用。

一、方法的定义

方法是一种特殊的函数,它必须要有接收器(receiver)才能被调用。接收器可以是一个结构体类型,或者是一个非结构体类型(如int、float等)。方法可以定义在任何一个包中,而不仅仅是定义在结构体所在的包中。

方法的定义格式如下:

func (接收器变量 接收器类型) 方法名(参数列表)(返回值列表){
    // 函数体
}

其中,接收器变量可以是任意合法的变量名,接收器类型则是任何类型,但必须是在当前包内的类型。在方法内部,可以使用接收器变量来访问接收器所包含的字段和方法。

接收器类型有两种:

  • 值类型接收器(value receiver):使用值类型接收器的方法会在调用时对接收器进行一次复制,方法内对接收器的修改不会反映到原始变量上。
  • 指针类型接收器(pointer receiver):使用指针类型接收器的方法不会对接收器进行复制,方法内对接收器的修改会直接反映到原始变量上。

示例代码如下:

type Rect struct{
    width, height float64
}

// 定义求面积的方法(值类型接收器)
func (r Rect) area() float64{
    return r.width * r.height
}

// 定义求面积的方法(指针类型接收器)
func (r *Rect) areaPtr() float64{
    return r.width * r.height
}

以上代码中,我们定义了两个求矩形面积的方法,一个使用了值类型接收器,一个使用了指针类型接收器。

二、方法的调用

与函数的调用类似,方法的调用需要使用点操作符。在调用方法时,Golang会自动解析方法的接收器类型,并将方法所属的接收器作为第一个参数传递给方法。

示例代码如下:

package main

import "fmt"

type Rect struct{
    width, height float64
}

// 定义求面积的方法(值类型接收器)
func (r Rect) area() float64{
    return r.width * r.height
}

// 定义求面积的方法(指针类型接收器)
func (r *Rect) areaPtr() float64{
    return r.width * r.height
}

func main(){
    rect := Rect{10, 20}

    // 调用值类型接收器的方法
    fmt.Println(rect.area())     // 输出:200

    // 调用指针类型接收器的方法
    fmt.Println(rect.areaPtr())  // 输出:200

    // 使用&符号获取指针,再调用指针类型接收器的方法
    fmt.Println((&rect).areaPtr()) // 输出:200
}

在上述代码中,我们创建了一个矩形rect,并调用了它的两个方法。

需要注意的是,在使用值类型接收器的方法时,如果接收器是一个结构体的值类型,则它的字段值不会被修改。而在使用指针类型接收器的方法时,如果接收器是一个结构体的指针类型,则它的字段值会被修改。

三、方法的继承

在Golang中,一个类型可以通过组合其他类型来实现继承。继承的过程中,子类型中的方法可以覆盖(override)父类型中的方法,从而实现自己的逻辑。

示例代码如下:

package main

import "fmt"

type Shape interface{
    area() float64
}

type Rect struct{
    width, height float64
}

// 定义矩形类的方法
func (r Rect) area() float64{
    return r.width * r.height
}

type Circle struct{
    radius float64
}

// 定义圆形类的方法
func (c Circle) area() float64{
    return 3.14 * c.radius * c.radius
}

func main(){
    rect := Rect{10, 20}
    circle := Circle{10}

    // 创建形状对象,使用接口类型接收
    var shape Shape

    // 将矩形类型赋值给接口类型
    shape = rect
    fmt.Println(shape.area())   // 输出:200

    // 将圆形类型赋值给接口类型
    shape = circle
    fmt.Println(shape.area())   // 输出:314
}

在上述代码中,我们定义了一个Shape接口,包括一个计算面积的方法。接着,我们定义了两种形状类型Rect和Circle,分别覆盖了Shape接口中的area方法。最后,我们通过将Rect和Circle类型分别赋值给Shape接口类型来计算其面积。

总结

本文介绍了Golang中方法的定义、调用和继承等方面的知识。通过学习本文,读者可以了解到方法这一重要概念在Golang中的作用,并掌握其基本的使用技巧。以此为基础,读者可以进一步深入学习Golang的语法和应用,掌握更加高级的方法使用技巧,提升自己的编程能力。

以上就是golang方法入门的详细内容,更多请关注其它相关文章!

相关文章