Golang学习之路(五):Golang的函数

x33g5p2x  于2021-11-19 转载在 Go  
字(2.1k)|赞(0)|评价(0)|浏览(354)

一、函数

1. 语法

func 函数名( [参数] ) [返回值类型] {
   函数体
}

2. 值传递

默认情况下,Go 语言使用的是值传递,即在调用过程中不会影响到实际参数。

1)求a和b两个参数值之和:

package main

import "fmt"

func main() {
	result :=sum(1, 2)
	fmt.Println("a+b之和为:",result)
}
func sum(a, b int) int {
	return a+b
}

输出结果

a+b之和为: 3

2)Golang的函数返回值可以为多个:

package main

import "fmt"

func main() {
	res1,res2 :=fuc(1, 2)
	fmt.Println(res1,res2)
}
func fuc(a, b int) (int,int) {
	return a+b,a-b
}

输出结果

3 -1

3)也可以无返回值:

package main

import "fmt"

func main() {
	fuc(1, 2)

}
func fuc(a, b int) {
	fmt.Println("传入的值为:",a,b)
}

输出结果

传入的参数为: 1 2

3. 引用(指针)传递

引用传递是将参数的内存地址传递到函数中,如果在函数中对该参数值进行了修改,那外层的该参数值也会被修改。

举例说明

现在定义一个函数接受一个参数a,在打印a的值后将a赋值为3

下面是值传递的写法:

package main

import "fmt"

func main() {
	a :=1

	fuc(a)
	fmt.Println("值未被修改,还是为:",a)

}
func fuc(a int) {
	fmt.Println("传入的值为:",a)
	a=3
}

输出结果

传入的值为: 1
值未被修改,还是为: 1

下面是引用传递的写法:

package main

import "fmt"

func main() {
	a :=1

	fuc(&a)
	fmt.Println("值被修改了,由1变为了:",a)

}
func fuc(a *int) {
	fmt.Println("传入的值为:",*a)
	*a=3
}

输出结果

传入的值为: 1
值被修改了,由1变为了 3

二、函数用法

1. Golang中没有class

要知道的是,Golang中并没有Python、Java中的类(class)。Golang一切的一切都是函数,如果要实现一个class的话,可以这样写:

package main

import (
	"fmt"
	"strconv"
)

// Test 等于声明一个类
type Test struct {
	name string
	age int
}

func (tes *Test) print() string{
	return "我的名字是:"+tes.name+",我的年龄为:"+strconv.Itoa(tes.age)
}

func main() {
	obj := &Test{"曲鸟",18} //初始化并赋值
	b := obj.print()
	fmt.Println(b)
}

输出结果

我的名字是:曲鸟,我的年龄为:18

类中函数带参数的写法:

func (tes *Test) sum(a,b int) string{//求a+b的和
	return "a+b="+strconv.Itoa(a+b)
}

func main() {
	obj := &Test{"曲鸟",18} 
	b := obj.sum(3,3) 
	fmt.Println(b)
}

2. 闭包

闭包可以理解为“定义在一个函数内部的函数“,闭包是一座用于连接函数内部和函数外部的桥梁

对于上面的第一个例子(输出结果如下):

我的名字是:曲鸟,我的年龄为:18

使用闭包可以这样写:

package main

import (
	"fmt"
	"strconv"
)

func add(name string, age int) func() string {
	return func() string {  //相当于下面main中的obj
		return "我的名字是:" + name + ",我的年龄为:" + strconv.Itoa(age)
	}
}

func main() {
	obj := add("曲鸟", 18)
	fmt.Println(obj())
}

3. Golang中函数传递函数

Golang可以将函数作为变量的值

package main

import (
	"fmt"
)

func add9(a int) int  {//
	return a+9
}
func main(){
	a := func(x int) int {  //将该函数赋值给a
		return add9(6)
	}
	fmt.Println("a+9的值为:",a(9))
}

输出结果

a+9的值为: 15

相关文章

微信公众号

最新文章

更多