非零基础自学Golang 第9章 结构体 9.5 结构体方法

news2024/9/20 22:39:32

非零基础自学Golang

文章目录

      • 非零基础自学Golang
      • 第9章 结构体
        • 9.5 结构体方法
          • 9.5.1 指针类型接收者
          • 9.5.2 值类型接收者

第9章 结构体

9.5 结构体方法

Go语言中,一个方法就是一个包含了接收者的函数。

对于结构体方法,接收者可以是结构体类型的值或是指针。

9.5.1 指针类型接收者

当接收者类型为指针时,可以通过该方法改变该接收者的成员变量值,即使你使用了非指针类型实例调用该函数,也可以改变实例对应的成员变量值。

在以下示例中,我们为User结构体创建了ChangeName方法,在该方法内部将接收者的Name值修改为Tom,接收者的类型为指针类型:

[ 动手写9.5.1 ]

package main

import "fmt"

type User struct {
   Name  string
   Email string
}

func (u *User) ChangeName() { // 指针类型接收者
   u.Name = "Tom"
}

func main() {

   u := &User{"Peter", "go@go.com"} // 创建指针类型结构体实例
   fmt.Println("Name: ", u.Name, " Email: ", u.Email)

   u.ChangeName()
   fmt.Println("Name: ", u.Name, " Email: ", u.Email)
   
}

运行结果

在这里插入图片描述

只要结构体方法的接收者为指针类型,即使实例不是指针类型,修改也能生效:

[ 动手写 9.5.2 ]

package main

import "fmt"

type User struct {
   Name  string
   Email string
}

func (u *User) ChangeName() { // 指针类型接收者

   u.Name = "Tom"
}

func main() {

   u := User{"Peter", "go@go.com"} // 创建非指针类型结构体实例
   fmt.Println("Name: ", u.Name, " Email: ", u.Email)
   u.ChangeName()
   fmt.Println("Name: ", u.Name, " Email: ", u.Email)
   
}

运行结果

在这里插入图片描述

9.5.2 值类型接收者

当接收者不是一个指针时,该方法操作对应接收者值的副本,否则即使你使用了指针调用函数,也无法改变成员变量值。

[ 动手写 9.5.3]

package main

import "fmt"

type User struct {
   Name  string
   Email string
}

func (u User) ChangeName() { // 值类型接收者

   u.Name = "Tom"
}

func main() {

   u := &User{"Peter", "go@go.com"} //创建指针类型结构体实例

   fmt.Println("Name: ", u.Name, " Email: ", u.Email)

   u.ChangeName()
   fmt.Println("Name: ", u.Name, " Email: ", u.Email)
   
}

运行结果

在这里插入图片描述

如果方法需要修改接收者,接收者必须是指针类型。一般约定的接收者命名是类型的一个或两个字母的缩写(如u或者us之于User)。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/99633.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【图像融合】对比度增强结合多尺度边缘保持分解红外与可见光图像融合【含Matlab源码 1886期】

⛄一、对比度增强结合多尺度边缘保持分解红外与可见光图像融合简介 1 引言 夜视成像技术在军事与执法领域,如监控,侦查,情报搜集和安保等方面有着重要应用。不同类型的夜视成像传感器在记录同一场景时,在其提供的信息中有部分是冗…

目标检测论文解读复现【NO.21】基于改进YOLOv7的小目标检测

前言 此前出了目标改进算法专栏,但是对于应用于什么场景,需要什么改进方法对应与自己的应用场景有效果,并且多少改进点能发什么水平的文章,为解决大家的困惑,此系列文章旨在给大家解读最新目标检测算法论文&#xff0…

Java项目:基于SSM的高校运动会管理系统的设计与实现

作者主页:源码空间站2022 简介:Java领域优质创作者、Java项目、学习资料、技术互助 文末获取源码 项目介绍 该高校运动会信息管理系统是以B/S架构为设计基础并基于SSM框架开发的系统。系统采用了Java语言和MySQL数据库来实现。 系统按预定的算法完成了创…

数据结构---删去k个数字后的最小值

删去k个数字后的最小值思路贪心算法JAVA实现1JAVA实现2给出一个整数,从该整数中去掉k个数字,要求剩下的数字形成的新整数尽可能小。应该如何选取被去掉的数字? 其中整数的长度大于或等于k,给出的整数的大小可以超过long类型的数字…

计算机毕业设计 基于HTML+CSS+JavaScript 大气的甜品奶茶美食餐饮文化网页设计与实现23页面

👨‍🎓静态网站的编写主要是用HTML DIVCSS JS等来完成页面的排版设计👩‍🎓,常用的网页设计软件有Dreamweaver、EditPlus、HBuilderX、VScode 、Webstorm、Animate等等,用的最多的还是DW,当然不同软件写出的…

Java+SSM房屋租赁系统房屋出租房产(含源码+论文+答辩PPT等)

项目功能简介: 该项目采用的技术实现如下 后台框架:Spring、SpringMVC、MyBatis UI界面:jQuery 、JSP 数据库:MySQL 系统功能 系统分为前台用户界面和后台系统管理: 1.前台用户界面 用户注册、用户登录、用户中心、浏览房源、房源…

代码随想录训练营第54天|休息日 小结

打家劫舍系列 198. 打家劫舍对于当前的房间,无非就两种选择:偷与不偷。如果当前房间偷,那么前一个房间就不偷,即dp[i] dp[i-2] nums[i];如果当前房间不偷,那么dp[i] dp[i-1],因此递推公式为…

ch3_1_多进程的概念

1. CPU 的管理 CPU的工作原理: 从内存中取出程序的指令, 执行程序中的指令; 1.1 多道程序 假设A 程序运行时, 遇到 IO 处理时, 为了能够执行A 程序的后续指令, 正常情况下 cpu 需要等待着IO 处理完成&am…

后端快速学习VUE(一):VUE入门

个人博客地址 http://xiaohe-blog.top/ 文章目录1. 简介2. 基本使用2.1 引入Vue2.2 基本使用2.3 总结 :3. v-text、v-html指令的使用4. v-on : 事件绑定4.1 事件的三要素:4.2 v-on的基本使用4.3 v-on获取vue实例this4.4 事件绑定简化写法5. 常用指令5.1 …

useRef 源码解读

文章目录useRef 源码解读mountRefupdateRefref 的生命周期(工作流程)总结:render 阶段commit 阶段总述具体阐述safelyDetachRefcommitAttachRefuseRef 源码解读 由于 string 类型的 ref 已不推荐使用,所以只针对 function &#…

论文复现-1:bertscore

Bertscore是计算相似度的一种方法。 遗留问题:使用model layer 中的单一层 还是多个层,会对结果造成很大的影响吗? sent_encode函数是使用tokenizer将句子做encode。 tokenizer.encode( sent, add_special_tokensTrue, add_prefix_spaceTrue,…

HTML与CSS基础

2022.12.12 程序员在前端写完代码之后通过浏览器的渲染和解析成为用户看到的网页 浏览器出品的公司不同,内部的渲染引擎也不同。导致解析相同代码时的速度、性能、效果也不同 相同的前端网页在不同浏览器中运行的的结果也可能不同 WEB的三大标准 HTML包含页面内…

Java+MySQL基于SSM的智能办公管理系统

随着时代的发展,人们越来越来希望通过简单方便快捷的方式来进行办公,通过自能办公系统可以实现在线办公,这种办公模式脱离了传统纸质办公很多困扰,在实现现代化的同时提高了办公的效率。 本智能办公管理系统采用JAVA语言来进行开发,用小巧灵活的MySQL数据库做完后台存储解释。本…

痞子衡职场经验与感悟分享 - 索引

大家好,我是痞子衡,是正经搞技术的痞子。本系列痞子衡给大家分享的是职场经验与见闻感悟。 痞子衡在嵌入式行业也摸打滚爬了不少年,有一些个人经验可以给大家参考。所谓他山之石可以攻玉,希望痞子衡的经验对大家的职场之路有所帮…

jsp+ssm计算机毕业设计电影影评网【附源码】

项目运行 环境配置: Jdk1.8 Tomcat7.0 Mysql HBuilderX(Webstorm也行) Eclispe(IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持)。 项目技术: JSPSSM mybatis Maven等等组成,B/S模式 Mave…

java基础的综合运用

文章目录前言一.类的设计书籍类书架类用户类二.行为的规范2.1 增加书籍2.2展示所有书籍2.3查找书籍2.4 删除书籍2.5 归还书籍2.6 借阅书籍2.7 退出系统三.测试类的方法四.项目的目录前言 在我们学习完面向对象的知识之后,我们就要运用相关知识去实现一个图书管理系…

十六进制转Ascii脚本(包含\x处理)

目录 1.前言 2.十六进制转换脚本(包含处理\x) 1.前言 在以前玩CTF的时候,会遇到十六进制编码,特别是带\x的那种,网上虽然也有在线解密网站,但是对于\x解码不是特别友好。 2.十六进制转换脚本(包含处理\x&#

【Flink实时数仓】数据仓库项目实战 《四》日志数据分流 【DWD】

文章目录【Flink实时数仓】数据仓库项目实战 《四》日志数据分流-流量域 【DWD】1.流量域未经加工的事务事实表1.1主要任务1.1.1数据清洗(ETL)1.1.2新老访客状态标记修复1.1.3新老访客状态标记修复1.2图解1.3代码1.4数据测试1.4.1 测试脏数据1.4.2 测试e…

论文写作神器,SCI 写作必备

一、论文写作建议与英文句型积累/引用 1. Academic Phrasebank 网址: https://www.phrasebank.manchester.ac.uk/ Academic Phrasebank:从引言工作到结论提出了论文写作的详细建议,并在每个小点给出了海量的英语表达以供参考。是 SCI 新手…

linux red hat 8.0 搭建DNS服务

DNS简介: 简单的来说,DNS就是把域名和IP地址联系在一起的服务,有了DNS服务器,你就不用输入IP地址来访问一个网站,可以通过输入网址访问。 可以把DNS服务理解成网易有道词典,你去搜索一个英语单词&#xff0…