• Go---第六章:方法(小知识点笔记)


    1、方法声明:方法声明和函数声明类似,只是在函数名字前多加一个参数,如:(附加的参数p成为方法的接收者)(相当于C语言中的this和self?)

                  函数:func Distance(p, q Point) float64 { body }

                  方法:func (p Point) Distance(q Point) float64 { body }

    2、go中任意类型都可以绑定方法,如(slice):

                  type Path []Point

                  func (path Path) Distance() float64{

                    sum = 0.0

                    for i:= range path {

                       sum += path[i-1].Distance(path[i])

                    }

                  }

    3、指针接受者的方法:(主调函数会复制每一个实参变量,如果函数需要更新一个变量,或者如果一个实参太大需要避免复制整个实参,这是可以用指针来传递变量地址,这同样适用于更新接收者)

                  func (p *Point) ScaleBy(factor float64) {

                    p.X *= factor

                    p.Y *= factor

                  }

    ------习惯上,如果某一类型(如point)的任何一个方法使用指针接收者,那么所有的该类型的方法都应该使用指针接受者

    ------命名类型(如Point)与指向它们的指针(*Point)是唯一可以出现在接收者声明处的类型;本身是指针的类型,不能进行方法声明

    ------如果接收者p是Point类型变量,但是方法要求一个*Point接收者,可以简写p.ScaleBy(2),因为编译器会对变量进行&p的隐式转换(同样,对Point类型的方法也可以用指针调用,编译器会插入隐式的*操作符)

    ------不能对一个不能取地址的变量接收者(如Point{1,2})调用*Point方法,如Point{1,2}.ScaleBy(2) 会编译出错,无法获取临时变量的地址

    4、封装: Go语言控制变量的可见性,首字母大写的标识符是可以从包中导出的,而首字母没有大写的则不可导出。同样的机制可用于结构体内的字段和类型中的方法。

  • 相关阅读:
    操纵持久化对象
    面阵和线扫工业相机选型
    线扫描镜头简介及选型
    Halcon的anisotropic_diffusion()函数,用于对图像进行各向异性散射增强处理
    VB、C#等高级语言与三菱PLC(Q系列、L系列、FX系列、A系列)串口、以太网通讯的DLL及源代码
    Halcon学习笔记之支持向量机
    C#中使用byte[]数据,生成Bitmap(256色 灰度 BMP位图)源代码
    Halcon学习SVM
    利用MLP(多层感知器)创建一个新的OCR分级器
    Halcon中OCR的实现及关键函数解析
  • 原文地址:https://www.cnblogs.com/liushi-Oscar/p/8277021.html
Copyright © 2020-2023  润新知