一、Go语言函数的格式

函数构成了代码执行的逻辑结构,在Go语言中,函数的基本组成为:关键字 func、函数名、参数列表、返回值、函数体和返回语句,每一个程序都包含很多的函数,函数是基本的代码块。

函数的要素:

  • 函数名:需要调用的函数名。
  • 参数列表:参数变量以逗号分隔,尾部无须以分号结尾。
  • 返回值变量列表:多个返回值使用逗号分隔。
// 没有返回值的函数
func log(message string) {
} // 有一个返回值的函数
func add(a , b int) int {
return var1
}
// 有多个返回值的函数
func power(name string) (int, bool) {
return var1,var2
} // 给返回值 命名
func add(a, b int) (c int) {
c = a + b
return c
}

多返回值函数的使用

func main() {
a :=
b :=
a, b = addAndMultiply(, )
fmt.Println("a=", a)
fmt.Println("b=", b)
}
func addAndMultiply(a, b int) (int, int) {
return a + b, a * b
}

二、函数作为参数

package main

import "fmt"
import "strings" func main() {
str := strToCase("ABDCFSDFE", processLetter)
fmt.Println(str)
} //将函数作为参数
func strToCase(str string, myfunc func(string) string) string {
return myfunc(str)
} //字符串奇偶交替
func processLetter(str string) (result string) {
for i, value := range str {
if i% == {
result += strings.ToUpper(string(value))
} else {
result += strings.ToLower(string(value))
}
}
return result
}

使用 type自定义类型 

package main

import "fmt"
import "strings" func main() {
str := strToCase("ABDCFSDFE", processLetter)
fmt.Println(str)
} //将函数作为参数(使用type定义的参数类型)
func strToCase(str string, myfunc processLetterFunc) string {
return myfunc(str)
} //使用type 为processLetter() 函数定义类型
type processLetterFunc func(string) string //字符串奇偶交替
func processLetter(str string) (result string) {
for i, value := range str {
if i% == {
result += strings.ToUpper(string(value))
} else {
result += strings.ToLower(string(value))
}
}
return result
}

三、匿名函数

匿名函数的格式与使用

package main

import "fmt"
import "strings" func main() {
//创建匿名函数并直接使用
func(str string) {
fmt.Println("str=", str)
}("hello")
//将匿名函数赋值给一个变量
fun := func(str string) {
fmt.Println("str=", str)
}
fun("word") //将匿名函数赋值给一个变量(有返回值)
rFun := func(str string) string {
return strings.ToUpper(str)
}
result := rFun("Hello word")
fmt.Println("result=", result)
}

 匿名函数作为回调函数的使用

package main

import "fmt"
import "math" func main() {
arr := []float64{, , , , } //匿名函数的使用进行平方根的运算
result := filterSlice(arr, func(str float64) string {
str = math.Sqrt(str)
return fmt.Sprintf("%.2f", str)
})
fmt.Println("result=", result)
} type fs func(float64) string //遍历切片,对每个数据进行处理
func filterSlice(arr []float64, f fs) []string {
var result []string
for _, value := range arr {
result = append(result, f(value))
}
return result
}

二、变量的作用域

1、局部变量与全局变量同名时,局部变量优先

//全局变量
var num int =
var num2 int = func main() {
num, num2 := ,
fmt.Println("num=", num) // num=1
fmt.Println("num2=", num2)// num2=2
}

GO基础之函数的更多相关文章

  1. python基础——匿名函数

    python基础——匿名函数 当我们在传入函数时,有些时候,不需要显式地定义函数,直接传入匿名函数更方便.  在Python中,对匿名函数提供了有限支持.还是以map()函数为例,计算f(x)=x2时 ...

  2. python基础——返回函数

    python基础——返回函数 函数作为返回值 高阶函数除了可以接受函数作为参数外,还可以把函数作为结果值返回.  我们来实现一个可变参数的求和.通常情况下,求和的函数是这样定义的: def calc_ ...

  3. python基础——sorted()函数

    python基础——sorted()函数 排序算法 排序也是在程序中经常用到的算法.无论使用冒泡排序还是快速排序,排序的核心是比较两个元素的大小.如果是数字,我们可以直接比较,但如果是字符串或者两个d ...

  4. python基础——filter函数

    python基础——filter函数 Python内建的filter()函数用于过滤序列. 和map()类似,filter()也接收一个函数和一个序列.和map()不同的是,filter()把传入的函 ...

  5. Java之--Java语言基础组成—函数

    Java语言基础组成-函数 Java语言由8个模块构成,分别为:关键字.标识符(包名.类名.接口名.常量名.变量名等).注释.常量和变量.运算符.语句.函数.数组. 本片主要介绍Java中的函数,函数 ...

  6. 数据分析与展示——Matplotlib基础绘图函数示例

    Matplotlib库入门 Matplotlib基础绘图函数示例 pyplot基础图表函数概述 函数 说明 plt.plot(x,y,fmt, ...) 绘制一个坐标图 plt.boxplot(dat ...

  7. JavaSE语法基础(3)---函数、数组

    JavaSE语法基础(3)---函数.数组 函数的概念:实现特定功能的一段代码,可反复使用. 函数的出现减少代码冗余,提高代码的复用性,可读性,可维护性,可以使每个功能模块独立起来,方便分工合作. 函 ...

  8. python基础——匿名函数及递归函数

    python基础--匿名函数及递归函数 1 匿名函数语法 匿名函数lambda x: x * x实际上就是: def f(x): return x * x 关键字lambda表示匿名函数,冒号前面的x ...

  9. Go语言基础之函数

    Go语言基础之函数 函数是组织好的.可重复使用的.用于执行指定任务的代码块.本文介绍了Go语言中函数的相关内容. 函数 Go语言中支持函数.匿名函数和闭包,并且函数在Go语言中属于“一等公民”. 函数 ...

  10. 第二周 数据分析之展示 Matplotlib基础绘图函数实例

    Pyplot基础图表函数 Pyplot饼图的绘制: Pyplot直方图的绘制: Pyplot极坐标图的绘制: Pyplot散点图的绘制: 单元小结: import numpy as np import ...

随机推荐

  1. IMP-00009: abnormal end of export file解决方案

    一.概述 最近在测试环境的一个oracle数据库上面,使用exp将表导出没有问题,而将导出的文件使用imp导入时却出现了如下错误. IMP-00009: abnormal end of export ...

  2. (转)Skyline timeseries异常判定算法

    原文链接:https://jiroujuan.wordpress.com/2013/10/09/skyline-anomalous-detect-algorithms/ Skyline内部提供了9个预 ...

  3. HashMap数据结构与实现原理解析(干货)

    HashMap 数据结构解析: HashMap内部使用hash表(本质是一个数组见图一) HashMap使用hash算法计算得到存放的索引位置,以此来加快查询速度,(比ArrayList还要快) 同样 ...

  4. MyBatis之接口绑定方案及多参数传递

    1.说明   所谓的MyBatis接口绑定,指的是实现创建一个接口后,把mapper.xml 由mybatis 生成接口的实现类,通过调用接口对象就可以获取mapper.xml 中编写的sql.在SS ...

  5. Android Studio中无法找到android.os.SystemProperties解决办法

    这个SystemProperties类主要是在这个jar包中layoutlib.jar,所以现在的办法就是让这个 jar包加载到 android studio中 下面讲解如何添加: 1.找到对应项目的 ...

  6. SPA项目开发之登录

    前端 首先安装开发模板 npm install element-ui -S npm install axios -S npm install qs -S npm install vue-axios - ...

  7. 5. IDEA使用

    一.IDEA项目结构 二.创建项目 三.快捷键 Alt + Enter // 导包,自动修正代码 ctrl + Y // 删除光标所在行 ctrl + D // 复制光标所在行,插在光标位置下面 ct ...

  8. 201871010102-常龙龙《面向对象程序设计(java)》第十三周学习总结

    项目 内容 这个作业属于哪个课程 https://www.cnblogs.com/nwnu-daizh/ 这个作业的要求在哪里 https://www.cnblogs.com/nwnu-daizh/p ...

  9. 设计模式-Proxy(结构型模式)

    以下代码来源: 设计模式精解-GoF 23种设计模式解析附C++实现源码 //Proxy.h #pragma once class Subject { public: virtual ~Subject ...

  10. 使用ArcPy拓扑检查的基本步骤

    拓扑检查是GIS的特性,在ArcGIS可使用多种方法进行检查,包括: 1.在数据集上右键按向导建立: 2.使用拓扑工具箱的一系列工具分步建立: 3.创建模型工具,制作专门的拓扑工具: 4.利用ArcP ...