zoukankan      html  css  js  c++  java
  • [GO]结构体类型添加方法

    package main
    
    import "fmt"
    
    type Person struct {
        name string
        sex byte
        age int
    }
    //带有接收者的函数叫方法
    func (tmp Person) PrintInfo()  {
        fmt.Println("person = ", tmp)
    }
    
    func (tmp *Person) SetInfo(n string, s byte, a int)  {
        tmp.name = n
        tmp.sex = s
        tmp.age = a
        fmt.Println("set info = ", *tmp)
    }
    
    func main() {
        p := Person{"baylor", 'm', 18}
        p.PrintInfo()
        var s Person
        (&s).SetInfo("mike", 'f', 18)
        s.PrintInfo()
    }

    执行结果

    person =  {baylor 109 18}
    set info =  {mike 102 18}
    person =  {mike 102 18}

     这里不太好懂,记 一下我个人的理解,对于这种

    func (tmp *Person) SetInfo(n string, s byte, a int)

    我觉得相当于为结构体person绑定了一个setinfo或者printinfo的方法,如果有变量做了person的初始化,那么这个变量就有这些函数的属性

    比如p为结构体person的初始化,那么就可以执行p.printinfo的函数,因为结构体类似于数组如果需要变更里面的元素需要使用地址进行引用

    所以s初始化的方式才可以进行元素的变更

    其实在GO语言中,可以为任何自定义类型(包括内置类型,但不包括指针类型)添加相应的方法

    func (receiver receivertype) funcname(parameters) results

    如果有两个方法是同名,只要接收者的类型不一样,那么GO语言也就认为这两个是不同的方法

    其次就是receivertype本身不可以是指针类型

  • 相关阅读:
    网络初级篇之STP(BPDU详解与STP故障恢复)
    网络初级篇之STP(实验验证)
    3-1 查看帮助,命令历史与快捷键
    2-1 bash基本特性
    2-0 虚拟机与Linux系统安装
    0.操作系统的获取与安装
    1.计算机基础
    Linux下打包、压缩和解压
    JAVA基本数据类型转换的注意事项
    EditPlus代码自动完成的设置
  • 原文地址:https://www.cnblogs.com/baylorqu/p/9631804.html
Copyright © 2011-2022 走看看