go8---函数function

简介:
复制代码
package main

/*
函数function
Go 函数 不支持 嵌套、重载和默认参数。
但支持以下特性:
无需声明原型(C语言在使用函数之前需要声明函数的原型)、不定长度变参、多返回值、命名返回值参数、
        匿名函数、闭包
定义函数使用关键字 func,且左大括号不能另起一行。
函数也可以作为一种类型使用
*/

import (
    "fmt"
)

func main() {
    A5(1)       //[1]
    A5(1, 2, 3) //[1 2 3]
    a, b := 1, 2
    A5(a, b)
    fmt.Println(a, b) //1,2.   a,b的值没有改变,相当于构建了一个slice数组,
    //基本类型是值传递,函数A5改变了数组但是没后改变a,b的值

    sli := []int{11, 22} //中括号里面什么都不写是slice,
    A7(sli)
    fmt.Println(sli) //[333 444],slice是引用传递,

    sli2 := [...]int{0, 101} //中括号里面什么都不写是slice,这里是数组
    A8(sli2)
    fmt.Println(sli2) //[0 101],数组是值传递

    //如果要改变基本类型的值,则要用到指针
    a1 := 888
    A9(&a1)
    fmt.Println(a1) //999

    a2 := B1 //函数 类型
    a2()     //B1B1B1B1

    //匿名函数
    a3 := func() {
        fmt.Println("a3a3a3a3")
    }
    a3()

    //闭包:返回匿名函数
    f := closure(10)
    fmt.Println(f(1)) //11
    fmt.Println(f(2)) //12

    f1 := closure(20)
    fmt.Println(f1(1)) //21
    fmt.Println(f1(2)) //22

}

func A(a int, b string) (int, string, int) { //函数参数和返回值
    return a, b, 1
}

func A1(a int, b string) int { //返回值只有一个可以只写数据类型
    return a
}

func A2(a, b, c int) int { //多个参数的数据类型一样可以省写
    return a
}

func A3() (int, int, int) { //如果返回值没有写名字,则返回的时候要加上名字
    a, b, c := 1, 2, 3
    return a, b, c
}

func A4() (a, b, c int) {
    a, b, c = 1, 2, 3 //这里不能使用:=,因为返回值写了a,b,c,那么a,b,c就已经初始化了,这里直接赋值就可以了
    return            //这里可以直接return,返回的就是a,b,c
}

func A5(a ...int) { //a接收不定参后,a变成了一个slice,用于接收多个参数,
    fmt.Println(a) //[1 2]
    a[0] = 333
    a[1] = 444
    fmt.Println(a) //[33 44]
    return
}

func A7(a []int) { //用于接收slice
    fmt.Println(a) //[11 22]
    a[0] = 333
    a[1] = 444
    fmt.Println(a) //[333 444]
    return
}

func A8(a [2]int) { //用于接收数组
    fmt.Println(a) //[0 101]
    a[0] = 333
    a[1] = 444
    fmt.Println(a) //[333 444]
    return
}

func A9(a *int) { //用于接收地址
    fmt.Println(*a) //888
    *a = 999
    fmt.Println(*a) //999
    return
}

func A6(b string, a ...int) { //b string要写在前面, a ...int要写在最后面
    fmt.Println(a)
    return
}

func B1() {
    fmt.Println("B1B1B1B1")
    return
}

func closure(x int) func(int) int {
    return func(y int) int {
        return x + y
    }
}
复制代码

 

复制代码
package main

import (
    "fmt"
)

func main() { //闭包
    var fs = [4]func(){}

    for i := 0; i < 4; i++ {
        defer fmt.Println("defer i = ", i) //没有匿名函数,这里是参数i,i是基本类型,是值拷贝,
        defer func() {
            fmt.Println("defer_clouser i = ", i) //匿名函数,得到的是i的引用
        }()

        fs[i] = func() {
            fmt.Println("clouser i=", i) //i的引用,
        }
    }

    for _, f := range fs {
        f()
    }

    /*
        clouser i= 4
        clouser i= 4
        clouser i= 4
        clouser i= 4
        defer_clouser i =  4
        defer i =  3
        defer_clouser i =  4
        defer i =  2
        defer_clouser i =  4
        defer i =  1
        defer_clouser i =  4
        defer i =  0
    */
}
复制代码

 


本文转自农夫山泉别墅博客园博客,原文链接:http://www.cnblogs.com/yaowen/p/8074159.html,如需转载请自行联系原作者

相关文章
|
2月前
|
Go 调度
GO语言函数的内部运行机制分析
以上就是Go语言中函数的内部运行机制的概述,展示了函数在Go语言编程中如何发挥作用,以及Go如何使用简洁高效的设计,使得代码更简单,更有逻辑性,更易于理解和维护。尽管这些内容深入了一些底层的概念,但我希望通过这种方式,将这些理论知识更生动、更形象地带给你,让你在理解的同时找到编程的乐趣。
51 5
|
2月前
|
Go Python
函数的定义与调用 -《Go语言实战指南》
本文介绍了 Go 语言中函数的核心特性与用法,包括基本定义格式、调用方式、多返回值、返回值命名、参数类型简写、可变参数、高阶函数及匿名函数等内容。通过示例代码详细展示了如何定义和使用不同类型的函数,使读者能够全面了解 Go 函数的灵活性与强大功能。
|
3月前
|
人工智能 Python
083_类_对象_成员方法_method_函数_function_isinstance
本内容主要讲解Python中的数据类型与面向对象基础。回顾了变量类型(如字符串`str`和整型`int`)及其相互转换,探讨了加法在不同类型中的表现。通过超市商品分类比喻,引出“类型”概念,并深入解析类(class)与对象(object)的关系,例如具体橘子是橘子类的实例。还介绍了`isinstance`函数判断类型、`type`与`help`探索类型属性,以及`str`和`int`的不同方法。最终总结类是抽象类型,对象是其实例,不同类型的对象有独特运算和方法,为后续学习埋下伏笔。
83 7
083_类_对象_成员方法_method_函数_function_isinstance
|
3月前
|
Python
[oeasy]python086方法_method_函数_function_区别
本文详细解析了Python中方法(method)与函数(function)的区别。通过回顾列表操作如`append`,以及随机模块的使用,介绍了方法作为类的成员需要通过实例调用的特点。对比内建函数如`print`和`input`,它们无需对象即可直接调用。总结指出方法需基于对象调用且包含`self`参数,而函数独立存在无需`self`。最后提供了学习资源链接,方便进一步探索。
89 17
|
3月前
|
人工智能 Python
[oeasy]python083_类_对象_成员方法_method_函数_function_isinstance
本文介绍了Python中类、对象、成员方法及函数的概念。通过超市商品分类的例子,形象地解释了“类型”的概念,如整型(int)和字符串(str)是两种不同的数据类型。整型对象支持数字求和,字符串对象支持拼接。使用`isinstance`函数可以判断对象是否属于特定类型,例如判断变量是否为整型。此外,还探讨了面向对象编程(OOP)与面向过程编程的区别,并简要介绍了`type`和`help`函数的用法。最后总结指出,不同类型的对象有不同的运算和方法,如字符串有`find`和`index`方法,而整型没有。更多内容可参考文末提供的蓝桥、GitHub和Gitee链接。
80 11
|
8月前
|
JSON 安全 网络协议
go语言使用内置函数和标准库
【10月更文挑战第18天】
92 3
|
9月前
|
JavaScript
箭头函数与普通函数(function)的区别
箭头函数是ES6引入的新特性,与传统函数相比,它有更简洁的语法,且没有自己的this、arguments、super或new.target绑定,而是继承自外层作用域。箭头函数不适用于构造函数,不能使用new关键字调用。
|
8月前
|
中间件 Docker Python
【Azure Function】FTP上传了Python Function文件后,无法在门户页面加载函数的问题
通过FTP上传Python Function至Azure云后,出现函数列表无法加载的问题。经排查,发现是由于`requirements.txt`中的依赖包未被正确安装。解决方法为:在本地安装依赖包到`.python_packages/lib/site-packages`目录,再将该目录内容上传至云上的`wwwroot`目录,并重启应用。最终成功加载函数列表。
|
9月前
|
数据可视化 开发者 索引
详解Wireshark LUA插件函数:function p_myproto.dissector(buffer, pinfo, tree)
在 Wireshark 中,LUA 插件通过 `function p_myproto.dissector(buffer, pinfo, tree)` 扩展协议解析能力,解析自定义应用层协议。参数 `buffer` 是 `PacketBuffer` 类型,表示原始数据包内容;`pinfo` 是 `ProtoInfo` 类型,包含数据包元信息(如 IP 地址、协议类型等);`tree` 是
365 1
|
10月前
|
编译器 Go C++
Go to Learn Go之函数
Go to Learn Go之函数
69 1

热门文章

最新文章