package main

/*
函数function
Go 函数 不支持 嵌套、重载和默认参数。
但支持以下特性:
无需声明原型(C语言在使用函数之前需要声明函数的原型)、不定长度变参、多返回值、命名返回值参数、
匿名函数、闭包
定义函数使用关键字 func,且左大括号不能另起一行。
函数也可以作为一种类型使用
*/ import (
"fmt"
) func main() {
A5() //[1]
A5(, , ) //[1 2 3]
a, b := ,
A5(a, b)
fmt.Println(a, b) //1,2. a,b的值没有改变,相当于构建了一个slice数组,
//基本类型是值传递,函数A5改变了数组但是没后改变a,b的值 sli := []int{, } //中括号里面什么都不写是slice,
A7(sli)
fmt.Println(sli) //[333 444],slice是引用传递, sli2 := [...]int{, } //中括号里面什么都不写是slice,这里是数组
A8(sli2)
fmt.Println(sli2) //[0 101],数组是值传递 //如果要改变基本类型的值,则要用到指针
a1 :=
A9(&a1)
fmt.Println(a1) // a2 := B1 //函数 类型
a2() //B1B1B1B1 //匿名函数
a3 := func() {
fmt.Println("a3a3a3a3")
}
a3() //闭包:返回匿名函数
f := closure()
fmt.Println(f()) //
fmt.Println(f()) // f1 := closure()
fmt.Println(f1()) //
fmt.Println(f1()) // } func A(a int, b string) (int, string, int) { //函数参数和返回值
return a, b,
} 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 := , ,
return a, b, c
} func A4() (a, b, c int) {
a, b, c = , , //这里不能使用:=,因为返回值写了a,b,c,那么a,b,c就已经初始化了,这里直接赋值就可以了
return //这里可以直接return,返回的就是a,b,c
} func A5(a ...int) { //a接收不定参后,a变成了一个slice,用于接收多个参数,
fmt.Println(a) //[1 2]
a[] =
a[] =
fmt.Println(a) //[33 44]
return
} func A7(a []int) { //用于接收slice
fmt.Println(a) //[11 22]
a[] =
a[] =
fmt.Println(a) //[333 444]
return
} func A8(a []int) { //用于接收数组
fmt.Println(a) //[0 101]
a[] =
a[] =
fmt.Println(a) //[333 444]
return
} func A9(a *int) { //用于接收地址
fmt.Println(*a) //
*a =
fmt.Println(*a) //
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 = []func(){} for i := ; i < ; 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
*/
}

go8---函数function的更多相关文章

  1. Javascript自执行匿名函数(function() { })()的原理分析

    匿名函数指没有指定函数名或指针的函数,自执行匿名函数只是其中一种,下文中称这种函数为:自执行函数 下面是一个最常见的自执行函数: // 传统匿名函数 (function() { alert('hell ...

  2. JavaScript自运行函数(function(){})()的理解

    今天打开JQuery源文件(jquery-1.8.3), 看到JQuery的初始化过程是这样的 (function( window, undefined ) { // .... })( window ...

  3. 深入理解javascript中的立即执行函数(function(){…})()

    投稿:junjie 字体:[增加 减小] 类型:转载 时间:2014-06-12 我要评论 这篇文章主要介绍了深入理解javascript中的立即执行函数,立即执行函数也叫立即调用函数,通常它的写法是 ...

  4. javaScript的函数(Function)对象的声明(@包括函数声明和函数表达式)

    写作缘由: 平时再用js写函数的时候,一般都是以惯例 function fn () {} 的方式来声明一个函数,在阅读一些优秀插件的时候又不免见到 var fn = function () {} 这种 ...

  5. 函数(Function)作用域 / 远程函数执行

    函数跟变量一样也是有作用域的:Global.Script.Local.Private Global:作用于整个PowerShell会话,只要PowerShell会话不结束,被Global修饰的变量和函 ...

  6. Javascript自执行匿名函数(function() { })()的原理浅析

    匿名函数就是没有函数名的函数.这篇文章主要介绍了Javascript自执行匿名函数(function() { })()的原理浅析的相关资料,需要的朋友可以参考下 函数是JavaScript中最灵活的一 ...

  7. Javascript学习之函数(function)

    在JS中,Function(函数)类型实际上是对象;每个函数都是Function类型的实例,而且都与其他引用类型一样具有属性和方法.由于函数是对象,因此函数名实际上也是一个指向函数对象的指针. 一 函 ...

  8. js立即执行函数: (function ( ){...})( ) 与 (function ( ){...}( ))

    ( function(){…} )() ( function (){…} () ) 是两种javascript立即执行函数的常见写法,最初我以为是一个括号包裹匿名函数,再在后面加个括号调用函数,最后达 ...

  9. 深入理解立即执行函数(function(){})();

    ( function(){-} )()和( function (){-} () )是两种javascript立即执行函数的常见写法,要理解立即执行函数,需要先理解一些函数的基本概念. 1,函数声明,函 ...

  10. jQuery匿名函数$(function(){ }

    搬运原地址:https://zhidao.baidu.com/question/473318430.html $(function(){ }实际上是匿名函数.这是JQuery的语法,$表示JQuery ...

随机推荐

  1. 对拍 bat命令快速模板

    对拍.bat @echo off :loop maker.exe > in.in wq.exe < in.in > out.out std.exe < in.in >st ...

  2. [LUOGU] P1113 杂物

    题目描述 John的农场在给奶牛挤奶前有很多杂务要完成,每一项杂务都需要一定的时间来完成它.比如:他们要将奶牛集合起来,将他们赶进牛棚,为奶牛清洗乳房以及一些其它工作.尽早将所有杂务完成是必要的,因为 ...

  3. [Python3网络爬虫开发实战] 1.9.1-Docker的安装

    Docker是一种容器技术,可以将应用和环境等进行打包,形成一个独立的.类似于iOS的App形式的“应用”.这个应用可以直接被分发到任意一个支持Docker的环境中,通过简单的命令即可启动运行.Doc ...

  4. 自己封装的js工具

    // 封装函数insertAfter;功能类似insertBefore(); var div = document.getElementsByTagName("div")[0]; ...

  5. python 列表(二)

     列表的其他操作 count 用于统计列表中某个元素出现的次数 Eg: extend 把一个列表添加到另一个列表里面 Index 输出元素的位置即根据内容索引位置 Reverse 把列表元素的位置倒过 ...

  6. (转载)C++ string中find() ,rfind() 等函数 用法总结及示例

    string中 find()的应用  (rfind() 类似,只是从反向查找) 原型如下: (1)size_t find (const string& str, size_t pos = 0) ...

  7. python面向对象编程设计与开发

    一.什么是面向对象的程序设计 1.何为数据结构? 数据结构是指相互之间存在一种或多种特定关系的数据元素的集合,如列表.字典. 2.何为编程? 编程是指程序员用特定的语法+数据结构+算法,组成的代码,告 ...

  8. C#上位机开发(四)—— SerialAssistant功能完善

    上一篇中我们完成了一个串口助手的雏形,实现了基本发送和接收字符串功能,并将打开/关闭串口进行了异常处理,这篇就来按照流程,逐步将功能完善: 1.构思功能 首先是接收部分,要添加一个“清空接收”的按钮来 ...

  9. Big String(poj 2887)

    题意: 给你一个不超过1e6的字符串,和不超过2000次的操作 操作分为两种: 1.将一个字符插入到某个位置的前面 2.询问当前位置的字符 /* 块状链表模板水题(我的智商也就能做这种题了). 观察题 ...

  10. 天才的记忆(vijos 1514)

    描述 从前有个人名叫W and N and B,他有着天才般的记忆力,他珍藏了许多许多的宝藏.在他离世之后留给后人一个难题(专门考验记忆力的啊!),如果谁能轻松回答出这个问题,便可以继承他的宝藏.题目 ...