一、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. 工作笔记 之 Linux服务搭建

    No.1 linux环境下安装nginx步骤 Nginx (engine x) 是一款轻量级的Web 服务器.反向代理服务器.电子邮件(IMAP/POP3)代理服务器,在BSD-like 协议下发行. ...

  2. maven将xml文件一起打包

    pom文件配置 <build> <!-- 将mapper.xml一起打包 --> <resources> <resource> <director ...

  3. js格式化JSON数据

    前言: 最近做的项目中遇到个需要在前端页面中将某个设备需要的数据格式展示出来,方便用户配置.一开始单纯的将数据格式写入到pre标签中, 但是通过pre标签写入的数据格式在代码可视化上不是很优雅.由于上 ...

  4. Monday

    ssm项目 设计模式:上周(观察者模式,策略模式)

  5. 基于EF的一个简单实战型分层架构

    注:此博客仅适合于刚入门的Asp.net Core初学者,仅做参考. 学了3个月的Asp.net Core,将之前一个系统(http://caijt.com/it)的PHP后端用Asp.net Cor ...

  6. 练手爬虫用urllib模块获取

    练手爬虫用urllib模块获取 有个人看一段python2的代码有很多错误 import re import urllib def getHtml(url): page = urllib.urlope ...

  7. Angular中使用bootstrap样式

    Angular中使用bootstrap样式 Angular中引入bootstrap的方法   方法1:在Angular.json中的styles数组中添加bootstrap路径 如下所示: " ...

  8. android studio节省C盘空间的配置方法

    近期发现C盘空闲空间剩余不多了,经过检查发现在C:\Users\<电脑用户名>\的目录下,有这两个文件夹空间比较大,这两文件夹分别是 .AndroidStudioPreview3.2(不同 ...

  9. 转战物联网·基础篇06-深入理解MQTT协议之基本术语

      通过上一节我们对MQTT协议已经有了初步的印象,这一节我们开始深入的理解一下MQTT协议,介绍常用的MQTT 3.1.1版本,5.0版本后面指介绍新增部分即可.这一节我们先介绍MQTT里常用的术语 ...

  10. Nginx四层负载均衡概述

    目录 Nginx四层负载均衡概述 什么是负载均衡 负载均衡应用场景 四层,七层集群架构 四层负载均衡总结 Nginx如何配置四层负载均衡 nginx四层负载均衡端口转发 Nginx四层负载均衡概述 什 ...