• GO基础之函数


    一、Go语言函数的格式

    函数构成了代码执行的逻辑结构,在Go语言中,函数的基本组成为:关键字 func、函数名、参数列表、返回值、函数体和返回语句,每一个程序都包含很多的函数,函数是基本的代码块。

    函数的要素:

    • 函数名:需要调用的函数名。
    • 参数列表:参数变量以逗号分隔,尾部无须以分号结尾。
    • 返回值变量列表:多个返回值使用逗号分隔。
    // 没有返回值的函数
    func log(message string) {
    }
    
    // 有一个返回值的函数
    func add(a , b int) int {
        return var1
    }
    // 有多个返回值的函数
    func power(name string) (int, bool) {
        return  var1,var2
    }
    
    // 给返回值 命名
    func add(a, b int) (c int) {
        c = a + b
        return c
    }

    多返回值函数的使用

    func main() {
        a := 0
        b := 0
        a, b = addAndMultiply(10, 20)
        fmt.Println("a=", a)
        fmt.Println("b=", b)
    }
    func addAndMultiply(a, b int) (int, int) {
        return a + b, a * b
    }

    二、函数作为参数

    package main
    
    import "fmt"
    import "strings"
    
    func main() {
        str := strToCase("ABDCFSDFE", processLetter)
        fmt.Println(str)
    }
    
    //将函数作为参数
    func strToCase(str string, myfunc func(string) string) string {
        return myfunc(str)
    }
    
    //字符串奇偶交替
    func processLetter(str string) (result string) {
        for i, value := range str {
            if i%2 == 0 {
                result += strings.ToUpper(string(value))
            } else {
                result += strings.ToLower(string(value))
            }
        }
        return result
    }

    使用 type自定义类型 

    package main
    
    import "fmt"
    import "strings"
    
    func main() {
        str := strToCase("ABDCFSDFE", processLetter)
        fmt.Println(str)
    }
    
    //将函数作为参数(使用type定义的参数类型)
    func strToCase(str string, myfunc processLetterFunc) string {
        return myfunc(str)
    }
    
    //使用type 为processLetter() 函数定义类型
    type processLetterFunc func(string) string
    
    //字符串奇偶交替
    func processLetter(str string) (result string) {
        for i, value := range str {
            if i%2 == 0 {
                result += strings.ToUpper(string(value))
            } else {
                result += strings.ToLower(string(value))
            }
        }
        return result
    }

    三、匿名函数

    匿名函数的格式与使用

    package main
    
    import "fmt"
    import "strings"
    
    func main() {
        //创建匿名函数并直接使用
        func(str string) {
            fmt.Println("str=", str)
        }("hello")
        //将匿名函数赋值给一个变量
        fun := func(str string) {
            fmt.Println("str=", str)
        }
        fun("word")
    
        //将匿名函数赋值给一个变量(有返回值)
        rFun := func(str string) string {
            return strings.ToUpper(str)
        }
        result := rFun("Hello word")
        fmt.Println("result=", result)
    }

     匿名函数作为回调函数的使用

    package main
    
    import "fmt"
    import "math"
    
    func main() {
        arr := []float64{1, 2, 3, 4, 5}
    
        //匿名函数的使用进行平方根的运算
        result := filterSlice(arr, func(str float64) string {
            str = math.Sqrt(str)
            return fmt.Sprintf("%.2f", str)
        })
        fmt.Println("result=", result)
    }
    
    type fs func(float64) string
    
    //遍历切片,对每个数据进行处理
    func filterSlice(arr []float64, f fs) []string {
        var result []string
        for _, value := range arr {
            result = append(result, f(value))
        }
        return result
    }

    二、变量的作用域

    1、局部变量与全局变量同名时,局部变量优先

    //全局变量
    var num int = 100
    var num2 int = 200
    
    func main() {
        num, num2 := 1, 2
        fmt.Println("num=", num)  // num=1
        fmt.Println("num2=", num2)// num2=2
    }
  • 相关阅读:
    (转)vim重复命令
    (转)Linux 目录结构
    (转)Linux 文件权限
    (转)Linux查看用户及其权限管理
    linux banner命令
    redmine和svn server的部署
    OpenCV学习 7:图像形态学:腐蚀、膨胀
    OpenCV学习 6:平滑滤波器 cvSmooth()——2
    《将博客搬至CSDN》
    OpenCV学习 5:关于平滑滤波器 cvSmooth()函数
  • 原文地址:https://www.cnblogs.com/jalja/p/11768868.html
Copyright © 2020-2023  润新知