当前位置: 首页 > news >正文

5. Go 方法(结构体的方法成员)

Go语言没有传统的 class ,为了让函数和结构体能够关联,Go引入了“方法”的概念。

当普通函数添加了接收者(receiver)后,就变成了方法。

一、函数和方法示例

// 普通函数
func Check(s string) string {return s
}// 方法,有了Receiver变成方法类型
func (Receiver) Check(s string) string {return s
}

二、方法使用

package mainimport "fmt"type Address struct {City string
}type Person struct {Name    stringAge     intAddress // 匿名成员,类型嵌入
}// 普通函数
func Check(s string) string {return s
}// 带有指针接收者的方法
func (p *Person) init(s string) {p.Name = sp.Age = 19
}func main() {// 创建一个指针类型的 Person 实例p1 := &Person{}p1.init("xinglujianzhi") // p1.init  //所属关系,init方法属于p1的类型// 打印 Person 实例fmt.Println(*p1) // 解引用 p1 打印其值
}

三、总结

在 Go 中,无论接收者是值类型还是指针类型,都可以通过实例(值)或指针来调用方法。Go 通过语法糖来简化调用方式,但内部的处理还是要根据接收者的类型来确定。

  • 接收者是值类型 (p1)
    • 如果接收者是值类型 p1,那么方法调用时,会将实例的副本传递给方法。这意味着方法内对接收者字段的修改不会影响原始实例。
  • 接收者是指针类型 (*p1)
    • 如果接收者是指针类型 *p1,则方法调用时传递的是实例的地址(指针)。方法内对接收者的修改会直接影响原始实例。

语法糖:

Go 提供了语法糖,即你可以用值来调用指针类型的接收者方法,反之亦然。Go 会自动为你进行地址的转换(即自动取指针或解引用)。

相关文章:

5. Go 方法(结构体的方法成员)

Go语言没有传统的 class ,为了让函数和结构体能够关联,Go引入了“方法”的概念。 当普通函数添加了接收者(receiver)后,就变成了方法。 一、函数和方法示例 // 普通函数 func Check(s string) string {return s }//…...

20250223学习记录

之前HDFview查看.hdf5文件的时候,看到土壤湿度数据是分为AM和PM,当时我有一个这样的疑问 但是后来用Python处理的时候,直接就是对整个的.hdf5文件处理,当时没有注意这一块,所以就没有这个疑问了。 今天突然看到一篇论…...

WPS携手DeepSeek:开启智能办公新时代

在数字化办公的浪潮中,效率与智能成为了人们追求的核心目标。近年来,人工智能技术的飞速发展为办公领域带来了前所未有的变革契机。DeepSeek作为一款备受瞩目的人工智能工具,以其强大的功能吸引了众多用户,然而在使用过程中&#…...

无需服务器,浏览器跑700+AI模型?!

Transformers.js 是一个创新的网络机器学习库,它将先进的 Transformer 模型直接带入浏览器,无需服务器端支持。这个库与 Hugging Face 的 Python transformers 库功能对等,提供相似的 API 接口来运行预训练模型,涵盖了自然语言处理…...

WSL2下ubuntu开启NFS服务

1. wsl2下ubuntu配置 安装 NFS 服务: sudo apt-get install nfs-kernel-server rpcbindnfs 配置文件/etc/exports: sudo vi /etc/exports打开/etc/exports 以后在后面添加如下所示内容: /home/mk/nfs *(rw,sync,no_subtree_check,no_root…...

深入了解 DevOps 基础架构:可追溯性的关键作用

在当今竞争激烈的软件环境中,快速交付强大的应用程序至关重要。尽管如此,在不影响质量的情况下保持速度可能是一项艰巨的任务,这就是 DevOps 中的可追溯性发挥作用的地方。通过提供软件开发生命周期 (SDLC) 的透明视图…...

k2路由器登录校园网

教程1刷入Breed,并手动刷入Padavan固件:斐讯K1、K2、K2P 刷机、刷入Breed 辅助工具 | tb (tbvv.net) Padavan下载网址: 我用的是: Padavan 登录的网址是 192.168.123.1 Padavan配置教程: 先用网线连上校园网&#…...

构建知识图谱的关键:高效三元组抽取技术在文本挖掘中的应用

在当今数字化时代,数据如潮水般涌来,文本数据更是海量且复杂。从科研论文到社交媒体动态,从新闻报道到电商商品描述,文本蕴含着丰富信息。而要让机器理解这些文本、挖掘有价值知识, “三元组抽取” 成为自然语言处理&a…...

超高清大图渲染性能优化实战:从页面卡死到流畅加载

目录 问题背景:1.为什么大图会导致页面卡死?一、DOM树构建(HTML Parsing)二、 资源加载:下载完整图片文件(可能高达30MB)三、解码处理(Decoding & Rasterization)、四…...

当使用vcpkg安装的qt5时,在VS调用出现libcrypto-*-x64.dll不是有效路径时

英文解决站点 applocal.ps1 fails in Visual Studio 2019 because of wildcard path in VcpkgAppLocalDLLs Issue #28614 microsoft/vcpkg 虽然这个bug不影响生成exe文件,第一次会弹出该错误,再次运行就正常,vcpkg会把对应的libcrypto-*-x64.dll版本复制到exe路径下..但是对…...

在 Vue 中处理跨域请求:全面解析与实践指南

在 Vue 中处理跨域请求:全面解析与实践指南 在现代 Web 开发的复杂生态中,跨域请求(CORS)如同一个无处不在的难题,时刻考验着开发者的技术能力。当我们构建基于 Vue.js 的前端应用时,这一问题尤为凸显。因为…...

标量化rknn的输入输出向量转换处理

这是一篇技术探索。yolo11模型生成后,我发现它无法在rknn环境正确识别出目标对象。而在宿主机上,或者直接调用.pt转换过的.onnx模型是可以得到正确结果的。这篇文章对应近乎一天的工作。最终的结论就是。这是一个模型量化的问题,与yolo的版本…...

认知重构 | 自我分化 | 苏格拉底式提问

注:本文为 “认知重构 | 自我分化” 相关文章合辑。 心理学上有一个词叫:认知重构(改变 “非黑即白,一分为二” 的思维方式) 原创 心理师威叔 心理自救 2024 年 10 月 26 日 19:08 广东 你有没有过这样的时候&#x…...

Java集合之ArrayList(含源码解析 超详细)

1.ArrayList简介 ArrayList的底层是数组队列,相当于动态数组。与Java中的数组相比,它的容量能动态增长。在添加大量元素前,应用程序可以使用ensureCapacity操作来增加ArrayList实例的容量。这可以减少递增式再分配的数量。 ArrayList继承于Ab…...

Java笔记18

2-10-3Cookie&Session 1.会话跟踪技术概述 会话:用户打开浏览器,访问web服务器的资源,会话建立,直到有一方断开连接,会话结束。在一次会话中可以包含多次请求和响应会话跟踪:一种维护浏览器状态的方法,服务器需要识别多次请求是否来自于同一浏览器,以便在同一次会话的多次…...

LangChain大模型应用开发:构建Agent智能体

介绍 大家好,博主又来给大家分享知识了。今天要给大家分享的内容是使用LangChain进行大模型应用开发中的构建Agent智能体。 在LangChain中,Agent智能体是一种能够根据输入的任务或问题,动态地决定使用哪些工具(如搜索引擎、数据库查询等)来…...

巧用GitHub的CICD功能免费打包部署前端项目

近年来,随着前端技术的发展,前端项目的构建和打包过程变得越来越复杂,占用的资源也越来越多。我有一台云服务器,原本打算使用Docker进行部署,以简化操作流程。然而,只要执行sudo docker-compose -f deploy/…...

【2】常用cmd命令大全、使用cmd运行和编译Java程序

文章目录 一、常用cmd命令大全文件和目录操作系统信息查看磁盘管理网络操作其他常用命令 二、使用cmd命令运行和编译Java程序 一、常用cmd命令大全 cmd的常用命令较多,java初学者只需了解这几个即可 dir:查看当前路径下的所有文件夹 cd:进入指…...

UniApp SelectorQuery 讲解

一、SelectorQuery简介 在UniApp中,SelectorQuery是一个非常强大的工具,它允许开发者查询节点信息。通过这个API,我们可以获取到页面元素的尺寸、位置、滚动条位置等信息。这在处理动态布局、动画效果或是用户交互时尤为重要。 二、基本使用…...

【行业解决方案篇十一】【DeepSeek零售分析:客流热力图生成系统】

开篇:当商店开始"思考" 你可能不知道,现在北京三里屯的优衣库旗舰店,每天要处理超过3000个顾客的移动轨迹数据。这些数据不是用来监控,而是让店铺自己"学会"把畅销款T恤摆在哪里最能促进销量。今天要讲的DeepSeek零售分析系统,就是这样一个能把"…...

Android Wi-Fi 连接失败日志分析

1. Android wifi 关键日志总结 (1) Wi-Fi 断开 (CTRL-EVENT-DISCONNECTED reason3) 日志相关部分: 06-05 10:48:40.987 943 943 I wpa_supplicant: wlan0: CTRL-EVENT-DISCONNECTED bssid44:9b:c1:57:a8:90 reason3 locally_generated1解析: CTR…...

装饰模式(Decorator Pattern)重构java邮件发奖系统实战

前言 现在我们有个如下的需求,设计一个邮件发奖的小系统, 需求 1.数据验证 → 2. 敏感信息加密 → 3. 日志记录 → 4. 实际发送邮件 装饰器模式(Decorator Pattern)允许向一个现有的对象添加新的功能,同时又不改变其…...

ES6从入门到精通:前言

ES6简介 ES6(ECMAScript 2015)是JavaScript语言的重大更新,引入了许多新特性,包括语法糖、新数据类型、模块化支持等,显著提升了开发效率和代码可维护性。 核心知识点概览 变量声明 let 和 const 取代 var&#xf…...

中南大学无人机智能体的全面评估!BEDI:用于评估无人机上具身智能体的综合性基准测试

作者:Mingning Guo, Mengwei Wu, Jiarun He, Shaoxian Li, Haifeng Li, Chao Tao单位:中南大学地球科学与信息物理学院论文标题:BEDI: A Comprehensive Benchmark for Evaluating Embodied Agents on UAVs论文链接:https://arxiv.…...

Debian系统简介

目录 Debian系统介绍 Debian版本介绍 Debian软件源介绍 软件包管理工具dpkg dpkg核心指令详解 安装软件包 卸载软件包 查询软件包状态 验证软件包完整性 手动处理依赖关系 dpkg vs apt Debian系统介绍 Debian 和 Ubuntu 都是基于 Debian内核 的 Linux 发行版&#xff…...

Python爬虫实战:研究feedparser库相关技术

1. 引言 1.1 研究背景与意义 在当今信息爆炸的时代,互联网上存在着海量的信息资源。RSS(Really Simple Syndication)作为一种标准化的信息聚合技术,被广泛用于网站内容的发布和订阅。通过 RSS,用户可以方便地获取网站更新的内容,而无需频繁访问各个网站。 然而,互联网…...

C++ 基础特性深度解析

目录 引言 一、命名空间(namespace) C 中的命名空间​ 与 C 语言的对比​ 二、缺省参数​ C 中的缺省参数​ 与 C 语言的对比​ 三、引用(reference)​ C 中的引用​ 与 C 语言的对比​ 四、inline(内联函数…...

涂鸦T5AI手搓语音、emoji、otto机器人从入门到实战

“🤖手搓TuyaAI语音指令 😍秒变表情包大师,让萌系Otto机器人🔥玩出智能新花样!开整!” 🤖 Otto机器人 → 直接点明主体 手搓TuyaAI语音 → 强调 自主编程/自定义 语音控制(TuyaAI…...

关于 WASM:1. WASM 基础原理

一、WASM 简介 1.1 WebAssembly 是什么? WebAssembly(WASM) 是一种能在现代浏览器中高效运行的二进制指令格式,它不是传统的编程语言,而是一种 低级字节码格式,可由高级语言(如 C、C、Rust&am…...

鸿蒙DevEco Studio HarmonyOS 5跑酷小游戏实现指南

1. 项目概述 本跑酷小游戏基于鸿蒙HarmonyOS 5开发,使用DevEco Studio作为开发工具,采用Java语言实现,包含角色控制、障碍物生成和分数计算系统。 2. 项目结构 /src/main/java/com/example/runner/├── MainAbilitySlice.java // 主界…...