go 函数介绍
1. 定义:有输入、有输出,用来执行一个指定任务的代码块
func functionname([parametername type]) [returntype] {
//function body
}
//其中参数列表和返回值列表是可选
无参数和返回值的函数
func functionname() {
//function body
}
func test1() {
fmt.Println("hello world")
}
有参数又返回值的函数
func sumtwo(a int, b int) int {
sum := a + b
return sum
}
如何连续的一系列参数的类型是一样,前面的类型可以不写,例如:
func add(a, b int) int {
return a + b
}
func sumsub(a, b int) (int, int) {
sum := a + b
sub := a - b
return sum, sub
}
函数调用
func add(a, b int) int {
return a + b
}
func main() {
sum := add(, )
}
多返回值和可变参数
多返回值
func calc(a, b int) (int, int) {
sum := a + b
sub := a - b
return sum, sub
}
func main() {
sum, sub := add(, )
}
对返回值进行命名
func calc(a, b int) (sum int, sub int) {
sum = a + b
sub = a - b
return
}
func main() {
sum, sub := add(, )
}
_标识符
返回多个值的时候 有的值不想接受就可以用_
func calc(a, b int) (sum int, sub int) {
sum = a + b
sub = a - b
return
}
func main() {
sum, _ := add(, )
}
可变参数
// 可以传入0个或者多个参数
func calc_v1(b …int) (sum int, sub int) {
return
}
// a 必传
func calc_v2(a int, b …int) (sum int, sub int) {
return
}
// a,b 必传
func calc_v3(a int, b int, c …int) (sum int, sub int) {
return
}
func test4(b ...int) int {
sum :=
for i := ; i < len(b); i++ {
sum += b[i]
}
return sum
}
defer语句
defer 语句 在函数执行完以后才开始执行, 多个defer语句遵循 堆栈的原则,即后进先出,先进后出
func calc_v1(b …int) (sum int, sub int) {
defer fmt.Println(“defer”)
return
}
多个defer语句,遵循栈的特性:先进后出
func calc_v1(b …int) (sum int, sub int) {
defer fmt.Println(“defer1”)
defer fmt.Println(“defer2”)
return
}
/*
defer2
defer1
*/
defer 举例
package main
import "fmt"
func defer1() {
defer fmt.Println("----------------1")
fmt.Println("-----------------2")
fmt.Println("------------------3")
}
/*
------------------2
-----------------3
----------------1
*/
func testdefer1(){
for i:=; i<; i++ {
defer fmt.Printf("this is %d\n", i)
}
fmt.Println("go-----------")
}
/*
go-----------
this is 9
this is 8
this is 7
this is 6
this is 5
this is 4
this is 3
this is 2
this is 1
this is 0
*/
func testdefer2(){
i:=
defer fmt.Printf("defer test i=%d\n",i)
i=
fmt.Println("over -----------")
}
/*
over -----------
defer test i=5
*/
func main() {
// defer1()
testdefer1()
// testdefer2()
}
内置函数
1. close 主要用来关闭channel
2.len:用来求长度,比如string、array、slice、map、channel
3. new:用来分配内存,主要用来分配值类型,比如int、struct。返回的是指针
4. make:用来分配内存,主要用来分配引用类型,比如chan、map、slice
5. append:用来追加元素到数组、slice中
6.panic和recover:用来做错误处理
go 函数介绍的更多相关文章
- python strip()函数 介绍
python strip()函数 介绍,需要的朋友可以参考一下 函数原型 声明:s为字符串,rm为要删除的字符序列 s.strip(rm) 删除s字符串中开头.结尾处,位于 rm删除 ...
- PHP ob_start() 函数介绍
ob_start() 函数介绍: http://www.nowamagic.net/php/php_ObStart.php ob_start()作用: http://zhidao.baidu.com/ ...
- Python开发【第三章】:Python函数介绍
一. 函数介绍 1.函数是什么? 在学习函数之前,一直遵循面向过程编程,即根据业务逻辑从上到下实现功能,其往往用一长段代码来实现指定功能,开发过程中最常见的操作就是粘贴复制,也就是将之前实现的代码块复 ...
- row_number() OVER(PARTITION BY)函数介绍
OVER(PARTITION BY)函数介绍 开窗函数 Oracle从8.1.6开始提供分析函数,分析函数用于计算基于组的某种聚合值,它和聚合函数的不同之处是:对于每个 ...
- select与poll函数介绍
select与poll函数介绍 在所有依从POSIX的平台上,select函数使我们可以执行I/O多路转接.传向select的参数告诉内核: 1)我们所关心的描述符 2)对于每个描述符我们所关心的状态 ...
- swift1.2语言函数和闭包函数介绍
swift1.2语言函数和闭包函数介绍 在编程中,随着处理问题的越来越复杂,代码量飞速增加.其中,大量的代码往往相互重复或者近似重复.如果不采有效方式加以解决,代码将很难维护. swift1.2语言函 ...
- ZLG_GUI配置与函数介绍
http://www.docin.com/p-825479457.html ZLG_GUI配置与函数介绍
- oracle下的OVER(PARTITION BY)函数介绍
转自:http://www.cnblogs.com/lanzi/archive/2010/10/26/1861338.html OVER(PARTITION BY)函数介绍 开窗函数 ...
- 第五篇、常用的SQL语句和函数介绍
简介: 在使用到sqlite3的时候,常常需要写一些SQL语句,现将常用到的部分语句稍微总结以下,由于个人习惯,关键字用大写. 附: /*简单约束*/ CREATE TABLE IF NOT EXIS ...
- 0-C相关01:NSlog函数介绍。
NSlog()函数介绍: 首先:NSlog()函数是cocoa的框架中提供的一个方法: 下图中最上方是它在Xcode中的路径: : 同样都是输出函数.下边我们来看一下,在O-C中NSlog()和在 ...
随机推荐
- BZOJ5319 JSOI2018列队(主席树)
显然集合后相对位置不变最优.主席树上二分向左和向右的分界点即可.注意主席树的值域.我怎么天天就写点一眼题啊. #include<iostream> #include<cstdio&g ...
- BZOJ5100 POI2018Plan metra(构造)
容易发现要么1和n直接相连,要么两点距离即为所有dx,1+dx,n的最小值.若为前者,需要满足所有|d1-dn|都相等,挂两棵菊花即可.若为后者,将所有满足dx,1+dx,n=d1,n的挂成一条链,其 ...
- P1110 [ZJOI2007]报表统计
题目描述 Q的妈妈是一个出纳,经常需要做一些统计报表的工作.今天是妈妈的生日,小Q希望可以帮妈妈分担一些工作,作为她的生日礼物之一. 经过仔细观察,小Q发现统计一张报表实际上是维护一个非负整数数列,并 ...
- Latex编译过程中遇到的奇奇怪怪的问题及解决方案
标签(空格分隔): 杂七杂八的问题 有必要写一个博文记录自己在Latex编译时遇到的各种问题,希望可以帮到遇到同样错误的亲故.讲真,一直没有系统的学习Latex,都是投哪个会直接拿那个会的模板来套,然 ...
- Statement和PreparedStatement之间的区别
Statement和PreparedStatement之间的区别: 1.PreparedStatement是预编译的,对于批量处理可以大大提高效率. 也叫JDBC存储过程2.使用 Statement ...
- BZOJ 2157: 旅游
2157: 旅游 Time Limit: 10 Sec Memory Limit: 259 MBSubmit: 1347 Solved: 619[Submit][Status][Discuss] ...
- BZOJ 1014 火星人 | 平衡树维护哈希
BZOJ 1014 火星人 题意 有一个字符串,三中操作:在某位置后面插入一个字符.修改某位置的字符.询问两个后缀的最长公共前缀. 题解 看到网上的dalao们都说这道题是平衡树,我就很懵x--平衡树 ...
- STS导入Gradle项目出现 Could not create task of type 'DependencyManagementReportTask'
解决方法: 在build.gradle文件下添加如下: classpath 'io.spring.gradle:dependency-management-plugin:0.6.1.RELEASE'
- Android中Selector的用法(改变ListView和Button的默认背景)
Android中的Selector的用法 http://blog.csdn.net/shakespeare001/article/details/7788400#comments Android中的S ...
- UESTC--1548
题目:Easy math 原题链接:http://acm.uestc.edu.cn/problem.php?pid=1548 分析:费马小定理的应用. #include<cstdio> # ...