• golang之指针


    先上代码

    package main
    
    import "fmt"
    
    type myInt int
    //匿名函数
    //值的接收
    //指针的接收
    //*myint表示myInt的指针类型
    // *i表示指针i,指向i的值
    func (i *myInt) add(another int) myInt {
        *i = *i + myInt(another)
        return *i
    }
    //i1与i是两个变量,传递值
    func main() {
        i1 := myInt(1)
        i2 := i1.add(2)
        fmt.Println(i1,i2)
    
    }

    值方法,指针方法遵循了如下规则:

    接受者变量代表的值实际上是源值的复制品。如果这个值不是指针类型,在值方法中就没有途径去改变源值。

    而指针值与其复制品指向的是同一个值,所以在指针方法中就存在了改变源值的途径。

    如果接受者类型是引用类型或者它的别名类型,即使是值方法,也可以改变源值

    -------------

    对于某个非指针的数据类型,与它关联的方法的集合中只包含它的值方法。而对于它的指针类型,其方法集合中只包含它的值方法也包含指针方法。

    在非指针数据类型的值上,也是能够调用其指针方法的。

    这是因为GO在内部做了自动转换。

    例如add方法是指针方法,那么表达式i1.add(2)会被自动转换为(&i1).add(2)

    第二条规则对于编写接口类型的实现类型来说很重要。 

  • 相关阅读:
    C# 利用DataTable批处理数据导入数据库
    人员基础信息一体化采集系统建设方案
    定时调用WebService方法同步数据
    进程间通信
    信号
    Linux进程基础
    来自硬件男的《信号与系统》整理笔记
    shell脚本编程(ubantu)
    Linux系统c语言开发环境
    Linux系统用户管理及VIM配置
  • 原文地址:https://www.cnblogs.com/pyyu/p/8192402.html
Copyright © 2020-2023  润新知