一、函数作用域

  • 说明
作用域的定义:已声明标识符所表示的常量、类型、变量、函数或包在源代码中的作用范围

在说函数作用域之前,先简单说一下局部变量和局变量
简单的说:
全局变量:在一个文件中,任何地方都可以访问到的就是全局变量
局部变量:在一个文件中,只有在某些特定的地方才能够访问到就是局部变量 根据作用域的定义和全局(局部)变量可以得知:
全局变量 是 作用于全局作用域中的。
局部变量 是 作用于局部作用域中的。
  • 实例
package main

import "fmt"

var PI float64 = 3.1415

// 圆的面积计算公式
func circle(r float64)(area float64){
// area 局部变量,在main函数中无法使用
// PI 全局变量 任何函数中都可以使用
area = PI * (r * r)
return
} func main(){
fmt.Println("PI :",PI) var R float64 = 3.5 // 此处的R 是main函数内的局部变量
fmt.Println(circle(R))
}
根据上面的程序我们可以得知:
r、area 变量是作用于 circle函数内
R 变量是作用于main 函数内的 PI是全局变量,作用于整个程序中的

二、函数嵌套

  • 函数嵌套调用
package main

import "fmt"

func main(){
fmt.Println(calc(11,33,"+"))
} // calc 嵌套使用了sum/reduce
func calc(num1,num2 int,operator string) (num int,ok bool){
switch operator {
case "+":
num = sum(num1,num2)
ok = true
case "-":
num = reduce(num1,num2)
ok = true
}
return
} // 加
func sum(num1,num2 int)int{
return num1 + num2
} // 减
func reduce(num1,num2 int)int{
return num1 - num2
}

三、函数作为参数

  • 函数作为参数1
package main

import "fmt"

func main(){
num := calc(3,4,sum)
fmt.Println(num)
} // 三个参数
// 前两个是int类型
// 后一个是 func(int,int)int 类型 // 再go语言中fun 也是一种类型
// 返回int
func calc(num1,num2 int,f func(int,int)int)int{
return f(num1,num2)
} func sum(num1 ,num2 int)int{
return num1 + num2
}
  • 函数作为参数2(自定义类型)
package main

import "fmt"

// 自定义一个函数类型
// type 关键字
// cb 定义类型
// func(int,int)int 基于func(int,int)int 创建的新类型
type cb func(int,int)int func main(){
num := calc(3,4,sum)
fmt.Println(num)
} // 三个参数
// 前两个是int类型
// 后一个是 func(int,int)int 类型 // 再go语言中fun 也是一种类型
// 返回int
func calc(num1,num2 int,f cb)int{
return f(num1,num2)
} func sum(num1 ,num2 int)int{
return num1 + num2
}

四、闭包

  • 函数作为返回值
package main

import (
"fmt"
"time"
)
type farr func([10]int)int func main(){
nums := [10]int{3,29,100,51,30,4,192,32,43,12}
maxNum := recordTime(max)
fmt.Println(maxNum(nums))
} // 记录函数运行时间
func recordTime(f farr)farr{ // 返回一个函数
return func(arr [10]int)int{
start:=time.Now().UnixNano() // 纳秒数 1秒 == 1000 豪秒 == 1000000 微秒 == 1000000000 纳秒
num := f(arr) time.Sleep(time.Second) // 停一秒 end := time.Now().UnixNano()
fmt.Println("函数执行纳秒数:",end-start)
return num
}
} func max(arr [10]int)int{
num := arr[0]
for _,v := range arr{
if num < v{
num = v
}
}
return num
}

如果喜欢看小说,请到183小说网

go 函数高级运用的更多相关文章

  1. Scala学习——函数高级操作

    scala函数高级操作 一.字符串高级操作 多行字符串和插值 package top.ruandb.scala.Course06 object StringApp { def main(args: A ...

  2. 1、Golang基础--Go简介、环境搭建、变量、常量与iota、函数与函数高级

    1 Go语言介绍 1 golang-->Go--->谷歌公司 2009年 golang:指go语言,指的go的sdk goland:软件,ide:集成开发环境 Java写的 2 Go是静态 ...

  3. python函数高级特性

    掌握了Python的数据类型.语句.函数,基本可以编写出很多有用的程序了.但是Python中,代码不是越多越好,而是越少越好.代码不是越复杂越好,而是越简单越好.基于这一思想,我们来介绍python中 ...

  4. 【357】sorted 函数高级用法

    参考:Python 内置函数sorted()在高级用法 - Brad1994 - 博客园 sorted 函数主要实现的就是对于可迭代对象进行排序,对于一维数据排序很好理解与实现,直接调用即可,本文主要 ...

  5. Scala函数高级操作

    字符串高级操作:***** 非常重要 将函数赋值给变量/值def sayHello(name:String): Unit = { println(s"Hello:$name")} ...

  6. Scala中的函数高级使用

    1.偏函数 1.基本介绍 在对符合某个条件,而不是所有情况进行逻辑操作时,使用偏函数是一个不错的选择 将包在大括号内的一组case语句封装为函数,我们称之为偏函数,它只对会作用于指定类型的参数或指定范 ...

  7. pandas函数高级

    一.处理丢失数据 有两种丢失数据: None np.nan(NaN) 1. None None是Python自带的,其类型为python object.因此,None不能参与到任何计算中. #查看No ...

  8. Oracle 函数高级查询

    目录 oracle高级查询 Oracle SQL获取每个分组中日期最新的一条数据 求平均值(为0的参数不均摊) 字符串清除前面的0 判断字符串串是否包含某个字符串 switch 判断 oracle不足 ...

  9. Scala函数高级篇

    一.匿名函数 没有名字的函数就是匿名函数,格式:(x:Int)=>{函数体} x:表示输入参数类型:Int:表示输入参数类型:函数体:表示具体代码逻辑 传递匿名函数至简原则: 参数的类型可以省略 ...

  10. js高级之函数高级部分

    基于尚硅谷的尚硅谷JavaScript高级教程提供笔记撰写,加入一些个人理解 github源码 博客下载 原型与原型链 prototype : 显式原型属性,它默认指向一个Object空对象(即称为: ...

随机推荐

  1. Cookie的实现

    Cookie是web server下发给浏览器的任意的一段文本,在后续的http 请求中,浏览器会将cookie带回给Web Server.同时在浏览器允许脚本执行的情况下,Cookie是可以被Jav ...

  2. vue踩坑之路--点击按钮改变div样式

    有时候,我们在做项目的时候,想通过某个按钮来改变某个div样式,那么可以通过以下代码实现: <!DOCTYPE html> <html> <head> <me ...

  3. pandas操作,按序号取列,按条件筛选,df格式转换等

    这几天遇到比较多的dataframe操作,频繁使用,在此整理记录下,方便查找. 1.num为列的数字序号,name=df.columns[num],返回的是column的字符串名字,df[name]= ...

  4. HTML 符号实体

    带有实体名称的 ASCII 实体 结果 描述 实体名称 实体编号 " quotation mark " " ' apostrophe  &apos; ' & ...

  5. vue-cli3 中的环境变量

    官方文档是这样写的: src同名文件夹下的建立 .env.[model] 配置文件  // mode:production development ... 载入的变量会对vue-cli-service ...

  6. 阅读《JavaScript设计模式》第二章心得

    面向对象编程 面向对象编程就是将你的需求抽象成一个对象.然后针对这个对象分析其特征(属性)与动作(方法).这个对象我们称之为类.面向对象编程思想其中的一个特点就是封装. 1.私有属性.私有方法.特权方 ...

  7. OI数学知识清单

    OI常用的数学知识总结 本文持续更新…… 总结一下OI中的玄学知识 先列个单子,(from秦神 数论 模意义下的基本运算和欧拉定理 筛素数和判定素数欧几里得算法及其扩展[finish] 数论函数和莫比 ...

  8. Linux之FTP/TFTP(vsftp、vsftpd) HTTP(httpd、apache) DHCP(dhcpd)

    FTP/TFTP(vsftp.vsftpd): FTP是File Transfer Protocol(文件传输协议)而中文简称为"文传协议".用于Internet上的控制文件的双向 ...

  9. Python基础-判断类型统计个数

    写函数,计算传入字符串中[数字].[字母].[空格] 以及 [其他]的个数 首先我们定义四个变量,分别存储数字.字母.空格.其他的数量 digital_temp = 0 # 存储数字个数 letter ...

  10. unigui菜单【3】

    unigui菜单TuniTreeView 根据数据库表中的内容,显示菜单的处理: function TMainForm.CreateMenu: Integer; var myMenuPoint : P ...