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

分类: 计算机技术
推荐阅读:
如何查看CPU的出厂日期 通常情况下,CPU的出厂日期是写在CPU的标签或者包装盒上的。如果您已经安装了CPU,则可以通过操作系统或者第三方软件来查看CPU的出厂日期。以下是一些方法:
使用PyInstaller打包PyQt5程序发生ImportError错误的解决办法 ImportError: unable to find Qt5Core.dll on PATH ,Failed to execute script main
解决rust-analyzer在rustlings中不生效的问题 rustlings是一个让你习惯阅读和编写Rust代码的项目,其中包含一些小练习;当使用VSCode打开该项目并编写练习时,rust-analyzer插件可能没有生效;
C语言ispunct()函数:判断字符是否为标点符号 ispunct()是C语言标准库中的一个函数,用于检查一个字符是否为标点符号;如果传入的字符参数是标点符号,则返回非0值,否则返回0;
为什么有大量阿里云IP访问网站? 为什么有大量阿里云IP访问网站?其原因可能有两个,一是网站被攻击,二是你使用了阿里云CDN、负载均衡等产品;
Golang实现获取文件的后缀名(扩展名) Golang通过调用 path.Ext() 函数,可获取文件的后缀名。