golang函数与方法的区别

server/2025/3/19 12:07:33/

1.调用方式的区别

函数的调用方式:函数名(参数...)

方法的调用方式: 变量.方法名(参数...)

2.函数的使用

package mainimport "fmt"
//函数参数为值类型,调用的时候只能传递值类型数据,不能传递指针类型
func Sum(a, b int) int {return a + b
}
//函数的参数为指针类型,调用的时候只能传递指针类型,不能传递值类型
func Sub(a, b *int) int {return *a - *b
}
func main() {a, b := 10, 2fmt.Println(Sum(a, b))fmt.Println(Sub(&a, &b))
}

3.方法的使用

package mainimport "fmt"type Person struct {Name stringAge  int
}
//接收者为值类型时,可以接受指针类型变量调用方法,反之亦然
func (p Person) setAge(age int) {p.Age = age
}
func (p *Person) setName(name string) {p.Name = name
}
func (p Person) PrintName() {fmt.Println(p.Name)
}
func main() {p1 := Person{Name: "张三",Age:  10,}p1.setName("王五")    //Name=王五(&p1).setName("赵六") //Name=赵六p1.setAge(12)(&p1).setAge(12) //Age= 10fmt.Println(p1)p1.PrintName()
}

 由代码可以看出:

  • 不管调用形式如何,真正决定是值拷贝还是地址拷贝,需要看方法和那个类型进行绑定。
  • 方法和值类型绑定,比如(p Person),则是值拷贝。不论是p1.SetAge(12)还(&p1).setAge(12)都不会改变Age的值。
  • 方法和指针类型绑定,比如(p *Person),则是地址拷贝。不论是值类型p1.setName("王五") 还是指针(&p1).setName("赵六")都可以改变Name的值。

4.总结

  1. 对于普通函数,接收者为值类型时,不能将指针类型的数据直接传递,反之亦然。
  2. 对于方法,接收者为值类型时,可以直接用指针类型的变量调用方法,发过来同样也可以。


http://www.ppmy.cn/server/176235.html

相关文章

【Deepseek进阶篇】--4.科研运用

DeepSeekDeepResearch ,让科研像聊天一样简单 通过百度网盘分享的文件:AI学术工具公测版.exe 链接:https://pan.baidu.com/s/1kPrFGhpWuwB2eiGuP33Qjg?pwd0417 目录 1. 能做什么 1.1.爬虫数据采集 1.2.撰写文章标题 1.3.中-英、英-中 1.4.中文学术写作润色指…

Leetcode-2272. Substring With Largest Variance [C++][Java]

目录 一、题目描述 二、解题思路 【C】 【Java】 Leetcode-2272. Substring With Largest Variancehttps://leetcode.com/problems/substring-with-largest-variance/description/2272. 最大波动的子字符串 - 力扣(LeetCode)2272. 最大波动的子字符串…

【Netty】消息分发处理方式

背景 检索平台,使用长链接的方式与外部系统进行交互; 因平台使用的的自定义二进制交互协议,因此需要针对每个接口请求与响应都要进行编解码, 因此需要一种针对不同消息的分发处理 方案一 注解 反射 示例: /** * 消息类型注解 */ Retenti…

xLua_001

xLua下载 1、HelloWrold 代码 using System.Collections; using System.Collections.Generic; using UnityEngine; using XLua; // 引入XLua命名空间 public class Helloworld01 : MonoBehaviour {//声明LuaEnv对象 private LuaEnv luaenv;void Start(){//实例化LuaEnv对象…

安徽建筑安全员 B 证考试有哪些重难点?

安徽建筑安全员 B 证考试涵盖安全生产知识、管理能力及实际能力的考核,考试内容包括法律法规(50%)、安全管理(40%)、土建综合安全技术(6%)、机械设备安全技术(4%)。其重难…

docker 安装 nginx 部署Vue前端项目

1 安装 docker 安装docker详细步骤 安装docker报错解决方案 2 安装 nginx 2.1 拉取镜像 拉取1.18.0版本的镜像 docker pull nginx:1.18.0 查看镜像 2.2 创建实例并启动 创建并启动实例 # 随便启动一个nginx实例,只是为了复制出配置 docker run -p 80:80 --nam…

从0到1入门AOP

一、Spring事务管理 注解:Transactional使用位置:业务层(Service)的方法上,类上,接口上作用:将当前方法交给Spring进行事务管理,方法执行前,开启事务,成功执行…

在 Visual Studio Code 中高效使用 Pylance:配置、技巧与插件对比

在 Visual Studio Code 中高效使用 Pylance:配置、技巧与插件对比 目录 什么是 Pylance?安装与启用核心配置详解高效使用技巧Pylance vs Jedi:深度对比常见问题与优化总结 1. 什么是 Pylance? ‌Pylance‌ 是微软为 VSCode Pyth…