zoukankan      html  css  js  c++  java
  • 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

     
  • 相关阅读:
    POJ 1401 Factorial
    POJ 2407 Relatives(欧拉函数)
    POJ 1730 Perfect Pth Powers(唯一分解定理)
    POJ 2262 Goldbach's Conjecture(Eratosthenes筛法)
    POJ 2551 Ones
    POJ 1163 The Triangle
    POJ 3356 AGTC
    POJ 2192 Zipper
    POJ 1080 Human Gene Functions
    POJ 1159 Palindrome(最长公共子序列)
  • 原文地址:https://www.cnblogs.com/ymkfnuiwgij/p/7912311.html
Copyright © 2011-2022 走看看