Go语言中函数和方法的区别(21.8.10)

方法和函数的区别

什么是方法?如何使用?

方法:作用在指定的数据类型上,即和指定的数据类型绑定,因此自定义类型都可以有方法,不只是struct

方法的使用:

// 定义一个结构体A
type A struct{
    Num int
}
​
// 定义一个属于A的方法,该方法只能够被A调用
func (a A) test(){
    fmt.Println(a.Num)
}
复制代码
方法调用过程和传参机制

image.png

方法和函数传参的区别的区别:

相同点: 在通过一个变量去调用方法时,其调用机制和函数一样

不同点: 变量调用方法时,该变量本身也会作为一个参数传递到方法(如果变量是值类型,则进行拷贝,如果是引用类型,则进行地址拷贝)

方法的注意事项
  1. 结构体类型如果是值类型,在方法调用中,遵守值传递机制,是值拷贝的方式;

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

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

    type integer int
    ​
    func (i integer) print(){
        fmt.Println("i=",i)
    }
    ​
    func main(){
        var i integer = 10
        i.print()
    }
    复制代码
  4. 方法的访问控制范围的规则和函数一样,方法名首字母小写,只能在本包访问,方法首字母大写,可以在本包和其他包访问

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

方法和函数的区别
  1. 调用方式不同

    函数的调用方式: 函数名(实参列表)

    方法的调用方式:变量 . 方法名(实参列表)

  2. 对于普通函数,接受者为值类型时,不能将指针类型的数据直接传递:值类型就只能传递值类型,指针类型就只能传递指针类型

  3. 对于方法,接收者伟值类型时,可以直接使用指针类型的变量调用方法,反过来也可以

© 版权声明
THE END
喜欢就支持一下吧
点赞0 分享