方法使用的深度剖析(2)|学习笔记

简介: 快速学习方法使用的深度剖析(2)

开发者学堂课程【Go 语言核心编程 - 面向对象、文件、单元测试、反射、TCP 编程:方法使用的深度剖析(2)】学习笔记,与课程紧密联系,让用户快速学习知识。

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


方法使用的深度剖析(2)

 

1. Golang 中的方法作用在指定的数据类型上的(即:和指定的数据类型绑定),因此自定义类型都可以有方法,而不仅仅是 struct,比如 int float32 等都可以有方法

举例说明:

新建一个文件夹 methoddetails,新建文件 main.go,输入共用部分:

package main

import (

"fmt"

)

写入主函数 func main( ){}

现有一个自定义的 integerint 做了一个自定义,相当于 int 就是 integer 别名。为其绑定一个方法,输入 func(i integer) print()

输入 fmt.Print1n("i=",i)打印出他的值。定义一个 integer,比如此时个变量叫i integer给他一个值,例如是十,代码为(var integer= 10),然后用i来调用这个方法,也就是说 print 这个方法其实是作用integer 上的而 integer 就是 int 类型的,所以大家不要认为方法一定要与一个结构体绑定方法也可以是一个 int、float32 的这种自定义的类型。运行一下,输入 cd..,cd到methoddetails,然后 go run main.go发现这个时候输出 i=10与理论效果一致。而且还可以通过这个方法来修改文件,比如一个方法,可以改变i的值。可以利用指针的方式来变更地址,输入 func (i*integer)change(){

*i=*i+1},意思是*i取出来再重新进行赋值,相当于改变i本身值,而且因为是指针,因此出来的时候就可以更改。输入 i.change() 进行调用,这个时候进行地址拷贝,并不是值拷贝,所以change里面i的修改会直接影响到main函数中i的值也就是说这个时候i应该在10的基础上加。输入 fmt.Print1n("i=",i) 完成打印,这时会发现打印的是11。

核心代码:

type integer int

func (i integer) print(){

fmt.Print1n("i=",i)

}

func main() {

var i integer = 10

i.print()

i.change()

fmt.Println("i=",i)

}

2. 方法的访问范围控制的规则,和函数一样。方法名首字母小写,只能在本包访问,方法首字母大写,可以在本包和其它包访问。

不过多赘述,之前章节已进行过将讲解。例如如果方法 print 是小写的,那么他只能在该包中使用,不可以在其他包进行使用,而改为 Print 后,变成了公开方法,可以在其他包中完成使用。

3. 如果一个类型实现了 String() 这个方法,那么 fmt.Println 默认会调用这个变量的 String()进行输出

举例说明:

现有一个结构体叫 Student,学生里面有名字还有年龄,代码如下:type Student struct {Name string Age int}。假设给 Student 实现 String 方法,输入 func (stu*Student) String() string{},将 stu 与*student 完成绑定,直接将 stu 与*student 指针绑定,更改起来就会十分方便。输入 str :=fmt.sprintf("Name=[%v] Age=[%v]",stu.Name,stu.Age),将 student 的信息提取出来,其原理与 Java 中的too string 相似,注意通过 return str 将值返回。这个时候当我们去输出一个student 的信息时,它就会默认调用上述方法来进行。定义一个 student 的变量,stu :=Student{},给他进行赋值,代码为 Name"tom" Age : 20,输入fmt.Println(&stu) 完成调用并测试,由于是指针类型,注意不要将&忘记,如果不加&,不会对上述string方法进行调用,只会将定义的内容输出。执行后发现结果为Name=[tom] Age=[20],与理论结果一致。即如果实现了 *Student 类型的 String方法,就会自动调用。如果没有实现,输出结果为地址。

核心代码:

type Student struct {

Name string

Age int

}

func (stu Student string() string{

str :fmt.Sprintf("Name=[%v] Age=[%v]",stu.Name,stu.Age)

return str

}

Stu := Student{

Name:"tom",

Age: 20,

}

fmt.Print1n(&stu)

相关文章
|
6月前
|
存储 Java 程序员
|
6月前
|
存储 关系型数据库 MySQL
由浅入深:数据库编程概念与实战
由浅入深:数据库编程概念与实战
170 1
|
缓存 Java
认真阅读完这篇文章熟练掌握阿里巴巴规范创建Java线程池
认真阅读完这篇文章熟练掌握阿里巴巴规范创建Java线程池
800 0
|
1月前
|
存储 数据处理 开发者
深入浅出:Python编程基础与实战技巧
【9月更文挑战第32天】本文将引导读者从零开始,掌握Python编程语言的核心概念,并通过实际代码示例深入理解。我们将逐步探索变量、数据结构、控制流、函数、类和异常处理等基本知识,并结合实用案例,如数据处理、文件操作和网络请求,提升编程技能。无论您是初学者还是有一定经验的开发者,这篇文章都能帮助您巩固基础,拓展视野。
23 3
|
2月前
|
SQL 安全 PHP
深入浅出PHP编程:从基础到实战
在数字化时代的浪潮中,掌握PHP编程技能成为许多开发者的必修课。本文旨在通过浅显易懂的语言,带领读者走进PHP的世界,不仅介绍PHP的基础语法和核心概念,还将通过实际案例,展示如何将理论知识应用到项目开发中。无论你是编程新手还是希望深化PHP技能的开发者,这篇文章都将为你提供有价值的指导和灵感。让我们一起探索PHP的魅力,开启编程之旅吧!
57 0
|
5月前
|
SQL 存储 NoSQL
数据库原理速览:核心知识集萃与复习指南
数据库原理速览:核心知识集萃与复习指南
47 2
|
6月前
|
编译器 C++
【C++进阶(八)】C++继承深度剖析
【C++进阶(八)】C++继承深度剖析
|
机器学习/深度学习 人工智能 算法
这篇科普让你Get所有大模型的基础核心知识点
本文介绍了AI大模型的概念和发展历程。AI大模型是指具有1亿以上参数的机器学习模型,通过在大规模数据集上进行预训练,可以直接支撑各类应用。大模型的发展经历了从萌芽期到AI1.0时期,再到AI2.0时期的飞跃,目前最新发布的大模型参数已经达到了千亿甚至万亿级别。国内外的公司都在积极研发和应用大模型,如OpenAI、Google、Facebook、Microsoft等。国内也有百度、阿里巴巴、万维、商汤科技等公司发布了自己的大模型产品。大模型的建造离不开算力资源、算法人才、数据积累等核心要素。此外,文章还列举了一些与大模型相关的专业名词,如算法、模型参数、训练数据、Token等。
|
11月前
|
SQL Kubernetes Java
深度剖析FlinkX(纯钧)源码
深度剖析FlinkX(纯钧)源码
148 0
|
存储 缓存 前端开发
Web性能优化_知识点精讲
延迟和宽带 WebWorker 关键渲染路径 React 应用中的优化处理 利用React-Profiler提升应用性能 从 URL 输入到页面加载整过程分析 SPA 提速 SPA: SEO
162 0
Web性能优化_知识点精讲
下一篇
无影云桌面