美文网首页
go语言中方法使用的注意事项和细节

go语言中方法使用的注意事项和细节

作者: 梁帆 | 来源:发表于2021-03-10 10:33 被阅读0次

1、结构体类型是值类型,在方法调用中,遵守值类型的传递机制,是值拷贝传递方式。

2、如果程序员希望在方法中,修改结构体的值,可以通过结构体指针的方式来处理。

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

给系统类型int添加方法myprint 用int对象a1执行方法myprint() 报错

报错表明不能给int、float32这种non-local type人为添加方法,否则无法执行。我们只需把int类型换成别名比如myint,系统就认为是自定义类型,那么这样就可以执行了,如下所示:

type myint int 定义myint的对象a1 正常输出

4、方法的调用范围控制的规则,和函数一样,方法名首字母小写,只能在本包访问;方法名首字母大写,可以在本包和其他包访问。

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

有示例如下:

给结构体定义String()方法

这里给Student结构体定义了一个String()方法,这会影响到println(结构体实例的输出)。此外,要介绍下Printf和Sprintf的区别:

Printf : 只可以打印出格式化的字符串,可以输出字符串类型的变量,不可以输出整形变量和整形。

Sprintf:用传入的格式化规则符将传入的变量格式化,(终端中不会有显示),返回为 格式化后的字符串。

下面我们执行以下代码:

main函数的代码

发现输出为:

输出

说明在执行fmt.Println(student)时,调用了我们自己定义的String()方法,故有了上面的输出。若我们将String()方法注释掉,如下图:

注释掉String()方法

发现输出为:

输出

这里因为我们注释掉了String(),故调用的是原来的fmt.Println()。

6、方法执行时编译器的优化

如下图所示,我们给Student结构体定义了一个edit()的方法,定义中调用它的对象是Student类型,因此main函数中,我们用的student.edit()。

示例1

输出如下:

输出1

毫无疑问,由于edit()方法是值传递,edit()方法内部给Student对象的age重新复制未能生效。而当我们对上面代码做如下修改后:

示例2

这里我们方法接收的对象是*Student,是一个指针,由此可推断这个引用传递的方法执行后可以让Student对象中的age变为40。而我们在main()函数中的调用依旧是student.edit(),此时还能输出我们想要的值吗?

输出2

答案是肯定的。其实这里,编译器在底层做了优化,按照最科学的写法,应该是需要这要调用的:

最科学的调用

因为edit()方法的调用对象是*Student,我们本应传入一个Student对象的指针即(&student)进去,但是由于编译器做了语法糖优化,不用传入指针变量也能被识别。同理,如果edit()方法传值,我们在main()函数中却用的指针调用,也是可以被识别的。只不过最终Student对象中的age值能否被修改,取决于edit()方法是传值还是传引用,而与你在main()函数中调用时传入的是何种参数无关。

相关文章

  • go语言中方法使用的注意事项和细节

    1、结构体类型是值类型,在方法调用中,遵守值类型的传递机制,是值拷贝传递方式。 2、如果程序员希望在方法中,修改结...

  • go语言中函数使用的注意事项和细节

    1、函数的形参列表可以是多个,返回值列表也可以是多个。 2、形参列表和返回值列表的数据类型可以是值类型和引用类型。...

  • Go语言-指针

    Go语言中的指针不同于C语言,Go语言的指针使用方法要简单很多。当然和C语言从指针定义到指针的使用都有很大的不同。...

  • golang测试

    go语言提供了对测试的支持。在go的标准库文档中的testing包页面,对go语言的测试方法有较为详细的使用说明,...

  • go语言的结构体的注意事项和使用细节

    1、结构体的所有字段在内存中是连续的。 2、结构体是用户单独定义的类型,和其他类型需要转换时需要有完全相同的字段(...

  • golang 初识

    这里主要对 go 语言的基本语法进行说明,并通过代码阐述其使用以及遇到的注意事项 1、变量:go 语言中有全局变量...

  • 漫画Go语言包使用的注意事项和细节

    赖思与甜甜,有趣有料有温度,技术学习有思路!Go提供了便利的包形式,项目合作开发过程中,包的使用有哪些使用细节及注...

  • 19年底36周:Go database/sql库-Go数据库操作

    一、简介 database/sql提供了Go访问和操作SQL数据库的方法。在Go语言中,使用sql.DB使用此类型...

  • go语言函数测试

    go语言测试方法 测试split 编写的测试函数 go 测试使用的命令

  • go 中的slice 合并

    go 中的切片合并即两个 slice 相加使用 go 语言内置的append 方法,我们比较常用的是 添加单个元素...

网友评论

      本文标题:go语言中方法使用的注意事项和细节

      本文链接:https://www.haomeiwen.com/subject/atvvqltx.html