zoukankan      html  css  js  c++  java
  • golang函数——可以为类型(包括内置数据类型)定义函数,类似类方法,同时支持多返回值

    不可或缺的函数,在Go中定义函数的方式如下:

    func (p myType ) funcName ( a, b int , c string ) ( r , s int ) {
        return
    }
    

    通过函数定义,我们可以看到Go中函数和其他语言中的共性和特性

    共性

    • 关键字——func
    • 方法名——funcName
    • 入参——— a,b int,b string
    • 返回值—— r,s int
    • 函数体—— {}

    特性

    Go中函数的特性是非常酷的,给我们带来不一样的编程体验。

    为特定类型定义函数,即为类型对象定义方法

    在Go中通过给函数标明所属类型,来给该类型定义方法,上面的 p myType 即表示给myType声明了一个方法, p myType 不是必须的。如果没有,则纯粹是一个函数,通过包名称访问。packageName.funcationName

    如:

    //定义新的类型double,主要目的是给float64类型扩充方法
    type double float64
    
    //判断a是否等于b
    func (a double) IsEqual(b double) bool {
        var r = a - b
        if r == 0.0 {
            return true
        } else if r < 0.0 {
            return r > -0.0001
        }
        return r < 0.0001
    }
    
    //判断a是否等于b
    func IsEqual(a, b float64) bool {
        var r = a - b
        if r == 0.0 {
            return true
        } else if r < 0.0 {
            return r > -0.0001
        }
        return r < 0.0001
    }
    
    func main() {
        var a double = 1.999999
        var b double = 1.9999998
        fmt.Println(a.IsEqual(b))
        fmt.Println(a.IsEqual(3))
        fmt.Println( IsEqual( (float64)(a), (float64)(b) ) )
    
    }
    

    上述示例为 float64 基本类型扩充了方法IsEqual,该方法主要是解决精度问题。 其方法调用方式为: a.IsEqual(double) ,如果不扩充方法,我们只能使用函数IsEqual(a, b float64)

    入参中,如果连续的参数类型一致,则可以省略连续多个参数的类型,只保留最后一个类型声明。

    func IsEqual(a, b float64) bool 这个方法就只保留了一个类型声明,此时入参a和b均是float64数据类型。 这样也是可以的: func IsEqual(a, b float64, accuracy int) bool

    变参:入参支持变参,即可接受不确定数量的同一类型的参数

    func Sum(args ...int) 参数args是的slice,其元素类型为int 。经常使用的fmt.Printf就是一个接受任意个数参数的函数 fmt.Printf(format string, args ...interface{})

    支持多返回值

    前面我们定义函数时返回值有两个r,s 。这是非常有用的,我在写C#代码时,常常为了从已有函数中获得更多的信息,需要修改函数签名,使用out ,ref 等方式去获得更多返回结果。

    而现在使用Go时则很简单,直接在返回值后面添加返回参数即可。

    摘自:http://www.cnblogs.com/howDo/archive/2013/06/04/GoLang-function.html

  • 相关阅读:
    关于Ubuntu中passwd、shadow、group等文件
    Android colors.xml 颜色列表
    【设计】线框图、原型和视觉稿的区别
    【设计】24款线框图相关工具及资源大放送
    【辅助工具】20款优秀的移动产品原型和线框图设计工具(二)
    【辅助工具】20款优秀的移动产品原型和线框图设计工具(一)
    GET RESTful With Python
    VRRP、Track与NQA联动配置举例(Master监视上行链路)
    静态路由、Track与NQA联动配置举例
    ROS-MikroTik-RouterOS-培训认证各种证书
  • 原文地址:https://www.cnblogs.com/bonelee/p/6858768.html
Copyright © 2011-2022 走看看