函数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. Elasticsearch 相关 api 操作

    A. es 操作 1. 检查 es 集群健康状态 2. 获取集群中的节点列表 3. 创建索引 4. 获取索引 5. 索引文档 6. 查询文档 7. 删除索引 8. 更新文档 9. 删除文档 10. 批 ...

  2. LeetCode149:Max Points on a Line

    题目: Given n points on a 2D plane, find the maximum number of points that lie on the same straight li ...

  3. WPF 图片抗锯齿,尤其是小图片更为严重

    WPF 图片抗锯齿,尤其是小图片更为严重 UseLayoutRounding="True" 搞定,就是这么给力,分享给大家

  4. Linux下运行crm项目

    虚拟环境运行crm项目 1.进入虚拟环境 2.解决crm项目运行所需的依赖环境 1.手动解决 pip3 install django==1.11.14 pip3 install pymysql pip ...

  5. jzoj2941

    我們可以暴力枚舉每一個人分幾個糖果,再暴力統計答案即可 每次遞歸下去可以從1-n號人,決定選多少個糖果再遞歸 #include<bits/stdc++.h> using namespace ...

  6. 使用dev-tool定位页面性能瓶颈

    这是部门同事的一次内部分享,听完后受益颇多,趁着记忆还算新鲜,赶紧记录一波. 从 dev-tool 看页面 parse 过程 时间都去哪儿了 当浏览器发送一个请求到接受所有响应数据截止,这个过程发生了 ...

  7. 2 rocketmq mqadmin 的用法详解

    参考文档 http://jameswxx.iteye.com/blog/2091971 1.1. 控制台使用 RocketMQ 提供有控制台及一系列控制台命令,用于管理员对主题,集群,broker 等 ...

  8. java对象的结构

    [Java对象解析]不得不了解的对象头 一个Java对象到底占用多大内存? JVM源码分析之java对象头实现 java对象在内存中的结构(转帖) 一个Java对象到底占多大内存? 在Hotspot ...

  9. Google 团队效能研究 | 为什么雇用最聪明的人是远远不够的?

    简评:Google 的一项团队效能研究结果,可能会让你重新认识如何建立一个优秀的团队. Google 的搜索业务可能最为人所知,但 Google 可不仅仅有搜索业务,它可能还是最擅于大数据研究的公司之 ...

  10. HTML+Javascript制作拼图小游戏详解(二)

    上一篇我们说了网页的基本布局.接下来将为大家带来具体的实现方法. 拼图通表格来实现,做一个方形的表格,改变其大小使之如图所示. 试想一下如果我们将一张图片剪成6张分别放入对应位置,然后再把它打乱,这样 ...