方法的调用和传参机制 | 学习笔记

简介: 快速学习方法的调用和传参机制

开发者学堂课程【Go语言核心编程 - 面向对象、文件、单元测试、反射、TCP编程方法的调用和传参机制】学习笔记,与课程紧密联系,让用户快速学习知识。

课程地址:https://developer.aliyun.com/learning/course/626/detail/9677


方法的调用和传参机制

 

内容介绍

一、方法的调用和传参机制的原理

二、方法的调用和传参机制案例1

三、方法的调用和传参机制案例2

 

一、方法的调用和传参机制的原理

原理:

方法的调用和传参机制和函数基本一样,不一样的地方是方法调用时会将调用方法的变量当做实参传递给方法。

 

二、方法的调用和传参机制案例1

画出 getSum 方法的执行过程并加以说明

  • 核心代码

func (p Person) getSum(n1 int,n2 int) int {

return n1 + n2

n1 :=10 n2 := 20

res =p.getsum(n1,n2)

fmt.Print1n("res=", res)

  • 代码分析:

1)在通过一个变量去调用方法时,其调用机制和函数一样

2)不一样的地方变量调用方法时,该变量本身也会作为一个参数传递到方法(如果变量是值类型,则进行值拷贝,如果变量是引用类型,则进行地址拷贝)

l 内存分析图

image.png

l 说明分析

Main 函数中有独立的数据空间称为 main 栈,变量 n1、n2,均是基本数据类型们分别指向空间[10]、[20],先执行类型推导右面的代码,即 p.getSum,根据已知原则,会生成一个新的独立的数据空间,称之为 getSum 栈。调用 main 栈时,会把 n1和 n2传给 getSum 中n1和 n2,进行值的拷贝,因此 getSum 栈里也会有 n1的值为10,同时还会有一个 n2的值为20,因为它满足拷贝的原则在主函数调用p 指向一个结构体 person,里面存有字段 name 值为 tom。在完成 p.getSum 的时候,不仅将 n1和 n2进行值的拷贝主函数里的 p 也当作一个参数传出即在 getSum 栈里 p 也有一份相同的数据类型,但是他们存有独立的数据空间。即 p 在调用getSum 的时候,p 本身当作一个形参传给 getSum 栈,会在该栈里生成一个相同的值:tom,完成值的拷贝。接着执行 n1+n2,再去执行 return n1+n2,即10+20返回30给 res当于主栈里存有 res=30,最终在终端输出 res:=30


三、方法的调用和传参机制案例2

请编写一个程序,要求如下:

1)声明一个结构体 circle,字段为 radius

2)声明一个方法 area 和 circle 绑定,可以返回面积。

3)提示:画出 area 执行过程并加以说明

  • 核心代码

package main import("fmt")

type circle struct {

radius float64

func (c Circle) area()float64{

return 3.14*c.radius* c.radius

}

func main (){

var c Circle

c.radius =4.0

res :=c.area()

fmt.Print1n("面积是=", res)

}

  • 代码分析

新建一个文件夹,命名为 methodDemo。新建 main.go 文件,输入通用代码

package main import("fmt");输入 type circle struct {

radius float64 新建一个结构体,;输入 func (c Circle) area()float64{

return 3.14*c.radius* c.radius}

将 area和circle 完成绑定;通过 var c circle c.radius =4.0 res :=c.area()

fmt.Print1n("面积是=", res) 进行调用,输出结果为50.24,与理论值一致。

  • 内存分析图

image.png

  • 分析说明

创建 circle 结构体,首先主栈(main 栈)里有一个 c,c 指向一个结构体,结构体里面有一个字段 radius赋予4.0,完成调用(c.area)。根据规则会创建一个新的独立的数据空间,称为 area 栈。area 栈里会把 c 及其字段传入,并在

该栈执行运算(3.14*c.radius*c.radius),此时 c.radius 是area 栈中获取的并不是从 main 栈中获取的运算结束后return 到 main 栈桥中,得到 res:=50.24,输出面积值。此时控制台(终端)就会输出面积面积是50.24,返回后 area 空间销毁,主函数执行完毕整个内存都会销毁

相关文章
|
6月前
|
存储 C语言
C 语言函数完全指南:创建、调用、参数传递、返回值解析
函数是一段代码块,只有在被调用时才会运行。 您可以将数据(称为参数)传递给函数。 函数用于执行某些操作,它们对于重用代码很重要:定义一次代码,并多次使用。
190 3
|
JSON 前端开发 数据格式
四种常见的参数传递方式
四种参数传递方式
197 0
|
1月前
学习使用如何调用外部函数
学习使用如何调用外部函数
33 8
|
6月前
|
存储 Java
Java数组与带参数方法:定义、调用及实践
Java数组与带参数方法:定义、调用及实践
72 1
|
Java
方法的传参过程
方法的传参过程
124 0
|
程序员 Scala 开发者
函数(方法)的调用机制|学习笔记
快速学习函数(方法)的调用机制。
函数(方法)的调用机制|学习笔记
|
存储 PHP 开发者
参数传值方式|学习笔记
快速学习参数传值方式
参数传值方式|学习笔记
|
存储 Java Go
函数参数的传递方式 | 学习笔记
简介:快速学习函数参数的传递方式
117 0
函数参数的传递方式 | 学习笔记
|
编译器
详解函数的三种传递方式
详解函数的三种传递方式
185 0
方法参数传递案例
方法参数传递案例
89 0
方法参数传递案例