四时宝库

程序员的知识宝库

go语言中函数的使用(go语言 func)

函数的创建

go语言用使用func关键字声明一个函数,调用函数也非常简单,函数名+()即可

注意:如果函数名首字母是小写表示私有函数只有 通过外部import是无法调用的 如果函数需要外部调用需要首字母大写,并且go推荐的也是大驼峰的命名方式

package main

import "fmt"

func hello()  {
	fmt.Println("hello world")
}
func main() {
	hello()
}

函数可传参数

我们可以在()里面传输一个数据参数并且使用它

package main

import "fmt"

func hello(str string)  {
	fmt.Println(str)
}
func main() {
	str:="hello world"
	hello(str)
}


函数可以传多个参数

package main

import "fmt"

func hello(str,name string)  {
	fmt.Println(str,"我的名字是:"+name)
}
func main() {
	str:="hello world"
	name:="xxm"
	hello(str,name)
}


函数具有返回值:

package main

import "fmt"

func hello(str,name string)  {
	fmt.Println(str,"我的名字是:"+name)
}
func getName() string {
	name:="xxm"
	return name
}
func main() {
	str:="hello world"
	name:=getName()
	hello(str,name)
}

变参函数:

如果函数的最后一个参数是 ...+数据类型的情况下称之为变参函数

一个数组倒装的例子:

package main

import "fmt"

func main() {
	var x =[]int{1,2,3,4}
	reverseOrder(x...)
}
func reverseOrder(num ...int)  {
	x:=make([]int,len(num))
	for k,v:=range num{
		x[(len(num)-1)-k]=v
		fmt.Println(v)
	}
	fmt.Println(x)
}


执行结果:

defer的使用

defer的作用是函数即将结束前做执行操作

package main

import "fmt"

func hello()  {
	fmt.Println("执行了defer")
}
func main() {
	fmt.Println("开始执行")
	defer hello()
	fmt.Println("准备结束执行")
}


执行结果:

通常我们用于我们经常会忘记的一些关键性代码,比如我们读取了一个文件,在做了一系列的逻辑操作以后会比较容易忘记关闭文件io流,有了defer以后我们可以在执行打开文件的时候接着就使用defer关闭文件流也不影响整理程序的逻辑。

package main

import (
	"fmt"
	"os"
)

func main() {
	file,_:=os.Open("./text.txt")
	defer file.Close()
	fmt.Println("执行相关的文件流操作逻辑")
	
	
}


内置函数:

go语言拥有一些不需要导入就可以使用的内置函数,比如我们的append

package main

func main() {
	var x []int
	x=append(x,1)
}


还有很多其他内置函数:

名称

说明

close

用于管道通信

len、cap

len 用于返回某个类型的长度或数量(字符串、数组、切片、map 和管道);cap 是容量的意思,用于返回某个类型的最大容量(只能用于切片和 map)

new、make

new 和 make 均是用于分配内存:new 用于值类型和用户定义的类型,如自定义结构,make 用于内置引用类型(切片、map 和管道)。它们的用法就像是函数,但是将类型作为参数:new(type)、make(type)。new(T) 分配类型 T 的零值并返回其地址,也就是指向类型 T 的指针(详见第 10.1 节)。它也可以被用于基本类型:v := new(int)。make(T) 返回类型 T 的初始化之后的值,因此它比 new 进行更多的工作new() 是一个函数,不要忘记它的括号

copy、append

用于复制和连接切片

panic、recover

两者均用于错误处理机制

print、println

底层打印函数

complex、real imag

用于创建和操作复数

递归函数:

实际上就是一个函数自调用的过程

package main

import "fmt"

func hello(x int)  {
	x+=1
	fmt.Println(x)
	if x==10{
		return
	}else {
		hello(x)
	}
}
func main() {
	hello(1)
}

把函数作为一个参数进行传参:

package main

import "fmt"

func add(f func()int)  {
	x:=f()
	fmt.Println(x+1)
}
func getNum() int  {
	return 1
}
func main() {
	add(getNum)
}

闭包:

当我们不想写函数名的时候可以使用匿名函数:

package main

import "fmt"

func main() {
	x:=1
	func (i int){
		fmt.Println(x+10)
	}(x)
}

也可以将闭包的函数作为一个返回值

package main

import "fmt"

func add() func(i int) int  {
	return func(i int) int {
		return i+10
	}
}

func main() {
	a:=add()
	x:=a(3)
	fmt.Println(x)

}



发表评论:

控制面板
您好,欢迎到访网站!
  查看权限
网站分类
最新留言
    友情链接