函数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
    */

golang基础--func函数的更多相关文章

  1. Golang基础之函数

    golang基础之函数 1.为什么需要函数? 有些相同的代码可能出现多次,如果不进行封装,那么多次写入到程序中,会造成程序冗余,并且可读性降低 2.什么是函数 为完成某些特定功能的程序指令集合称为函数 ...

  2. golang基础之三-字符串,时间,流程控制,函数

    strings和strconv的使用 strings strings.HasPrefix(s string,preffix string) bool:判断字符串s是否以prefix开头 stirngs ...

  3. GoLang基础数据类型--->字典(map)详解

    GoLang基础数据类型--->字典(map)详解 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任.   可能大家刚刚接触Golang的小伙伴都会跟我一样,这个map是干嘛的,是 ...

  4. GoLang基础数据类型--->数组(array)详解

    GoLang基础数据类型--->数组(array)详解 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.Golang数组简介 数组是Go语言编程中最常用的数据结构之一.顾名 ...

  5. golang基础之工程结构

    Golang 工作空间 编译工具对源码目录有严格要求,每个工作空间 (workspace) 必须由 bin.pkg.src 三个目录组成. workspace | +--- bin // go ins ...

  6. Golang 基础之基础语法梳理 (三)

    大家好,今天将梳理出的 Go语言基础语法内容,分享给大家. 请多多指教,谢谢. 本次<Go语言基础语法内容>共分为三个章节,本文为第三章节 Golang 基础之基础语法梳理 (一) Gol ...

  7. Golang 基础之基础语法梳理 (一)

    大家好,今天将梳理出的 Go语言基础语法内容,分享给大家. 请多多指教,谢谢. 本次<Go语言基础语法内容>共分为三个章节,本文为第一章节 Golang 基础之基础语法梳理 (一) Gol ...

  8. Golang 基础之基础语法梳理 (二)

    大家好,今天将梳理出的 Go语言基础语法内容,分享给大家. 请多多指教,谢谢. 本次<Go语言基础语法内容>共分为三个章节,本文为第二章节 Golang 基础之基础语法梳理 (一) Gol ...

  9. Golang基础教程

    以下使用goland的IDE演示,包含总计的golang基础功能共20个章节 一.go语言结构: 二.go基础语法: 三.变量 四.常量 五.运算符 六.条件语句 七.循环 八.函数 九.变量作用域 ...

随机推荐

  1. H2内存数据库支持存储到文件

    准备工作 1.下载JDK(本人下载的版本为JDK1.7).设置环境变量JAVA_HOME,设置PATH(%JAVA_HOME%\bin%). 2.下载并解压:h2-2014-07-13.zip 官网下 ...

  2. Unity Shader 阶段性反思与总结(一)

    Unity Shader 阶段性反思与总结(一) 最近在写Shader的时候,总是感觉力不从心,感觉自己已经看了蛮久的书了,也有一定的积累了,但是一想写什么效果,完完全全就是脑袋一团空白.典型的例子就 ...

  3. BitAdminCore框架更新日志20180523

    20180523更新内容 本次更新两个内容,一是增加视频处理功能,二是增加定时服务功能. 视频处理 定时服务 BitAdminCore框架,用最少的代码,实现最多的功能 本次新暂未发布,后续有空发布 ...

  4. 2D Polygons( Poygon) CGAL 4.13 -User Manual

    1 Introduction A polygon is a closed chain of edges. Several algorithms are available for polygons. ...

  5. netty网络通信中的tcp拆包问题

    工作中的一个项目,我们的一个应用与银行系统进行tcp通信的时候,银行下送的报文有时会分多次返回.在tcp中这种数据包分多次小数据包发送的情况成为拆包问题. 其中一个,也是最常见的思路就是在报文的报文头 ...

  6. C语言作业03-函数

    1.本章学习总结 1.1 思维导图 1.2本章学习体会,代码量学习体会 1.2.1学习体会 通过这几周的函数学习,让我明白了函数的重要性,在很多时候运用函数,会使得代码分工明确,逻辑严密,不繁琐.函数 ...

  7. ovs 源mac, 目的src 互换

    push:NXM_OF_ETH_SRC[],push:NXM_OF_ETH_DST[],pop:NXM_OF_ETH_SRC[],pop:NXM_OF_ETH_DST[] 1:把src mac推到栈顶 ...

  8. BZOJ 1003--[ZJOI2006]物流运输(最短路)

    1003: [ZJOI2006]物流运输 Time Limit: 10 Sec  Memory Limit: 162 MBSubmit: 10034  Solved: 4403 Description ...

  9. PHP中日期函数

    1,转化为时间戳函数:strtotime() 本函数接受一个包含美国英语日期格式的字符串并尝试将其解析为Unix时间戳,其值相对于now参数给出的时间,如果没有提供此参数则使用系统当前时间. < ...

  10. 实现一个算法,寻找字符串中出现次数最少的、并且首次出现位置最前的字符 如"cbaacfdeaebb",符合要求的是"f",因为他只出现了一次(次数最少)。并且比其他只出现一次的字符(如"d")首次出现的位置最靠前。

    实现一个算法,寻找字符串中出现次数最少的.并且首次出现位置最前的字符如"cbaacfdeaebb",符合要求的是"f",因为他只出现了一次(次数最少).并且比其 ...