package main;

import "fmt"

func main() {
a, b, c := A(1, 2, 3);
fmt.Println(a, b, c); //调用函数B,虽然传入的是一个slice,但外部变量并未改变,说明是值拷贝
B(a, b, c);
fmt.Println(a, b, c);
d := []int{1, 2, 3};
//这里传入的是一个slice,但外部变量确改变了,说明是地址拷贝。
C(d);
fmt.Println(d);
e := 2;
//这里把e的地址传递过去
D(&e);
fmt.Println(e); //函数E赋值给f
f := E;
f(); //匿名函数
g := func() {
fmt.Println("我是匿名函数");
};
g(); //使用闭包
h := F(66);
//两次调用都使用了66
fmt.Println(h(66));
fmt.Println(h(88)); //调用G函数,defer反向调用
G();
H(); //调用I函数
I();
} //GO函数不支持嵌套,重载和默认参数 //定义函数
//func 函数名(参数列表) (返回值) {函数体}
func A(a int, b int, c int) (int, int, int) {
return a * 2, b * 2, c * 2;
} //不定长变参,必须作为参数列表最后的参数
//传入的是一个slice
func B(a ...int) {
for k := range a {
a[k] = a[k] * 2;
}
} //传递slice
func C(a []int) {
for k := range a {
a[k] = a[k] * 2;
}
} //传递指针
func D(a *int) {
*a = 6;
} //函数也是一个类型
func E() {
fmt.Println("func E");
} //闭包
//返回值是一个函数
func F(a int) (func(int) int) {
//打印a的地址
fmt.Printf("%p\n", &a);
return func(b int) int {
fmt.Printf("%p\n", &a);
return a + b;
};
} //defer执行方式类似其它语言中的析构函数
//在函数体执行结束后,按照调用顺序的相反顺序逐个执行
//常用于资源清理,文件关闭,解锁
func G() {
defer fmt.Println(1);
defer fmt.Println(2);
defer fmt.Println(3);
} func H() {
for i := 0; i < 3; i++ {
//这里用到了闭包
defer func() {
//这里的i作为地址的引用,引用局部变量i
//函数体结束后,i的值就变成了3,所以打印三次3
fmt.Println(i)
}();
} //这里的输出就跟上面的不一样,输出2,1,0
for i := 0; i < 3; i++ {
//这里是作为参数传递,是值的拷贝
defer func(a int) {
fmt.Println(a);
}(i);
}
} //GO里面没有异常机制,但有panic/recover来处理错误
//panic可以在任何地方引发,但recover只在defer调用的函数中有效
func I() {
J();
K();
M();
} func J() {
fmt.Println("fucn J");
} func K() {
//defer必须在panic之前,因为panic之后函数不会执行了。
//通过recover对程序进行恢复
defer func() {
if err := recover(); err != nil {
fmt.Println("recover in func K");
}
}();
panic("panic in func K");
} func M() {
fmt.Println("func M");
}

  

go语言中的函数的更多相关文章

  1. C语言中的函数

    C语言中的函数 目录 概述——对函数的理解 C语言中函数的定义和声明 函数允许的参数类型 函数允许的返回类型 递归 概述 由于有些代码段在编写程序的时候经常会用到,此时我们为了减少代码文件的长度和增加 ...

  2. 想精度高,可以考虑用c语言中的函数gettimeofday

    大家好: 在 win32 + bcb 时, 有个 GetTickCount() 返回第统启动到现在的 tick, 单位 ms.请问在 Linux + qt5 怎样实现呢? 如果用 QDateTime ...

  3. C语言中的函数指针

    C语言中的函数指针 函数指针的概念:   函数指针是一个指向位于代码段的函数代码的指针. 函数指针的使用: #include<stdio.h> typedef struct (*fun_t ...

  4. 利用C语言中的函数指针实现c++中的虚函数

    C语言中的函数指针 #include<stdio.h> int fun1(int a) { return a*a; } int fun2(int a) { return a*a*a; } ...

  5. js课程 3-10 js中字符串函数数组函数和其它语言中对应函数的区别和联系是什么

    js课程 3-10  js中字符串函数数组函数和其它语言中对应函数的区别和联系是什么 一.总结 一句话总结:js中是对象点方法的形式,这些方法都是对象的方法,而在php.java中却不是这样. 1.j ...

  6. C语言中的函数与数学上的函数很类似

    函数,是C语言编程中一个很重要的概念,重要到个人认为可以与指针并驾齐驱.好多教材.老师.学习资源都会专门挑出一章来讲函数.我今天也来说说函数,只不过我是从数学课上的函数来引申到C语言中的函数. 先来说 ...

  7. 策略设计模式与c语言中的函数指针

    在C语言中有一个非常重要的概念-函数指针,其最重要的功能是实现回调函数(指函数先在某处注册,而它将在稍后某个需要的时候被调用)在java语言中没有指针的概念,但是可以利用接口和指针实现类似的功能,具体 ...

  8. 1、C语言中的函数指针

    一 通常的函数调用 void MyFun(int x); //此处的申明也可写成:void MyFun( int ); int main(int argc, char* argv[]) { MyFun ...

  9. C语言中的函数、数组与指针

    1.函数:当程序很小的时候,我们可以使用一个main函数就能搞定,但当程序变大的时候,就超出了人的大脑承受范围,逻辑不清了,这时候就需要把一个大程序分成许多小的模块来组织,于是就出现了函数概念:  函 ...

  10. 初识C语言中的函数(男神翁凯老师MOOC)

    什么是函数? 函数是一块代码,接收零个或多个参数,做一件事情,并返回零个或一个值. 可以先想象成数学中的函数: y=f(x) 例如 求begin到end和的函数定义 void sum(int begi ...

随机推荐

  1. 【原】linux学习路径

    1.  <<The Linux Command Line A Complete Introduction>> 2.  <<Advanced Programming ...

  2. javaweb 学习系列【转】

    http://www.cnblogs.com/xdp-gacl/category/574705.html jsp指令 http://www.cnblogs.com/huiyuantang/p/5332 ...

  3. 3D模板阴影原理

    3D模板阴影原理 1:先从3dsMax中导出一个简单的场景,一个园环,球,平面. 2:园环直接面向光源,园环对球体来说是一个光线的阻挡物,园环在它上面形成阴影,同时,园环和球体对平面来说是光线的阻挡物 ...

  4. Ubuntu中清理Network下Connect to Server的入口

    转自:http://blog.csdn.net/maxilbert/article/details/51126467 connect to server入口列表文件以xml格式存放在 ~/.confi ...

  5. JS----贪吃蛇游戏

    在网上找到的几种例子 <!DOCTYPE html> <html > <head> <meta http-equiv="Content-Type&q ...

  6. Java中构造函数传参数在基本数据类型和引用类型之间的区别

    Java中构造函数传参数在基本数据类型和引用类型的区别 如果构造函数中穿的参数为基本数据类型,如果在函数中没有返回值,在调用的时候不会发生改变:而如果是引用类型,改变的是存储的位置,所有不管有没有返回 ...

  7. 四层协议给站点设置独享ip

    四层协议给站点设置独享ip 初始化为四层节点 设置独占ip 设置独享的产品不用预设置分组 增加站点 创建站点后,在分组解析里会自动创建一个以站点名为名称的分组并且会自动分配一个独享的ip在这个分组里( ...

  8. 解题(PockerCompare-扑克牌比较大小)

    题目描述 扑克牌游戏大家应该都比较熟悉了,一副牌由54张组成,含3~A.2各4张,小王1张,大王1张.牌面从小到大用如下字符和字符串表示(其中,小写joker表示小王,大写JOKER表示大王):3 4 ...

  9. Python基础之初始编码

    前言 程序中的编码问题你不搞明白,那么你的程序生涯中它会像幽灵一样伴随着你的职业生涯. 首先要搞清楚一个概念:计算机中认识什么?它认识的是010101这种二进制,却不认识中文不认识英文 那么,这个时候 ...

  10. springboot security 获取当前登录用户名

    System.out.println(((User)SecurityContextHolder.getContext().getAuthentication().getPrincipal()).get ...