美文网首页
Go语言学习之——函数

Go语言学习之——函数

作者: 星空_ad64 | 来源:发表于2018-04-10 20:25 被阅读0次

1、基础类型

package main
​
import "fmt"
​
//名在前,类型在后,同类型可以:a,b int
func eval( a,b int, op string ) int{
    switch op{
    case "+":
        return a+b
    case "-":
        return a-b
    case "*":
        return a*b
    case "/":
        return a/b
    default:
        panic("unsupported operation: " + op)
    }
}
​
func main() {
    fmt.Println( eval(3,5,"*") )
}

2、可以返回多个值

package main
​
import "fmt"
​
//带余除法:13 / 4 = 3...1
func div( a,b int ) ( int, int ){
    return a/b, a%b
}
​
func main() {
    fmt.Println( div(13,4) )
}
一般多返回值用来返回错误
package main
​
import "fmt"
​
//返回了结果和error
func eval( a,b int, op string ) (int, error){
    switch op{
    case "+":
        return a+b, nil
    case "-":
        return a-b, nil
    case "*":
        return a*b, nil
    case "/":
        q, _ := div(a,b)
        return q, nil
    default:
        return 0, fmt.Errorf("unsupported operation: " + op)
    }
}
​
func div( a,b int ) ( q,r int ){
    return a/b, a%b
}
​
func main() {
    fmt.Println( eval(13,2, "=") ) // output: 0 unsupported operation: =
    if result, err := eval(13,4,"x" ); err != nil{
        fmt.Println("Error:", err )
    }else{
        fmt.Println(result)
    } // output: Error: unsupported operation: x
    fmt.Println( eval(13,2, "/") ) // output: 6 <nil>
}

3、可以给返回值取名字,一般用于简单的函数

package main
​
import "fmt"
​
//可以给返回值取名字
func div( a,b int ) ( q,r int ){
    return a/b, a%b
}
​
func main() {
    q, r := div(13,4) //因为函数返回值有名字,那么编译器自动生成名字时就会生成和函数返回值一样的名字,虽然不知道快捷键是啥。。。
    fmt.Println(q, r)
}

4、多个返回值时,如果只想接收一个返回值,另外一个返回值不用,可以使用_

package main
​
import "fmt"
​
//名在前,类型在后,同类型可以:a,b int
func eval( a,b int, op string ) int{
    switch op{
    case "+":
        return a+b
    case "-":
        return a-b
    case "*":
        return a*b
    case "/":
        q, _ := div(a,b) //这里不可以写q, r := div(a,b),因为定义r却不使用是不允许的
        return q
    default:
        panic("unsupported operation: " + op)
    }
}
​
//带余除法:13 / 4 = 3...1
//可以给返回值取名字
func div( a,b int ) ( q,r int ){
    return a/b, a%b
}
​
func main() {
    fmt.Println( eval(13,2, "/") )
}

5、go语言函数式编程,函数可以作为参数

ackage main
​
import (
    "fmt"
    "reflect"
    "runtime"
    "math"
)
​
func apply( op func( int, int) int, a,b int) int {
    p := reflect.ValueOf(op).Pointer()
    opName := runtime.FuncForPC(p).Name() //获得函数名
    fmt.Printf("Calling function %s with args " + "(%d,%d)\n", opName, a, b ) //打印函数名和参数
    return op( a, b )
}
​
func pow( a,b int) int {
    return int(math.Pow( float64(a), float64(b) ))
}
​
func main() {
    fmt.Println( apply(pow, 3,4) ) // output: Calling function main.pow with args (3,4)   81
}

6、匿名函数

package main
​
import (
    "fmt"
    "reflect"
    "runtime"
    "math"
)
​
func apply( op func( int, int) int, a,b int) int {
    p := reflect.ValueOf(op).Pointer()
    opName := runtime.FuncForPC(p).Name() //获得函数名
    fmt.Printf("Calling function %s with args " + "(%d,%d)\n", opName, a, b ) //打印函数名和参数
    return op( a, b )
}
​
func main() {
    // apply第一个参数可以使用匿名函数
    fmt.Println( apply( func(a,b int) int{
        return int( math.Pow( float64(a), float64(b) ) )
    }, 3,4) ) // output: Calling function main.main.func1 with args (3,4)  81
}

7、可变参数列表

package main

import "fmt"

func sum( numbers ...int ) int {
    s := 0
    for i := range numbers {
        s += numbers[i]
    }
    return s
}

func main() {
    fmt.Println( sum( 1,2,3,4,5 ) )
}

相关文章

  • 11.***函数***

    Go语言基础之函数 Golang 函数是组织好的、可重复使用的、用于执行指定任务的代码块。本文介绍了Go语言中函数...

  • Go语言学习之——函数

    1、基础类型 2、可以返回多个值 3、可以给返回值取名字,一般用于简单的函数 4、多个返回值时,如果只想接收一个返...

  • Go 语言学习之函数

    山不在高,有仙则名水不在深,有龙则灵 函数 函数可以说是所有程序的核心,不同的语言之间,函数的定义也不尽相同,大同...

  • (四)go语言函数&参数传递

    go语言函数 基本语法 例子 go语言参数传递

  • Go语言探索 - 7(原创)

    Go语言基础系列博客用到的所有示例代码 在 上一篇文章主要学习了Go语言的函数定义、值传递和引用传递以及闭包函数。...

  • go 零散笔记(未整理)

    go 学习零散笔记 Go语言程序员推荐使用 驼峰式 命名 函数(func) 一个函数的声明由func关键字、函数名...

  • 三、Go的函数

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

  • golang内存逃逸

    一篇很好的博客: Go 语言机制之栈与指针 Go 语言机制之逃逸分析 Go 语言机制之内存剖析 Go 语言机制之数...

  • Go 语言学习技巧和编程思维

    Go 语言学习技巧和编程思维 一、了解 Go 语言 了解 Go 语言背景 学习 Go 语言,首先要了解 Go 语言...

  • Go语言中的函数 为什么是一等公民

    关键点 Go语言中,支持: 普通函数 匿名函数 闭包 在Go语言中,函数属于一等公民(first-class)? ...

网友评论

      本文标题:Go语言学习之——函数

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