• 函数

    • 返回值带有变量名

      return时可以不写返回值,在返回值位置声明即可

      func namedRetvalue() (a, b int) {
      a = 1
      b = 2
      return
      }
    • 匿名函数
      • 定义时调用
        func(data int) {
        fmt.Println(data)
        }(100)
      • 匿名函数被赋值与调用
        f := func(data int) {
        fmt.Println(data)
        }
        f(100)
      • 匿名函数作为回调函数
        func visit(list []int, f func(int)) {
        for -, v := raneg list{
        f(v)
        }
        } visit([]int{1,2,3,4}, func(v int){
        fmt.Println(v)
        })
    • 可变参数
      func myfunc(args ...int) {
      for -, arg := range args {
      fmt.Println(arg)
      }
      }

      任意类型的可变参数

      func myfunc(args ...interface{}) {
      var typeString string
      // 类型断言
      for _, s := range args {
      switch s.(type) {
      case bool:
      typeString = "bool"
      case string:
      typeString = "string"
      case int:
      typeString = "int"
      }
      }
      fmt.Println(typeString)
      } func main() {
      myfunc(1, "a", true)
      }
    • defer延迟语句

      后进先出

      函数退出时,释放资源

      func main() {
      defer fmt.Println(1)
      defer fmt.Println(2)
      defer fmt.Println(3)
      }
      var (
      cMap = make(map[string]int)
      cMutex sync.Mutex
      ) func myfunc(key string) int {
      cMutex.Lock()
      defer cMutex.Unlock()
      return cMap[key]
      } func main() {
      ret := myfunc("A")
      fmt.Println(ret)
      }
    • Go运行时错误
      1.一个可能造成错误的函数,需要返回一个错误接口 error
      2.函数调用后需要检查错误,正确处理每一个可能发生的错误的函数
      3.实现Error() string 方法的接口
      4.errors包自定义错误,errors.New("error")
    • panic与recover

      panic会引发程序崩溃,一般用于严重的错误

      recover只在延迟函数defer中有效,调用recover捕获panic的输入值

      func RecoverPanic(entry func()) {
      defer func() {
      err := recover() switch err.(type) {
      case runtime.Error:
      fmt.Println(err)
      default:
      fmt.Println(err)
      }
      }()
      entry()
      }
    • 哈希函数
      • md5/sha-1
        import (
        "crypto/md5"
        "crypto/sha1"
        ) func main() {
        cString := "Hello, 世界"
        md5Ins := md5.New()
        md5Ins.Write([]byte(cString))
        result := md5Ins.Sum([]byte(""))
        println(result)
        sha1Ins := sha1.New()
        sha1Ins.Write([]byte(cString))
        result = sha1Ins.Sum([]byte(""))
        println(result)
        }

重温Go语法笔记 | 函数的更多相关文章

  1. SQL基础语法笔记教程整理

    PS:本文适用SQL Server2008语法. 一.关系型数据库和SQL 实际上准确的讲,SQL是一门语言,而不是一个数据库. 什么是SQL呢?简而言之,SQL就是维护和使用关系型数据库中的的数据的 ...

  2. C语言语法笔记 – 高级用法 指针数组 指针的指针 二维数组指针 结构体指针 链表 | IT宅.com

    原文:C语言语法笔记 – 高级用法 指针数组 指针的指针 二维数组指针 结构体指针 链表 | IT宅.com C语言语法笔记 – 高级用法 指针数组 指针的指针 二维数组指针 结构体指针 链表 | I ...

  3. SQL 基础语法笔记教程整理

    最近从图书馆借了本介绍 SQL 的书,打算复习一下基本语法,记录一下笔记,整理一下思路,以备日后复习之用. PS:本文适用 SQL Server2008 语法. 首先,附一个发现的 MySQL 读书笔 ...

  4. [python] Pythonic语法笔记

    Pythonic语法笔记 __new__ 在类实例化之前执行的,也就是在init之前执行,可以为这个类写操作.接受的参数不是self而是cls.只有在new方法里返回类才会执行init操作,需要返回父 ...

  5. python学习第五讲,python基础语法之函数语法,与Import导入模块.

    目录 python学习第五讲,python基础语法之函数语法,与Import导入模块. 一丶函数简介 1.函数语法定义 2.函数的调用 3.函数的文档注释 4.函数的参数 5.函数的形参跟实参 6.函 ...

  6. Python编程从入门到实践笔记——函数

    Python编程从入门到实践笔记——函数 #coding=gbk #Python编程从入门到实践笔记——函数 #8.1定义函数 def 函数名(形参): # [缩进]注释+函数体 #1.向函数传递信息 ...

  7. MySQL 储存过程-原理、语法、函数详细说明

    Mysql储存过程是一组为了完成特定功能的SQL语句集,经过编译之后存储在数据库中,当需要使用该组SQL语句时用户只需要通过指定储存过程的名字并给定参数就可以调用执行它了,简而言之就是一组已经写好的命 ...

  8. 《python基础教程(第二版)》学习笔记 函数(第6章)

    <python基础教程(第二版)>学习笔记 函数(第6章) 创建函数:def function_name(params):  block  return values 记录函数:def f ...

  9. openresty开发系列14--lua基础语法3函数

    openresty开发系列14--lua基础语法3函数 一)function (函数) 有名函数: optional_function_scope function function_name( ar ...

  10. JAVA基础语法:函数(方法)、类和对象(转载)

    4.JAVA基础语法:函数(方法).类和对象 函数 在java中函数也称为方法,是一段具备某种功能的可重用代码块. 一个函数包括这几部分: 函数头 函数头包括函数访问修饰符,函数返回值类型, 函数名, ...

随机推荐

  1. html中div加滚动条

    div 加滚动条的两种方法: 一. <div style=" overflow:scroll; width:400px; height:400px;"></div ...

  2. fiddler限速配置&mock配置

    一.限速配置 1.开启性能选项 2.找到对应的参数入口 3.修改对应的从参数 解释下 这2个参数是如何做到限速的 4.request-trickle-delay(上传数据限制) 默认值是300,他的意 ...

  3. 封装socket 到vue2.x 使用

    vue2.x 使用 socket 数据交互 简单封装 socket //生成唯一标识符 function getUuid { let s = []; let hexDigits = "012 ...

  4. Python不同数据结构的元素频率统计

    1.list的词频统计 这里利用Python字典的键值对来进行统计.逻辑就是,根据list的内容生成一个字典,把要统计的列表元素的值作为字典的key,而后给字典中对应的key进行赋值,赋值方法采用字典 ...

  5. 5.4 Linux Vim基本操作

    <Vim三种工作模式>一节给大家详细介绍了 Vim 的 3 种工作模式,本节来学习如何使用 Vim 编辑文件. 首先学习如何使用 Vim 打开文件. Vim 打开文件 使用 Vim 打开文 ...

  6. games101_Homework4

    实现四个点的贝塞尔曲线 作业描述: • bezier:该函数实现绘制 Bézier 曲线的功能.它使用一个控制点序列和一个 OpenCV::Mat 对象作为输入,没有返回值.它会使 t 在 0 到 1 ...

  7. docker login 私有仓库时报错

    连接私有harbor报错如下: docker login 192.168.1.88 -uadmin -pHarbor12345 WARNING! Using --password via the CL ...

  8. 一个专注推荐.Net开源项目的榜单

    大家好,我是编程乐趣,从7月份开始推荐开源项目,已经推荐了接近100个开源项目了,其中绝大部分是有关.Net的开源项目,也受到大家非常多人的喜欢. 由于公众号不方便查询,很多人又想了解更多的开源项目, ...

  9. Spring-Event入门实践及执行原理

    一.入门案例 1. 添加依赖首先,在 pom.xml 文件中添加 Spring Boot 和 Spring Event 的依赖: <dependencies> <dependency ...

  10. OpenCV开发笔记(八十二):两图拼接使用渐进色蒙版场景过渡缝隙

    前言   对于图像拼接,前面探讨了通过基于Stitcher进行拼接过渡和基于特征点进行拼接过渡,这2个过渡的方式是摄像头拍摄角度和方向不应差距太大.  对于特定的场景,本身摄像头拍摄角度差距较大,拉伸 ...