一、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. opencv---(腐蚀、膨胀、边缘检测、轮廓检索、凸包、多边形拟合)

    一.腐蚀(Erode) 取符合模板的点, 用区域最小值代替中心位置值(锚点) 作用: 平滑对象边缘.弱化对象之间的连接. opencv 中相关函数:(erode) // C++ /** shape: ...

  2. ASP.NET中的身份验证

    身份验证方式windows passport form none授权allow 允许deny 拒绝特殊符号 *代表所有用户 ?代表匿名用户跳转配置<system.web><autho ...

  3. Java入门系列之集合Hashtable源码分析(十一)

    前言 上一节我们实现了散列算法并对冲突解决我们使用了开放地址法和链地址法两种方式,本节我们来详细分析源码,看看源码中对于冲突是使用的哪一种方式以及对比我们所实现的,有哪些可以进行改造的地方. Hash ...

  4. C/C++ 中 `printf` 格式化

    作为强类型静态语言,类型不仅规定了可以对数据进行的操作,还决定了应该怎样在 printf 中输出. printf 的签名是: int printf ( const char * format, ... ...

  5. C#二位数组 数组矩阵对角线之和

    二维数组: public static void Main(string[] args) { int[,] a = new int[3, 3]; Random rom = new Random(); ...

  6. Cobalt Strike系列教程第四章:文件/进程管理与键盘记录

    Cobalt Strike系列教程分享如约而至,新关注的小伙伴可以先回顾一下前面的内容: Cobalt Strike系列教程第一章:简介与安装 Cobalt Strike系列教程第二章:Beacon详 ...

  7. CentOS环境下通过YUM安装软件,搭建lnmp环境

    安装nginx.php-fpm和mysql. yum install nginx yum install php-fpm yum install mysql CentOS下LNMP环境配置 1. 配置 ...

  8. python3字符串常用方法

    整型和布尔值的转换: bin -- 十进制转二进制 int("1101",2) -- 二进制转十进制 十进制转二进制的算法 除2 取余,获取的所有余数从下往上进行计算 二进制转十进 ...

  9. 程序运行时间测试 - 使用系统函数 getrusage 获取程序运行时间

    https://github.com/yaowenxu/Workplace/blob/master/timer/getrusagetimer.c 关键结构体: struct rusage { stru ...

  10. webpack打包 The 'mode' option has not been set, webpack will fallback to

    webpack 打包报错 The 'mode' option has not been set, webpack will fallback to 'production' for,Module no ...