首页 > 其他分享 >9 Go 函数

9 Go 函数

时间:2023-06-12 10:44:09浏览次数:32  
标签:函数 int init func Go main

函数是为完成某一功能的程序指令(语句)的集合称为函数。在 Go 中,函数分为:自定义函数和系统函数。

函数的定义

以下是函数的基本语法 描述:

func 函数名(形参列表) (返回值类型列表) {
  ...语句块
  return 返回值1, 返回值2
}
  1. 形参列表表示函数的输入

  2. 函数中的语句表示为了实现某一功能的代码块

  3. 函数可以有返回值,也可以没有,在 Go 语言中,一个函数可以有多个返回值

  4. 返回多个值时,如果不使用那么会出现错误,可以使用 _ 符号占位忽略

    var val, _ = getVal()
    
  5. 如果返回值只有一个,那么在声明函数的时候可以省略返回值类型的 ()

    func getVal() int {
      return 1
    }
    
  6. 基本数据类型和数组默认都是值传递的,也就是值拷贝,在函数内修改,是不会影响到原来的值

  7. 在 Go 中,函数也是一种数据类型,可以赋值给一个变量,通过该变量可以对函数进行调用

    func main() {
    	increment(cal)
      // 也可以使用下面这种方式来传递
      increment(func (num int) int {
        return 1
      })
    }
    
    func cal(num int) int {
    	return 1
    }
    
    // 创建一个函数类型
    type GetVal = func(num int) int
    
    func increment(getVal GetVal) int {
    	return getVal(123)
    }
    
    

可以通过函数名加上小括号去调用指定的函数

func main() {
  var result = increment(1, 2)
  fmt.Println("result =", result) // 3
}

func increment(max int, min int) int {
  return max + min
}

init 函数

每一个源文件都可以包含一个 init() 函数,该函数会在 main() 函数执行前被 Go 运行框架调用,也就是说 init() 会在 main() 函数前被调用。

import "fmt"

func main() {
	fmt.Println("main 函数被执行了")
}

func init() {
	fmt.Println("inti 函数被执行了")
}

以上代码 init() 函数会先于 main() 函数执行:

➜  go-learn go run go-func.go
inti 函数被执行了
main 函数被执行了

在 Go 语言中,变量和函数的定义顺序是:

全局变量 ---> init() ---> main()

init() 函数的作用通常是用来完成一些初始化工作,例如初始化一些程序运行时必要的全局数据。

匿名函数

Go 支持匿名函数,如果我们某个函数只是希望被只用一次,可以使用匿名函数,匿名函数也可以实现多次调用。

var MyFun = func() {
	fmt.Println("MyFunc")
}

func main() {
	MyFun() // 调用全局匿名函数
	var localFun = func ()  { // 定义一个局部匿名函数
		fmt.Println("local func") // 使用局部定义的匿名函数
	}
	localFun()
}

标签:函数,int,init,func,Go,main
From: https://www.cnblogs.com/CloverYou/p/17474299.html

相关文章

  • 0x02 Go 语言中的转译字符
    \t表示一个制表位,实现对齐的功能\n换行符\\表示一个斜杠\\"表示一个半引号"\r表示一个回车,它会将后面的内容覆盖掉前面的内容,例如:"123456789\r456"实际输出为456456789......
  • leangoo领歌Scrum敏捷工具中,如何快速查看项目内所有任务卡片
    ​项目管理员能不能快捷的查看整个项目内的所有任务?能不能快捷查看项目内某一个成员的所有任务?能不能快捷的在项目内通过一些条件选择查看任务?可以导出项目内某一个人的所有任务吗?方便做一些统计等等...这些现在Leangoo领歌敏捷管理工具中都可以实现啦~查看项目内所有任务进......
  • 0x03 Go 变量
    变量时程序的基本组成单位,无论是使用哪个编程语言来进行开发,变量都是其程序的基本组成单位.变量表示内存中的一个存储区域,该区域有属于自己的名称(变量名)和类型(变量类型)Golang变量有三种使用方式指定变量类型,声明后若不赋值则使用默认值varnumint//0根据值自行判......
  • 0x04 Go 数据类型
    基本数据类型数值类型:intint8int16int32int64uintuint8uint16uint32uint64字符类型:在Go中没有类似Java中的char类型,但是可以通过byte来保存单个字母字符。int系列类型也可以保存字符varniint16='你'varaint8='a'varbbyte='b'浮点类......
  • 0x00 Hello Go
    GO程序的基本结构Go语言的文件后缀是.go结尾,例如hello.goGo项目的文件目录通常是这样的:.└──src└──go_code└──learn项目名└──package1└──package2以下代码是一个helloworld程序的代码示例/***he......
  • django views 序列化
      RESTframework中的序列化类与Django的Form和ModelForm类非常相似。我们提供了一个Serializer类,它提供了一种强大的通用方法来控制响应的输出,以及一个ModelSerializer类,它为创建处理模型实例和查询集的序列化提供了有效的快捷方式。Serializers 序列化器允许把像查询......
  • python学习笔记34-获取函数的help信息
    list_for_help=list()list_for_help.append("PyQt5.QtCore")list_for_help.append("PyQt5.QtCore.QTime")list_for_help.append("PyQt5.QtGui")list_for_help.append("PyQt5.QtGui.QColor")list_for_help.append("PyQt5......
  • OpenMP中几个容易混淆的函数(线程数量/线程ID/线程最大数)以及并行区域线程数量的确定
    (1)并行区域数量的确定:在这里,先回顾一下OpenMP的parallel并行区域线程数量的确定,对于一个并行区域,有一个team的线程去执行,那么该分配多少个线程去执行呢?OpenMP的遇到parallel指令后创建的线程team的数量由如下过程决定:1.if子句的结果2. num_threads的设置3. omp_set_num_threads()......
  • 基于Go的缓存实现
    概念缓存是计算机科学中的一个重要概念。设想某个组件需要访问外部资源,它向外部源请求资源,接收并使用资源,这些步骤都需要花费时间。当组件再次需要资源时,可以再次请求资源,但这种方式从时间上考虑是比较低效的。相反,组件可以将请求结果保存在本地某处,然后再次使用,使用本地数据总是比......
  • C ++ 拷贝构造函数和赋值构造函数 非常经典
    C++拷贝构造函数赋值构造函数拷贝构造函数和赋值构造函数的异同由于并非所有的对象都会使用拷贝构造函数和赋值函数,程序员可能对这两个函数有些轻视。请先记住以下的警告,在阅读正文时就会多心:如果不主动编写拷贝构造函数和赋值函数,编译器将以“位拷贝”的方式自动生成缺省的函数......