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 函数介绍的更多相关文章

  1. python strip()函数 介绍

    python strip()函数 介绍,需要的朋友可以参考一下   函数原型 声明:s为字符串,rm为要删除的字符序列 s.strip(rm)        删除s字符串中开头.结尾处,位于 rm删除 ...

  2. PHP ob_start() 函数介绍

    ob_start() 函数介绍: http://www.nowamagic.net/php/php_ObStart.php ob_start()作用: http://zhidao.baidu.com/ ...

  3. Python开发【第三章】:Python函数介绍

    一. 函数介绍 1.函数是什么? 在学习函数之前,一直遵循面向过程编程,即根据业务逻辑从上到下实现功能,其往往用一长段代码来实现指定功能,开发过程中最常见的操作就是粘贴复制,也就是将之前实现的代码块复 ...

  4. row_number() OVER(PARTITION BY)函数介绍

      OVER(PARTITION BY)函数介绍 开窗函数               Oracle从8.1.6开始提供分析函数,分析函数用于计算基于组的某种聚合值,它和聚合函数的不同之处是:对于每个 ...

  5. select与poll函数介绍

    select与poll函数介绍 在所有依从POSIX的平台上,select函数使我们可以执行I/O多路转接.传向select的参数告诉内核: 1)我们所关心的描述符 2)对于每个描述符我们所关心的状态 ...

  6. swift1.2语言函数和闭包函数介绍

    swift1.2语言函数和闭包函数介绍 在编程中,随着处理问题的越来越复杂,代码量飞速增加.其中,大量的代码往往相互重复或者近似重复.如果不采有效方式加以解决,代码将很难维护. swift1.2语言函 ...

  7. ZLG_GUI配置与函数介绍

    http://www.docin.com/p-825479457.html ZLG_GUI配置与函数介绍

  8. oracle下的OVER(PARTITION BY)函数介绍

    转自:http://www.cnblogs.com/lanzi/archive/2010/10/26/1861338.html OVER(PARTITION BY)函数介绍 开窗函数          ...

  9. 第五篇、常用的SQL语句和函数介绍

    简介: 在使用到sqlite3的时候,常常需要写一些SQL语句,现将常用到的部分语句稍微总结以下,由于个人习惯,关键字用大写. 附: /*简单约束*/ CREATE TABLE IF NOT EXIS ...

  10. 0-C相关01:NSlog函数介绍。

      NSlog()函数介绍: 首先:NSlog()函数是cocoa的框架中提供的一个方法: 下图中最上方是它在Xcode中的路径: : 同样都是输出函数.下边我们来看一下,在O-C中NSlog()和在 ...

随机推荐

  1. MySQL-常见数据拆分办法

    在生产环境中,由于业务的增长或者业务的拆分,DBA经常需要拆库操作.那么我们常见的拆库手段有哪些呢? 我这里提供几种解决办法: 1. 使用mysqldump 把表逻辑倒出,然后再source 到其它地 ...

  2. django-rest-swagger对API接口注释

    Swagger是一个API开发者的工具框架,用于生成.描述.调用和可视化RESTful风格的Web服务.总体目标是使客户端和文件系统服务器以同样的速度来更新,方法,参数和模型紧密集成到服务器端的代码中 ...

  3. c++11 闭包的实现

    c++11 闭包的实现 什么是闭包 闭包有很多种定义,一种说法是,闭包是带有上下文的函数.说白了,就是有状态的函数.更直接一些,不就是个类吗?换了个名字而已. 一个函数,带上了一个状态,就变成了闭包了 ...

  4. java的序列化流和打印流

    对象操作流(序列化流) 每次读取和写出的都是JavaBean对象. 序列化:将对象写入到文件中的过程 反序列化:从文件中读取对象到程序的过程 transient: 标识瞬态,序列化的时候,该修饰符修饰 ...

  5. (转)Android数据的四种存储方式SharedPreferences、SQLite、Content Provider和File (三) —— SharePreferences

    除了SQLite数据库外,SharedPreferences也是一种轻型的数据存储方式,它的本质是基于XML文件存储key-value键值对数据,通常用来存储一些简单的配置信息.其存储位置在/data ...

  6. 解题:APIO 2012 派遣

    题面 以报酬为标准维护一个大根堆,从根节点往上合并,每次踢掉若干人直到花费合法后更新答案 #include<cstdio> #include<cstring> #include ...

  7. 修改const保护的值

    先看代码: #include <stdio.h> void main() { const int num = 10; int *a = (int *)(void *)&num; / ...

  8. npm安装socket.io时报错的解决方法(npm WARN enoent ENOENT: no such file or directory, open '/usr/local/nodejs/bin/package.json')

    执行 npm install socket.io安装时报错: [root@WEB node_modules]# npm install socket.ionpm WARN enoent ENOENT: ...

  9. Python高手之路【四】python函数装饰器,迭代器

    def outer(func): def inner(): print('hello') print('hello') print('hello') r = func() print('end') p ...

  10. TOML 详解

    TOML的由来 配置文件的使用由来已久,从.ini.XML.JSON.YAML再到TOML,语言的表达能力越来越强,同时书写便捷性也在不断提升. TOML是前GitHub CEO, Tom Prest ...