• Golang 方法使用的注意事项和细节


    方法的声明(定义)

    1. furie (recevier type) methodName (参数列表) (返回值列表){
    2. 方法体
    3. return返回值
    4. }

    1)参数列表:表示方法输入

    2) recevier type:表示这个方法和type这个类型进行绑定,或者说该方法作用于type类型

    3) receiver type:type可以是结构体,也可以其它的自定义类型 type integer int

    4) receiver:就是type类型的一个变量(实例),比如:Person结构体的一个变量(实例)

    5)返回值列表:表示返回的值,可以多个

    6)方法主体:表示为了实现某一功能代码块

    7)return语句不是必须的。

     

    方法注意事项和细节讨论


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

    2)如果希望在方法中,修改结构体变量的值,可以通过结构体指针的方式来处理

    为了提高效率,通常方法和结构体的指针类型绑定

    1. type person struct {
    2. name string
    3. }
    4. func (p *person) Test() {
    5. fmt.Printf("%p\n", p)
    6. }
    7. func main() {
    8. var p person
    9. fmt.Printf("%p\n", &p)
    10. p.Test()
    11. }

     

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

    1. package main
    2. import "fmt"
    3. type integer int
    4. func (i *integer) Test() {
    5. fmt.Println("i的地址为:", i, "i的值为:", *i)
    6. *i = 100
    7. }
    8. func main() {
    9. a := 9
    10. b := integer(a)
    11. fmt.Println("b的地址为:", &b, "b的值为:", b)
    12. b.Test()
    13. fmt.Println("修改过后的值为:",b)
    14. }
    15. b的地址为: 0xc0000180a8 b的值为: 9
    16. i的地址为: 0xc0000180a8 i的值为: 9
    17. 修改过后的值为: 100

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

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

    如果实现了*person类型的String()方法,那么就会自动调用。 

    1. type person struct {
    2. name string
    3. age int
    4. }
    5. func (p *person) String() string {
    6. str := fmt.Sprintf("name=%v age=%v", p.name, p.age)
    7. return str
    8. }
    9. func main() {
    10. p := &person{
    11. name: "lucas",
    12. age: 29,
    13. }
    14. fmt.Println(p)
    15. }
    16. name=lucas age=29

     如果这里不是指针类型,而是值类型那么就不会调用

    1. package main
    2. import "fmt"
    3. type person struct {
    4. name string
    5. age int
    6. }
    7. func (p *person) String() string {
    8. str := fmt.Sprintf("name=%v age=%v", p.name, p.age)
    9. return str
    10. }
    11. func main() {
    12. p := person{
    13. name: "lucas",
    14. age: 29,
    15. }
    16. fmt.Println(p)
    17. }
    18. {lucas 29}
  • 相关阅读:
    【Python】-- 集合的常用方法
    Redis安装详解(单机安装,sentinel哨兵模式,Cluster模式)
    Clickhouse系列三:表引擎副本机制
    判断用户的当前的浏览器
    ubuntu22.04.1 新装后的常用设置
    全网唯一!Matlab王者荣耀配色包MHonor
    Github上遇到的一些问题
    专访句子互动CMO张佳:私域运营是一种更高效的用户触达渠道
    CI/CD docker compose 部署 humpback - single mode
    Unity 最新DOTS系列之《Baking与Baker的详解》
  • 原文地址:https://blog.csdn.net/qq_34556414/article/details/132751994