分享
  1. 首页
  2. 文章

golang基础--func函数

failymao · · 11452 次点击 · · 开始浏览
这是一个创建于 的文章,其中的信息可能已经有所发展或是发生改变。

函数function

  • Go函数不支持 嵌套, 重载和默认参数
  • 支持以下特性:

    无须声明原型,不定长度长度变参,多返回值,命名返回值参数,匿名函数,闭包

  • 定义函数使用关键字func,且左侧大括号不能另起一行

    package main
    import (
     "fmt"
    )
    func main() {
     a, b := 1, 2
     D(a, b) //传递可变长度变量,无法修改slice索引,无法根本改变slice值
     s1 := []int{1, 2, 3}
     D1(s1) //传递slice作为参数,修改索引值可以达到修改原始slice的效果
     x := 1
     D2(&x) //传递x的内存地址
    }
     //参数返回值
    func A(a int, b string) int {
     return a
    }
    //多个返回值
    func B() (a, b, c int) { //没有参数,
     a, b, c = 1, 2, 3 //因为返回值中已经有a,b,c占用了内层,所以后面直接赋值
     return a, b, c //可以省略a,b,c
    }
    //不定长变参,即int参数可以是多个,传进来的是个slice类型
    func C(b string, a ...int) { 
     fmt.Println(a) //输出 [1,2,3,4,5]
    }
    /不定长参数传递,传入变量
    func D(s ...int) { 
     fmt.Println(s)
     s[0] = 3
     s[1] = 4
     fmt.Println(s)
    }
    //传递slice作为参数,拷贝的是slice的内存地址
    func D1(s []int) { 
     s[0] = 4
     s[1] = 5
     fmt.Println(s)
    }
    //指针类型传递,可以达到修改变量值的目的
    func D2(a *int) { 
     *a = 2 //内存a的值变为2
     fmt.Println(*a)
    }
    /*输出
    D----> [1 2] //slice
     [3 4] //slice
     1 2 //int
    D1----> [4 5 3]
    D2----> 2 //参数为指针可以修改变量值
    */
  • 函数也可以作为一种类型使用

    package main
    import "fmt"
    func main() {
     a := A //函数作为类型使用
     a()
    }
    func A() {
     fmt.Println("Func A")
    }
    //指针类型传递,可以达到修改变量值的目的
    /*输出
    a()----> Func A
    */

    函数名可以理解为内存地址的编号,可以被用来赋值操作。

  • 匿名函数,不同与python语言有关键字lamada,go的匿名函数显的更直白,没有函数名,只需要func关键字就可以
    简单构建一个匿名函数,如下

    // 匿名函数
    package main
    import "fmt"
    func main() {
     a := func() { //没有函数名,直接进行赋值给变量
     fmt.Println("Func A")
     }
     a() //调用匿名函数
    }
  • 函数的闭包:又称嵌套函数,返回的类型是一个函数,再将函数赋值给变量,重新传入参数执行

    package main
    import "fmt"
    func main() {
     f := closure(10)
     fmt.Println(f(3))
     fmt.Println(f(4))
    }
    func closure(x int) func(int) int { // 函数作为返回类型
     return func(y int) int {
     return x + y
     }
    }
    /*输出
    f(3)---> 13
    f(4)---> 14
    */

有疑问加站长微信联系(非本文作者)

本文来自:博客园

感谢作者:failymao

查看原文:golang基础--func函数

入群交流(和以上内容无关):加入Go大咖交流群,或添加微信:liuxiaoyan-s 备注:入群;或加QQ群:692541889

关注微信
11452 次点击
暂无回复
添加一条新回复 (您需要 后才能回复 没有账号 ?)
  • 请尽量让自己的回复能够对别人有帮助
  • 支持 Markdown 格式, **粗体**、~~删除线~~、`单行代码`
  • 支持 @ 本站用户;支持表情(输入 : 提示),见 Emoji cheat sheet
  • 图片支持拖拽、截图粘贴等方式上传

用户登录

没有账号?注册
(追記) (追記ここまで)

今日阅读排行

    加载中
(追記) (追記ここまで)

一周阅读排行

    加载中

关注我

  • 扫码关注领全套学习资料 关注微信公众号
  • 加入 QQ 群:
    • 192706294(已满)
    • 731990104(已满)
    • 798786647(已满)
    • 729884609(已满)
    • 977810755(已满)
    • 815126783(已满)
    • 812540095(已满)
    • 1006366459(已满)
    • 692541889

  • 关注微信公众号
  • 加入微信群:liuxiaoyan-s,备注入群
  • 也欢迎加入知识星球 Go粉丝们(免费)

给该专栏投稿 写篇新文章

每篇文章有总共有 5 次投稿机会

收入到我管理的专栏 新建专栏