golang基础--func函数

时间:2022-10-01 12:21:08

函数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基础知识之encoding/json package

    golang基础知识之json 简介 JSON(JavaScript Object Notation)是一种轻量级的数据交换格式.可以去json.org 查看json标准的清晰定义.json pack ...

  7. go基础之--函数和map

    在整理函数之前先整理一下关于指针 指针 普通类型变量存的就是值,也叫值类型.指针类型存的是地址,即指针的值是一个变量的地址.一个指针指示值所保存的位置,不是所有的值都有地址,但是所有的变量都有.使用指 ...

  8. Go语言基础之函数

    Go语言基础之函数 函数是组织好的.可重复使用的.用于执行指定任务的代码块.本文介绍了Go语言中函数的相关内容. 函数 Go语言中支持函数.匿名函数和闭包,并且函数在Go语言中属于“一等公民”. 函数 ...

  9. 02:golang基础

    1.1 golang中的init函数和main函数 1.init函数和main函数 1. golang里面有两个保留的函数:init函数(用于所有package)和main函数(只能用于package ...

随机推荐

  1. Live m3u8播放3个文件自动停止问题

    Live m3u8播放3个文件自动停止问题 1.问题描述 最近做一个转码切片播放测试,使用HLS(HTTP Live Streaming)来做直播, 每个TS分片时间为10s,根据TS分片文件生成以下 ...

  2. onSubmit的使用

    在web开发中,我们经常会遇到,一点回车键表单就自己提交的问题,能不能禁用回车键呢,答案是肯定的. Html代码  <from action="" method=" ...

  3. 高防TTCDN

    TCDN是深圳市云中漫网络科技公司高防CDN产品的品牌名称,既可以防御,也可以达到加速的效果,价格实惠.TTCDN适用于WEB应用,可以隐藏源站服务器IP,有效的减轻源站服务器压力,加快全国各地区线路 ...

  4. 规则集之探究何时使用HashSet、LinkedHashSet以及TreeSet&quest;

    前言 Java集合框架三种主要类型的集合:规则集(Set).线性表(List).队列(Queue).Set用来存储不可重复的元素:List用来存储有元素构成的有序的集合:而Queue则用于存储用先进先 ...

  5. Error&colon;dojo&period;data&period;ItemFileWriteStore&colon;Invalid item argument

    1.错误描述 dijit.form.ComboBox TypeError:_4e is undefined                                            Sea ...

  6. ORACLE如何找到引起账号锁定的IP的一点思考与总结

    在ORACLE数据库中,如果没有修改过FAILED_LOGIN_ATTEMPTS的话,默认10次尝试失败后就会锁住用户.此时再登录数据库,就会遇到ORA-28000: the account is l ...

  7. Shell学习---Shell脚本的静态检查工具shellcheck

    Shell脚本的静态检查工具shellcheck ubuntu下 apt install shellcheck ,即可安装shellcheck.写完shell脚本,记得用它检查一下,能给你点建议的.要 ...

  8. 理解ASP&period;NET的IDataReader

    理解ASP.NET的IDataReader ADO.NET DataReader对象可以从数据库中检索只读.只进的数据流.因为每次在内存中的数据只有一行,所以使用DataReader可提高应用程序的性 ...

  9. 配置SSD-caffe测试时出现&OpenCurlyDoubleQuote;Check failed&colon; error &equals;&equals; cudaSuccess &lpar;10 vs&period; 0&rpar; invalid device ordinal”解决方案

    这是由于GPU数量不匹配造成的,如果训练自己的数据,那么我们只需要将solver.prototxt文件中的device_id项改为自己的GPU块数,一块就是0,两块就是1,以此类推. 但是SSD配置时 ...

  10. vim 缩进设置

    1.在自己的家目录(/home)下建立.vimrc文件.控制台输入vi ~/.vimrc 回车. 2.在.vimrc文件中输入如下文本: set tabstop=4 set softtabstop= ...