Golang中结构体方法的定义和使用

本文将详细的描述在Go语言中如何定义方法,以及如何使用它;阅读本文可能需要一点Go语言基础以及结构体的知识;

在Go语言中,没有类这个概念,不过我们可以为结构体类型定义方法;

先看一段代码:

package main

import "fmt"

type Rectangle struct {
	X float64
	Y float64
}

func Area(r Rectangle)float64{
	return r.X * r.Y
}

func main(){
	A := Rectangle{12,5}
	fmt.Println(Area(A))
}

这段代码定义了一个 Rectangle 结构体类型,该结构体包含两个字段 X 和 Y,用于表示矩形的长和宽;另外定义了一个Area()函数,该函数接收一个Rectangle 结构体类型,返回该Rectangle的面积;

那么,我们现在来修改这段代码,将Area() 函数修改为Rectangle结构体的方法:

package main

import "fmt"

type Rectangle struct {
	X float64
	Y float64
}

func (r Rectangle) Area()float64{
	return r.X * r.Y
}

func main(){
	A := Rectangle{5,12}
	fmt.Println(A.Area())
}

此时的Area()彻彻底底的变成了Rectangle结构体的方法;在func 关键字和Area之间加入了一个特殊的参数,这里的 r 就有点相当于C++中的 this ,python中的 self;

在代码的16行中,展示了结构体方法的使用;

Area() 方法中的 r 是其结构体的一个副本;如果你需要在定义的方法中修改结构体中的数据,那么你需要将其定义为指针,否则你修改的值不会生效,因为那是一个副本;

func (r *Rectangle) SetXY(x,y float64){
	r.X = x
	r.Y = y
}

原创内容,如需转载,请注明出处;

本文地址: https://www.perfcode.com/p/golang-method.html

分类: 计算机技术
推荐阅读:
Linux从视频文件里提取音频 通常来说,从一个视频文件里提取出其音频可能需要你学习使用某些音视频处理软件;而在Linux下,你只需要一条命令即可实现将将音频从视频文件中提取出来:
斐波那契数列C语言多种实现方法 本文将使用C语言通过递归、动态规划、通项公式等技巧来计算斐波那契数列;并获得斐波那契数列的第n项值;
一条Linux命令生成一个指定长度的随机密码 在Linux系统下,你可以只需要一条命令就可以生成指定长度的随机密码:
C语言strncpy()函数:复制字符串中的n个字符 strncpy()是C语言标准库中的一个字符串复制函数,用于将一个字符串的n个字符复制到另一个字符串中;
C语言实现复数乘法计算 本文将使用C语言实现复数的乘法运算;
Golang实现base64加密解密 Base64是网络上最常见的用于传输8Bit字节码的编码方式之一,Base64就是一种基于64个可打印字符来表示二进制数据的方法。