golang基础--func函数
函数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函数的更多相关文章
- Golang基础之函数
golang基础之函数 1.为什么需要函数? 有些相同的代码可能出现多次,如果不进行封装,那么多次写入到程序中,会造成程序冗余,并且可读性降低 2.什么是函数 为完成某些特定功能的程序指令集合称为函数 ...
- golang基础之三-字符串,时间,流程控制,函数
strings和strconv的使用 strings strings.HasPrefix(s string,preffix string) bool:判断字符串s是否以prefix开头 stirngs ...
- GoLang基础数据类型--->字典(map)详解
GoLang基础数据类型--->字典(map)详解 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 可能大家刚刚接触Golang的小伙伴都会跟我一样,这个map是干嘛的,是 ...
- GoLang基础数据类型--->数组(array)详解
GoLang基础数据类型--->数组(array)详解 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.Golang数组简介 数组是Go语言编程中最常用的数据结构之一.顾名 ...
- golang基础之工程结构
Golang 工作空间 编译工具对源码目录有严格要求,每个工作空间 (workspace) 必须由 bin.pkg.src 三个目录组成. workspace | +--- bin // go ins ...
- Golang 基础之基础语法梳理 (三)
大家好,今天将梳理出的 Go语言基础语法内容,分享给大家. 请多多指教,谢谢. 本次<Go语言基础语法内容>共分为三个章节,本文为第三章节 Golang 基础之基础语法梳理 (一) Gol ...
- Golang 基础之基础语法梳理 (一)
大家好,今天将梳理出的 Go语言基础语法内容,分享给大家. 请多多指教,谢谢. 本次<Go语言基础语法内容>共分为三个章节,本文为第一章节 Golang 基础之基础语法梳理 (一) Gol ...
- Golang 基础之基础语法梳理 (二)
大家好,今天将梳理出的 Go语言基础语法内容,分享给大家. 请多多指教,谢谢. 本次<Go语言基础语法内容>共分为三个章节,本文为第二章节 Golang 基础之基础语法梳理 (一) Gol ...
- Golang基础教程
以下使用goland的IDE演示,包含总计的golang基础功能共20个章节 一.go语言结构: 二.go基础语法: 三.变量 四.常量 五.运算符 六.条件语句 七.循环 八.函数 九.变量作用域 ...
随机推荐
- Android 广播代码的发送与接收
Android四大组件之一广播,使用的也比较多,广播可大致分为两种,一种是Android系统区域的广播,是由系统指令发出,例如:点亮屏幕广播,开机过程中的一些广播 省略-, 然而还有一种广播就是我们自 ...
- select * 和 select 所有字段写出来 ,速度对比!
从很早时候,听老师说 select * from table 比 select a,b,c,d from table 要慢很多.3年来从未测试. 今天没事测一测, 不测不知道,一测吓一跳. 当然 ...
- js判断是否是数组
//判断是否是数组function isArray(obj) { return Object.prototype.toString.call(obj) === '[object Array]' ...
- Office - Outlook
将邮件存到本地 服务器容量有限,避免丢失和经常提示容量不足 步骤 在File->Account Settings->Account Settings下面 在Data Files标签页新建一 ...
- 通过网站统计或系统监视器查看IIS并发连接数
如果要查看IIS连接数,最简单方便的方法是通过“网站统计”来查看,“网站统计”的当前在线人数可以认为是当前IIS连接数;如果要想知道确切的当前网站IIS连接数的话,最有效的方法是通过windows自带 ...
- Sublime Text 格式化JSON-pretty json
1.安装install package 按control + `,打开命令输入框 输入一下命令: import urllib2,os; pf='Package Control.sublime-pack ...
- day 54 linux 常用指令入门
Linux文件系统结构 Linux目录结构的组织形式和Windows有很大的不同.首先Linux没有“盘(C盘.D盘.E盘)”的概念.已经建立文件系统的硬盘分区被挂载到某一个目录下,用户通过操作目录来 ...
- Top Leaders社区发现算法(top leaders community detection approach in information networks)
一.概念 复杂网络:现实生活中各种系统都可以看做成复杂网络,复杂网络构成包括节点和边,节点是网络中的基本组成单元,节点之间的联系或者关系是网络中的边.例如 电力网络:基站代表节点,基站之间是否互通表示 ...
- Css权重解析
Css权重解析 关于CSS权重,我们需要一套计算公式来去计算,这个就是 CSS Specificity,我们称为CSS 特性或称非凡性,它是一个衡量CSS值优先级的一个标准 具体规范入如下: spec ...
- cygwin 安装.
在线安装, http://www.cygwin.com/ 64位的,下载安装. 先装的低配的,只有几个组件装了,不然全部装太大,下次需要再装... binutils gcc gdb windows ...