🌞

Golang系列教程--函数

「函数」
函数是将能够完成一定的功能的语句的包装集合,供外部调用。

📜本文内容


🐵函数结构

包含函数名,参数和返回值三个部分,其中,参数及返回值可缺省

1
2
3
func 函数名( 参数1, 参数2, 参数3, ...) (返回值类型1, 返回值类型2, 返回值类型3){

}
🐒参数及返回值缺省
1
2
3
func HelloWorld(){
  fmt.Println("Hello World!")
}
🐒参数缺省
1
2
3
4
// 单返回值
func HelloWorld() string {
  return "Hello World!"
}
🐒返回值缺省
1
2
3
func HelloWorld(hello string) {
  fmt.Println(hello)
}
🐒多返回值
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
func HelloWorld() (string, bool){
  return "Hello World!", true
}

// 命名返回值
// user及age均被初始化为默认值
func HelloWorld() (user string, age int){
  user = "heihei"
  age = 10
  return
}
🐒多参数
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
// 参数个数确定
func Sum(num1,num2,num3 int) int{
  return num1 + num2 + num3
}


// 参数个数不确定,利用for range遍历参数
func Sum(nums ...int) int{
  sum := 0

  for _, value = range nums{
    sum += value
  }

  return sum
}
🐒参数为引用类型
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
package main

import "fmt"

func main() {
    var a,b,c int
    a = 1
    b = 2
    c = 3
    fmt.Println(Sum(&a,&b,&c))
}

//传入的参数为指针变量
func Sum(num1,num2,num3 *int) int{
  return *num1 + *num2 + *num3
}

🐵函数回调

函数回调就是函数作为其他函数的参数,在其他函数内调用执行。

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
package main

import "fmt"

func main() {
  ss := "golang"
  ss1 := "world"
  sayhello(ss, ss1, appenStr)
}

func appenStr(prefix, name, suffix string)  {
  fmt.Println(prefix, name , suffix)
}

func sayhello(name, suffix string, f func (string, string, string)) {
  f ("hello", name, suffix)
}
1
hello golang world

🐵匿名函数

📎匿名函数是不需要定义函数名称的函数实现方式,例如下面这个函数就是一个匿名函数

1
2
3
func(num1, num2 int) int{
  return num1 + num2
}

📎可以将匿名函数引用给其他变量,也可以把匿名函数设为其他函数的返回值

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
package main

import "fmt"

func main() {

    var a,b,c int
    a = 9
    b = 2
    c = 1
    f := Anonymous(a,b)
    fmt.Println(f(c))
}

func Anonymous(num1, num2 int) (func(int) int){
  r := func(num3 int) int{
    return (num1 + num2 - num3)
  }
  return r
}

以上程序完成 num1 + num2 - num3 = 9 + 2 -1 = 10

📎匿名函数的传参

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
package main

import "fmt"

func main() {

    ss := "hello world!"

    func(hello string){
        fmt.Println(hello)
    }(ss)
    // 后面的括号中的ss作为参数传到匿名函数中
}
1
hello world!

🐵闭包

闭包能够读取其他函数内部变量的函数。

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
package main

import "fmt"

func main() {

    ss := "world"

    hello(ss)
}

func hello(ss string)  {
  text := "hello" + " " + ss

  f := func () {
    fmt.Println(text)
  }

  f()
}
1
hello world
updatedupdated2019-12-162019-12-16