【Gopher 学个函数】边学边练,简单为 Go 上个分

⛳️ 实战场景

今天我们要完成的核心内容是 Go 函数的学习,Go 中支持普通函数,匿名函数和闭包函数,对于学过 Python 的同学来说,都不是新鲜概念。

首先接触的依旧是普通函数的使用,在 Go 中,函数的基本组成有 func 关键字,函数名,参数列表,函数体,返回值几个部分。

到语法格式的转换如下:

[En]

The conversion to the syntax format is as follows:

func 函数名(形参列表)(返回值类型){
    函数体
}

从语法格式尚,可以看出一个与 Python 比较大的差异,就是形参列表后跟了返回值类型列表,当然该值非必须,毕竟有些场景下的函数是不需要返回值的。

接下来我们就编写一个简单的函数,其实现的需求是:传入一个名称 name,返回格式化的语句,代码如下:

package main

import "fmt"

func format(name string) string {

    var ret string

    ret = fmt.Sprintf("传入的参数值是,%s", name)
    return ret
}

func main() {
    ret := format("橡皮擦")
    fmt.Println(ret)
}

还是要记住第一篇博客我们就涉及的知识点,Go 语言最少有 1 个 main() 函数,而且还要注意 main() 函数无参数和返回值。

如果希望函数具有多个返回值,则只需在声明函数时初始化多个返回类型。

[En]

If you want the function to have multiple return values, you only need to initialize multiple return types when the function is declared.

package main

import "fmt"

func format(name string) (string, int) {

    var ret string

    ret = fmt.Sprintf("传入的参数值是,%s", name)
    return ret, 18
}

func main() {
    ret, age := format("橡皮擦")
    fmt.Println(ret)
    fmt.Println(age)
}

⛳️ 其它实践

在 Go 中不支持重载,而且一个包不能有两个名字一样的函数,例如下述代码是错误的。

func format(name string) (string, int) {

    var ret string

    ret = fmt.Sprintf("传入的参数值是,%s", name)
    return ret, 18
}

func format() {

    fmt.Print("重载函数")
}

Go 的返回值,可以不指定内容,即下述代码:

package main

import "fmt"

func add(a, b int) (c int) {
    c = a + b
    return
}

func main() {
    c := add(1, 2)
    fmt.Println(c)

}

上述代码的写法就非常有趣,在函数首行声明时,直接指定了返回变量很返回值类型,使用 return 语句即可直接返回对应值,多个返回值也可以使用该写法。

package main

import "fmt"

func add(a, b int) (c, d int) {
    c = a + b
    d = a
    return
}

func main() {
    c, _ := add(1, 2)
    fmt.Println(c)

}

以上代码展示了多个变量返回,并且使用标识符 _ 忽略了第二个返回值。

由于函数也是一种类型,因此也可以将函数赋给任何变量,如以下代码所示:

[En]

Because a function is also a type, a function can also be assigned to any variable, as shown in the following code:

package main

import "fmt"

func add(a, b int) int {

    return a + b
}

func main() {
    c := add // 函数赋值给变量

    sum := c(1, 2)
    fmt.Println(sum)
}

⛳️ Go 匿名函数

在 Go 语言中,匿名函数是由一个不带函数名的函数声明和函数体组成,其语法格式如下所示:

func (参数列表)(返回参数列表){
    函数体
}

从语法格式中还可以发现,只有函数名缺失。

[En]

It can also be found from the syntax format that only the function name is missing.

接下来,我们有两种做法,一种是在声明匿名函数后直接使用它,另一种是将匿名函数赋给变量。

[En]

Next, we have two practices, one is to use it directly after the anonymous function is declared, and the other is to assign the anonymous function to the variable.

匿名函数直接使用

package main

import "fmt"

func main() {
    func(a, b int) {
        fmt.Println("匿名函数", a, b)
    }(1, 2)
}

需要注意的是,如果直接使用匿名函数,则它们将在其他函数中调用,并且不能作为单独的代码段存在。

[En]

It is important to note that if anonymous functions are used directly, they are called within other functions, and they cannot exist as a separate piece of code.

匿名函数赋值给变量 匿名函数声明完毕,可以将其赋值给任意变量,后续该变量等同于该函数。

package main

import "fmt"

func main() {
    add := func(a, b int) int {
        return a + b
    }

    ret := add(1, 2)
    fmt.Print("匿名函数的使用,返回值是", ret)
}

📢📢📢📢📢📢 💗 你正在阅读 【梦想橡皮擦】 的博客 👍 阅读完毕,可以点点小手赞一下 🌻 发现错误,直接评论区中指正吧 📆 橡皮擦的第 篇原创博客

Original: https://blog.51cto.com/cnca/5581567
Author: 梦想橡皮擦
Title: 【Gopher 学个函数】边学边练,简单为 Go 上个分

原创文章受到原创版权保护。转载请注明出处:https://www.johngo689.com/500713/

转载文章受原作者版权保护。转载请注明原作者出处!

(0)

大家都在看

亲爱的 Coder【最近整理,可免费获取】👉 最新必读书单  | 👏 面试题下载  | 🌎 免费的AI知识星球