• Go笔记-方法


    【方法的概念】
        在 Go 语言中,结构体就像是类的一种简化形式,那么面向对象程序员可能会问:类的方法在哪里呢?在 Go 中有一个概念,它和方法有着同样的名字,并且大体上意思相同:Go 方法是作用在接收者(receiver)上的一个函数,接收者是某种类型的变量。因此方法是一种特殊类型的函数
     
     
    【方法的特点】
        1- 接收者类型可以是(几乎)任何类型,不仅仅是结构体类型:任何类型都可以有方法,甚至可以是函数类型,可以是 int、bool、string 或数组的别名类型。但是接收者不能是一个接口类型,因为接口是一个抽象定义,但是方法却是具体实现;如果这样做会引发一个编译错误。
        2- 最后接收者不能是一个指针类型,但是它可以是任何其他允许类型的指针
        3- 一个类型加上它的方法等价于面向对象中的一个类
            备注:区别是在 Go 中,类型的代码和绑定在它上面的方法的代码可以不放置在一起,它们可以存在在不同的源文件,唯一的要求是:它们必须是同一个包的,这也是为什么不在int、float或者类似的类型定义方法了。
        4- 因为方法是函数,所以同样的,不允许方法重载,即对于一个类型只能有一个给定名称的方法。
        5- 别名类型不能有它原始类型上已经定义过的方法
     
     
    【定义方法的格式】
    func (recv receiver_type) methodName(parameter_list)(return_value_list){...}
    func (_ receiver_type) methodName(parameter_list)(return_value_list){...}
        说明:在方法名之前,func关键字之后的括号中指定receiver(接收类型);如果recv是receiver的实例,Method1是它的方法名,那么方法调用遵循传统的object.name选择器符号;如果recv是一个指针,Go会自动解除引用,不需要在手动*recv,直接使用recv.Method1;如果不需要recv的值可以用_代替recv;recv就像面向对象语言中的this或self
     
     
    【举例】
     1 package main
     2  
     3 type TwoInts struct{
     4     a int
     5     b int
     6 }
     7  
     8 func main(){
     9     two1 := new(TwoInts)
    10     two1.a = 10
    11     two1.b = 12
    12     func11 := two1.addThem()
    13     func12 := two1.addToParam(1)
    14  
    15     two2 := TwoInts{3,4}
    16     func21 := two2.addThem()
    17     func22 := two2.addToParam(1)
    18 }
    19  
    20 func(tn *TwoInts)addThem()int{
    21     return tn.a + tn.b
    22 }
    23  
    24 func(tn *TwoInts)addToParam(param int)int{
    25     return tn.a + tn.b +param
    26 }

    【学习参考处:https://github.com/Unknwon/the-way-to-go_ZH_CN/blob/master/eBook/directory.md

     
  • 相关阅读:
    mysql 视图使用
    mysql 5.7 Expression #1 of ORDER BY clause is not in GROUP BY clause and contains nonaggregated column ...报错
    mysql创建数据库指定字符集和校对规则
    grep 命令使用
    awk 命令使用
    if [ $# -ne 1 ] 作用
    shell 获取当前目录下的jar文件
    jar 命令使用
    unzip 命令指定解压路径
    Win10系列:JavaScript写入和读取文件
  • 原文地址:https://www.cnblogs.com/ymkfnuiwgij/p/7912311.html
Copyright © 2020-2023  润新知