Go语言学习笔记 --- method

Go语言学习之method(The way to go) 生命不止,继续go go go !在golang的世界中,一定要区分 方法和函数。Go中没有类的概念,但是我们可以在一些类型上定义一些方法,也就是所谓的方法,跟函数不同。通过func关键字声明方法type Vertex struct { X, Y float64 }func (v Vertex) Abs() float64 { return math.Sqrt(v.X*v.X + v 阅读详情

学习笔记根据 无闻 go语言基础教程 整理

method

  • Go 中没有class, 但依旧有method
  • 通过显式说明receier来实现与某个类型的组合
  • 只能为同一个包中的类型定义方法
  • Receiver可以是类型的值或指针
  • 不存在方法重载
  • 可以使用值或指针来调用方法,编译器会自动完成转换
  • 从某种意义上来说,方法是函数的语法糖,因为reveiver其实就是方法所接收的第一个参数(Method Value vs. Method Expression)
  • 如果外部结构和嵌入结构存在同名方法,则优先调用外部结构的方法
  • 类型别名不会拥有底层类型所附带的方法
  • 方法可以调用结构中的非公开字段。
  • 示例代码:
package main

import (
    "fmt"
)

type A struct {
    Name string
    Age int
    grade string // 私有字段 以package为级别,都是公有的,不同包都是私有的
}

type TZ int // 初始化一个int型的类型别名 TZ

func main() {
    test1()
    test2()
    test3()
    test4()
    test5()
    test6()
}

// 定义 A 的方法 Print 结构为: func + 接收者 + 方法名 ; go语言中没有重载的概念
func (a A) Print() {
    fmt.Println("A")
}

// 设置名称 内部值拷贝
func (a A) SetName() {
    a.Name = "A"
}

// 设置年龄 内部指针拷贝
func (a *A) SetAge() {
    a.Age = 10
}

// 设置年级 访问私有字段
func (a *A) SetGrade() {
    a.grade = "g3"
}

// 为 TZ 类型的a 绑定一个Print方法
func (a *TZ) Print() {
    fmt.Println("TZ")
}

// 普通测试
func test1() {
    a := A{}
    a.Print() // A
}

// 测试值拷贝
func test2() {
    a := A{}
    a.SetName()
    fmt.Println(a.Name) // "" // 输出零值, 空字符串 , 说明:此处值拷贝,未修改成功。
}

// 测试指针拷贝
func test3() {
    a := A{}
    a.SetAge()
    fmt.Println(a.Age) // 10 // 此处修改成功
}

// 测试类型别名绑定的方法 method value
func test4() {
    var a TZ
    a.Print() // TZ
}

// 测试 method expression 的写法
func test5() {
    var a TZ
    (*TZ).Print(&a) // TZ // 这种方法
}

// 测试私有字段的访问权限
func test6() {
    a := A{}
    (*A).SetGrade(&a) // 通过 method expression 的写法 同 a.SetGrade()
    fmt.Println(a.grade) // "g3"
}
C++面向对象程序设计大作业:魔兽世界(三):开战 C++面向对象程序设计大作业:魔兽世界(三):开战问题描述问题分析代码 问题描述 问题来自于北京大学郭炜老师的C++慕课的大作业 魔兽世界的西面是红魔军的司令部,东面是蓝魔军的司令部。两个司令部之间是依次排列的若干城市,城市从西向东依次编号为1,2,3 … N ( N <= 20)。红魔军的司令部算作编号为0的城市,蓝魔军的司令部算作编号为N+1的城市。司令部有生命元,用于制造武士。 两军的司令部都会制造武士。武士一共有dragon 、ninja、iceman、lion、wolf 五种。每种武士都有 阅读详情

相关推荐

LabVIEW事件结构避坑指南:为什么你的‘确定按钮’事件有时会失灵?

本文深入探讨了LabVIEW事件结构中'确定按钮'事件失灵的常见原因及解决方案。从事件队列机制到事件类型选择,详细分析了事件丢失的五大原因,包括事件处理耗时过长、事件类型选择不当等,并提供了优化登录界面案例的实用建议。掌握这些技巧可显著提升LabVIEW用户界面的响应可靠性。

weixin_42548888的博客 356

GO语言method

方法就相当于类的行为,对应于固定的结构体package mainimport "fmt"type A struct{ Name string } type B struct{ Name string } func (a A)Print(){ fmt.Println("A") } func (b B)Print(){ fmt.Println("B") } func main()

hello_bravo_的博客 429

Altium Designer实战:手把手教你设计智能车竞赛疯狂电路组赛道(附封装库)

本文详细介绍了使用Altium Designer软件进行智能车竞赛“疯狂电路”组赛道设计的全流程实战指南。从理解比赛规则、搭建设计环境、创建专用元器件封装库,到电路布局、路径规划及设计输出验证,手把手教你高效完成符合计分标准的赛道图纸设计,并附上实用的封装库管理方法。

alice7model的博客 1324

go学习-method

初始化package main import ( "fmt" ) type A struct { Name string } type B struct { Name string } func main() { a := A{} a.print() } func (a A) print() { fmt.Println("print A") } 引用传递与值传递package...

coder_cll的博客 273

第7.1章:StarRocks性能调优——查询分析

第7.1章:StarRocks性能调优——查询分析

爱吃辣条的博客 6477

Apk脱壳圣战之---脱掉“梆梆加固”的保护壳

一、前言 现如今Android用户的安全意识不是很强,又有一些恶意开发者利用应用的名字吸引眼球,包装一个恶意锁机收费的应用,在用户被骗的安装应用之后,立马手机锁机,需要付费方可解锁。这样的恶意软件是非常让人痛恨的。所以本文就用一个案例来分析如何破解这类应用,获取解锁密码,让被骗的用户可以找回爽快! 二、分析软件锁机原理 本文用的是一款叫做:安卓性能激活.apk,关于样本apk文件后面会...

尼古拉斯.赵四的博客 5062

go语言基础 方法 method

方法:规定对象的行为的。对象的行为功能。func (r recver) 方法名(参数列表) (返回值类型){....}函数:一段独立的功能,可以被直接调用func 函数名(参数列表)(返回值类型){....}函数名(实际参数)r.方法名(实际参数)package main import "fmt" //1.定义一个结构体 type Person struct { name string ...

超级系博客 335

2024.6.15丨基于VFDB数据库的致病菌毒力因子注释实战指南

本文提供了一份基于VFDB数据库进行致病菌毒力因子本地化注释的实战指南。详细介绍了从环境准备、DIAMOND工具安装、VFDB数据库选择与构建,到核心比对操作及结果解读与过滤的全流程。重点阐述了本地化分析相较于在线工具在速度、稳定性和批量处理上的优势,旨在帮助微生物基因组研究人员高效、精准地识别致病菌的关键毒力因子。

weixin_29220405的博客 276

Go语言基础:method

我们在C语言中,struct中声明函数,而Go中则不能再struct中声明函数。而是采用另外一种形态存在,Go中叫method。method的概念method是附属在一个给定的类型上,语法和函数的声明语法几乎一样,只是再func后面增加了一个recevier(也就是method所依从的主体)method的语法格式func (r ReceiverType) funcName(parameters) (

遇见未来 4285

STM32驱动SPL06-001气压传感器:I2C通信与温度补偿实战

气压传感器在无人机定高、室内定位和气象监测中至关重要。SPL06-001凭借±0.06 hPa相对精度和I2C接口,成为STM32项目的理想选择。通过I2C总线读取原始数据,并利用出厂校准系数进行温度补偿和气压解算,可输出高精度气压值。本文详细解析SPL06-001的寄存器操作、校准系数拼接及补偿算法,并分享I2C上拉电阻、地址配置等避坑经验,帮助开发者快速实现气压测量与高度解算。

weixin_29188043的博客 342

Qt —— QWebEngineView加载谷歌离线地图(包含离线地图瓦片下载制作、附谷歌地图开发文档)

  关注 微信公众号搜索"Qt_io_"或"Qt开发者中心"了解更多关于Qt、C++开发知识.。 笔者 - jxd

1万+

八、Go语言—— method

1 method Go 中虽没有class,但依旧有method 通过显示说明receiver来实现与某个类型的组合 只能为同一个包中的类型定义方法 Receiver 可以是类型的值或者指针 不存在方法重载 可以使用值或指针来调用方法,编译器会自动完成转换 从某种意义上来说,方法是函数的语法糖,因为receiver其实就是 方法所接收的第1个参数(Method Value vs. Metho...

一角残叶的博客 452

【深度学习新浪潮】为什么OpenClaw这么吃token?

OpenClaw 高 Token 消耗的核心是 Agent 多轮思考、工具调用上下文累积,以及平台内置的模板/多模型协同开销;PD 分离在 OpenClaw 中可针对性解决长上下文 Prefill 阻塞、KV Cache 复用低效问题,是提升其推理效率的核心优化手段,主要落地在长上下文处理与生成阶段解耦、KV Cache 集中管理、动态资源调度三个方向。

专注:太空算力、AI infra、异构调度、大模型成本工程 421

GO语言学习笔记-方法篇 Study for Go ! Chapter five - Method

持续更新 Go 语言学习进度中 ...... 2023-03-14 GO语言学习笔记 系列部分???? 已完结!! 对于刚刚接触 golang 来说,经过这段时间的学习,对于 GO这门语言已经有了初步的认识。 博主接下来会继续学习 golang 的更多内容,持续更新中...... GO语言学习笔记-类型篇 Study for Go! Chapter one - Type GO语言学习笔记-表达式篇...

Mercury_cc的博客 157

霍尼韦尔SoftMaster使用说明

霍尼韦尔SoftMaster使用说明

复分析 阿尔福斯(Ahlfors) 第三版答案 英文

答案分为十章,有部分习题没有答案,全英文复分析阿尔福斯(Ahlfors) 第三版答案

go语言学习笔记-方法(method)

理解 go语言中的方法也是函数的一种,只不过在func和函数名之间增加了参数(类型接收器),接收器的类型可以是自定义的结构体或者非结构体类型,也可以是重定义的基本类型如int、string或指针类型,支持在方法内部访问该参数。   语法 func (param Type) methodName() { //code... } 下面我们用一个例子试一下,方法myBread...

Willing_wmh的博客 334

最新的sdio 4.0 spec 协议标准 带书签 高清完整PDF版

Part-E1-SDIO-Specification-Ver4.00-Final-120220.pdf:最新的sdio 4.0 spec 协议标准 带书签 高清完整PDF版,包括SDIO 接口的外设,SDIO 接口官方协议等。

GO语言学习笔记(九、方法 method)

方法method Go中虽没有class,但依旧有method 通过显示说明receiver来实现某个类型的组合 只能为同一个包中的类型定义方法 Receiver可以是类型的值或者指针 不存在方法重载 可以使用值或者指针来调用方法,编译器自动完成转换 从某种意义上说,方法是函数的语法糖,因为receiver其实就是方法所接收的第一个参数(Method Value vs. Method...

分享AI、区块链技术及应用,未来已来 210

精雕软件(JDpaint) 5.5 绿色版

精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版

Go语言学习笔记(八)------结构(struct)与方法(method)

一、结构体定义 1.Go 通过类型别名(alias types)和结构体的形式支持用户自定义类型,或者叫定制类型。结构体也是值类型,因此可以通过 new 函数来创建。组成结构体类型的那些数据称为字段(fields)。每个字段都有一个类型和一个名字;在一个结构体中,字段名字必须是唯一的。结构体定义的一般方式如下: type identifier struct { field1 type1 fi...

Rcvisual的博客 687

Go语言学习笔记

文章目录前言一、Go语言特点二、平台与架构三、编辑器、集成开发环境与其它工具四、基本结构和基本数据类型1.文件名、关键字与标识符2.Go 程序的基本结构和要素(1)包的概念、导入与可见性(2)函数 前言 参考文档: 《The Way to Go》 《Go 入门指南》 一、Go语言特点 ①安全机制: Go 语言是一门类型安全和内存安全的编程语言。虽然 Go 语言中仍有指针的存在,但并不允许进行指针运算。 ②平台支持: Go 语言对于网络通信、并发和并行编程有极佳支持,从而更好地利用大量的分布式和多核的计算机

浅若清风cyf的博客 1996

Go语言学习笔记(三)

Go语言学习笔记

一起交流,一起进步 1421

Go 语言学习之 method

method 和函数类似,只是在函数名字前面多了一个参数,这个参数把这个 method 绑定到这个参数对应的类型上。函数名字前面多的这个参数,我们称之为 method 的接收者,接收者名字最好能够选择简短且在整个 method 中名称始终保持一致的名字。通常的做法是取类型名字的首字母作为接收者名字。因为 method 和成员变量的字段同属于一个命名空间,所以在 struct 类型中成员变量的字段名不能和 method 名字相同。否则会报编译错误。

As_wind_的博客 376

go 类型 变量 同名_Go 语言学习之 method

01概念method 和函数类似,只是在函数名字前面多了一个参数,这个参数把这个 method 绑定到这个参数对应的类型上。函数名字前面多的这个参数,我们称之为 method 的接收者,接收者名字最好能够选择简短且在整个 method 中名称始终保持一致的名字。通常的做法是取类型名字的首字母作为接收者名字。因为 method 和成员变量的字段同属于一个命名空间,所以在 struct 类型...

weixin_36036925的博客 224

GO语言学习系列九——GO的结构(struct)与方法(method)

转载:作者:checklin 链接:https://www.jianshu.com/p/863c270f8328 说明:前面两个输出已经介绍过,我们重点来说下调用t.Add()以及输出 我们在上面可以看出,新增了一个变种函数(其实是方法),(t *T)这就是给这个结构体绑定函数,然后在结构体中就可以直接调用Add这个方法,GO就是以这种形式来实现面像对象的思想 结构(struct) 由于在...

Flyer的后花园 675

6.方法(go语言学习笔记)

6.方法(go语言学习笔记) 目录 定义 匿名字段 方法集 表达式 1. 定义 方法是与对象实例绑定的特殊函数。 方法是面向对象编程的基本概念,用于维护和展示对象的自身状态。对象是内敛的,每个实例对象都有各自不同的独立特征,以属性和方法来暴露对外通信接口。 普通函数则专注于算法流程,通过接收参数来完成特定逻辑运算,并返回最终结果。 换句话说,方法是有关联状态的,而函数通常没有。 方法和函数定义的语法区别在于前者有前置实例接收参数,编译器以此确定方法所属类型。在某些语言中,尽管没有显示定义,但会在调

努力努力再努力L 167

Go语言学习笔记(一)------目录

做区块链项目,发现自己的Go基础还是比较差,一些基本的东西还是了解不多,所以我想重新过一下go语言,这个系列博客就是为了记录一下自己的学习路径,同时方便自己回顾,在此感谢大家的翻译《the way to go》和无闻大大。 笔记目录 Go语言学习笔记(一)------目录 Go语言学习笔记(二)------Go的基本结构和要素 Go语言学习笔记(三)------控制结构 Go语言学习笔记...

Rcvisual的博客 791

go语言学习(第六章,方法)(go 语言学习笔记)

6.1 定义 方法是与对象实例绑定的特殊函数。 方法是面对对象编程的基本概念,用于维护和展示对象的自身状态。对象是内敛的,每个实例都有各自不同的独立特征,以属性和方法来暴露对外通信接口。普通函数则专注于算法流程,通过接收参数来完成特定逻辑运算,并返回最终结果。换句话说,方法是有关联状态的,而函数通常没有。 方法和函数定义语法区别的在于前者有前置实例接收参数(receiver),编译器以此确定方法所...

luslin1711的博客 1227

Golang语言学习从入门到实战----结构体以及内存分布

1.Golang语言面向对象编程说明 Golang也支持面向对象编程(OOP),但是和传统的面向对象编程有区别,并不是纯粹的面向对象语言。所以我们说Golang支持面向对象编程特性是比较准确的。 Golang没有类(class),Go语言的结构体(struct)和其它编程语言的类(class)有同等的地位,你可以理解Golang是基于struct来实现OOP特性的。 Golang面向对象编程非常...

普通Gopher 1156
上一篇: Go语言学习笔记 --- struct
下一篇: 考研英语 - word-list-35
Wang's Blog
博客等级 码龄12年 7438粉丝 2422原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Wang's Blog

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值