美文网首页
go函数小结

go函数小结

作者: 浑浑噩噩_邋邋遢遢 | 来源:发表于2017-07-06 10:49 被阅读0次
多返回值
package main

import "fmt"

// 定义多个返回时 用括号包裹  多个返回值
func swap(x, y string) (string, string)  {
    return y, x
}
func main() {
    a, b := swap("hello", "world")
    fmt.Println(a, b)
}

命名返回值

用在函数出错时返回一大堆数据,这样就不用一一返回数据了

package main

import "fmt"

func split(sum int) (x, y int) {
    x = sum / 10
    y = sum % 10
    // 因为在上面定义了返回值 x, y 所以在返回return时 不需要在写x y了
    // 如果不对x y赋值 那返回的是0 0
    return
}

func main() {
    //fmt.Println(split(17))
    s1, s2 := split(17)
    fmt.Println(s1, s2)
}

os.Exit(2) 括号里的值,将是shell里的返回码,这种退出,将会彻底退出go程序

可变参数
package main

import "fmt"

// 传入的参数个数是不固定的
func sum(args ...int) int {
    n :=0

    for i :=0; i<len(args); i++{
        n += args[i]
    }
    return n
}

func main() {
    fmt.Println(sum(1,2,4,5,6))
    s :=[]int{2,5,8,14}
    fmt.Println(sum(s...))
}
递归斐波那契数列
递归简单理解就是像剥洋葱那样,一层层剥到最里面那层,然后再由最里面那层向外,一层层的返回。递归是指在函数的定义中使用函数自身的方法。
package main

import "fmt"

func lib(n int) int{
    if n==1 || n ==2{
        return 1
    }
    s1 := lib(n-1)
    s2 := lib(n-2)
    fmt.Println("===>>>", s1, " ", s2, "     ", s1+s2)
    return s1+s2
}

func main() {
    fmt.Println(lib(10))
}
函数类型

首先要记住一句话,函数在go里面是一等公民
var f func() 定义一个为空的函数类型
比较两个函数是否一样,只比较参数和返回值.

package main

import "fmt"

func print() {      // 这里的函数 没有参数 也没有返回值, 为空的函数
    fmt.Println("hello go")
}
func print2() {
    fmt.Println("HELLO GO 222222")
}

func func_int(n int) int  {
    return n+1
}

// 同样  函数类型也可用于结构体
type fstruct struct {
    Func func()
}

func main() {
    var f func()        // 定义了一个空的函数类型
    f = print           // 由于print函数是空函数,与f类型一致 所以能直接赋值
    f()
    f = print2          // 函数类型还可以重复赋值
    f()

    // 因为函数是一等公民 所以在用到类型的地方 都可以引用函数类型
    var fslice []func()         // 函数类型的切片
    var fmap map[string]func()      // 函数类型的map

    // 函数类型的数组 这里的函数不是空函数 签名为int 返回值为int
    var flist [3]func(int) int
    flist[0] = func_int         // 在赋值的时候 也应该匹配相同类型的函数
    flist[0](10)                  // 这样就可以直接调用函数

}

相关文章

  • go函数小结

    多返回值 命名返回值 用在函数出错时返回一大堆数据,这样就不用一一返回数据了 os.Exit(2) 括号里的值,将...

  • 三、Go的函数

    三、Go的函数 Go语言最少有一个main()函数。 1、Go的函数定义: 2、函数参数 函数如果使用参数,该变量...

  • 第02天(函数、工程管理)_03

    11_函数类型.go 12_回调函数.go 13_匿名函数和闭包.go 14_闭包捕获外部变量的特点.go 15_...

  • Golang学习笔记-函数

    Go函数定义格式如下: 例如: Go可以很灵活的创建函数,并作为另外一个函数的实参: Go支持匿名函数,可作为闭包...

  • golang系列教程

    Go包管理 Go开发工具 Go Doc 文档 Go 数组 Go 切片 Go Map Go 类型 Go 函数方法 G...

  • 第03天(复合类型)_03

    13_数组做函数参数.go 14_数组指针做函数参数.go 15_切片的长度和容量.go 16_切片的创建.go ...

  • 初中英语动词搭配词组大总结,实用版建议收藏

    含go 的词组小结: If the doctor asks why,the computer goes throu...

  • 09-Go语言函数

    函数 Go语言函数格式func 函数名称(形参列表)(返回值列表){函数语句} Go语言函数的类型没有返回值没有形...

  • C 调用 Go 函数

    我们之前已经让 Go 调用 C 函数,但有些场景下需要 C 来调用Go函数。 Go 使用 export 关键字导出...

  • go语言之goroutine

    goroutine 当go 语句执行的时候,其中的go函数会被单独放到一个goroutine中,在这之后该go函数...

网友评论

      本文标题:go函数小结

      本文链接:https://www.haomeiwen.com/subject/edchhxtx.html