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

举报
Nick Qiu 发表于 2020/10/23 12:27:46 2020/10/23
【摘要】 go语言函数基本语法// func funcationname(a, b int,op string) int 例子package mainimport ( "fmt" "math" "reflect" "runtime")//函数声明func add(a, b int ) int { return a+b}//有多个返回值的函数func div(a ,b...

go语言函数

基本语法

//  func funcationname(a, b int,op string) int

例子

package mainimport (    "fmt"
    "math"
    "reflect"
    "runtime")//函数声明func add(a, b int ) int  {    return a+b
}//有多个返回值的函数func div(a ,b int ) (int, int ) {    return a/b, a %b
}//有多个返回值的函数,返回值取名func div1(a ,b int ) (q,r  int ) {
    q = a/b
    r = a % b    return}//多返回值,错误处理func eval(a, b int ,op string) (int,error) {    switch op {    case "+":        return a+b, nil
    case "-":        return a-b, nil
    default:        return 0, fmt.Errorf(            "unsupported operation:%s", op)
    }
}//使用函数作为参数func apply(op func(int ,int )int , a, b int ) int  {
    p := reflect.ValueOf(op).Pointer()
    opName := runtime.FuncForPC(p).Name()
    fmt.Printf("Calling funcation %s with args (%d,%d)",opName,a,b)    return op(a,b)
}func pow(a,b int )  int  {    return int(math.Pow(float64(a),float64(b)))
}//可变参数func sum(numbers ... int )  int{
    s := 0
    for i := range numbers{
        s += numbers[i]
    }    return s
}func main()  {
    fmt.Println(add(1,2))
    fmt.Println(div(13,3))
    q, r := div1(15, 4)
    fmt.Println(q,r)    //该用法可以忽略第二个r的返回值
    //q, _ := div1(15, 4)

    if result, err := eval(3, 4, "+"); err!=nil{
        fmt.Println("Error:",err)
    }else {
        fmt.Println(result)
    }

    fmt.Println(apply(pow,3,4))
    fmt.Println(apply(func(a int, b int) int {        return int(math.Pow(float64(a),float64(b)))
    },3,4))

    fmt.Println(sum(1,3,4,5))
}

go语言参数传递

package mainimport (    "fmt")//值传递,拷贝一个新的变量func f( a int )  {
    fmt.Println(a)
    a = 20}//引用传递例子func swap(a , b * int )  {
    *b, * a = * a ,*b
}func main()  {    var a int = 10
    f(a)

    a,b := 3,4
    swap(&a,&b)    println(a,b)
}


【版权声明】本文为华为云社区用户原创内容,转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息, 否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。