什么是函数
- 函数是基本的代码块,用于执行一个任务
- Go语言最少有个main()函数
- 你可以通过函数来划分不同功能,逻辑上每个函数执行的是指定的任务
- 函数声明告诉了编译器函数的名称,返回类型和参数
package main
import "fmt"
// func定义 一个add的函数 (定义两个变量 int型) 返回值类型为int
//
func add(a, b int) int {
c := a + b
//设置返回值为c
return c
}
func main() {
//调用函数 add的方法 打印输出
fmt.Println(add(1, 2))
}
函数的声明
Go语言函数定义格式如下:
- 无参无返回值函数
- 有一个参数的函数
- 有两个参数的函数
- 有一个返回值的函数
- 有多个返回值的函数
package main
import "fmt"
func main() {
//函数的调用 - 无参无返回值函数
printfinfo()
//- 有一个参数的函数
msg := "didididi"
myprint(msg)
// - 有一个参数的函数
num := add2(1, 2)
fmt.Println(num)
//- 有多个返回值的函数
a := "狂神说"
b := "学相伴"
fmt.Println(add3(a, b))
}
// - 无参无返回值函数
func printfinfo() {
fmt.Println("hello,学相伴")
}
// - 有一个参数的函数
func myprint(str string) {
fmt.Println(str)
}
// - 有两个参数的函数
// - 有一个返回值的函数
func add2(a, b int) int {
c := a + b
//设置返回值为c
return c
}
// - 有多个返回值的函数
func add3(x, y string) (string, string) {
//设置返回值为c
return y, x
/*
输出结果:
hello,学相伴
didididi
3
学相伴 狂神说
*/
}
package main
func main() {
//实际参数:调用函数时,传给形参实际数据叫做实际参数-num1,num2
max(1, 2)
}
// 形式参数:定义函数时,用来接收外部传入数据的参数-num1,num2
func max(num1, num2 int) {
}
可变参数
概念:一个函数的参数类型确定,但个数不确定,就可以使用可变参数
package main
import "fmt"
func main() {
getSum(1, 2, 4, 5, 100)
}
// 定义一个求和函数getsum方法 定义一个可变参数num
func getSum(num ...int) {
sum := 0
for i := 0; i < len(num); i++ {
//遍历输出每一个传递的值
fmt.Println(num[i])
//sum=sum+num[i]
sum += num[i]
}
fmt.Printf("求和函数:sum=%d", sum)
}
/*
输出结果:
1
2
4
5
100
求和函数:sum=112
*/
注意事项:
- 如果一个函数的参数时可变参数,同时还有其他的参数,可变参数要放在列表的最后
- 一个函数的参数列表最多只能有一个可变参数
参数传递
按照数据的存储特点来分:
- 值类型的数据:操作的是数据本身、int .string、bool、float64、array...
- 引用类型的数据:操作的是数据的地址slice、map、 chan....
值传递
package main
import "fmt"
func main() {
// 定义一个数组 [个数] 类型 {}
arr := [4]int{1, 2, 3, 4}
fmt.Println(arr)
update(arr)
fmt.Println("调用修改后的数据", arr)
}
func update(arr2 [4]int) {
fmt.Println("arr接受的数据", arr2)
arr2[0] = 100
fmt.Println("arr修改后的数据", arr2)
}
/*
输出结果:
[1 2 3 4]
arr接受的数据 [1 2 3 4]
arr修改后的数据 [100 2 3 4]
调用修改后的数据 [1 2 3 4]
*/
引用传递
package main
import "fmt"
func main() {
// 切片 可以扩容的数组
s1 := []int{1, 2, 3, 4}
fmt.Println("默认的数据", s1)
//传入的是引用类型的数据,地址
update2(s1)
fmt.Println("调用后的数据", s1)
}
func update2(s2 []int) {
fmt.Println("传递后的数据", s2)
s2[0] = 100
fmt.Println("修改后的数据", s2)
}
函数中变量的作用域
作用域:变量可以使用的范围
局部变量:函数内部定义的变量,叫做局部变量
全部变量:函数外部定义的变量,叫做全局变量
package main
import "fmt"
// 全局变量 整个类都可以使用
var num int = 30
func main() {
// 局部变量 temp 只能在temp方法中使用
temp := 100
if b := 1; b < 10 {
temp := 30
fmt.Println("局部变量b:", b)
fmt.Println("局部变量temp:", temp)
}
fmt.Println(temp)
// 调用f1,f2方法
f1()
f2()
}
func f1() {
fmt.Println(num)
}
func f2() {
fmt.Println(num)
}
标签:函数,int,fmt,Println,详解,func,Go,狂神,main
From: https://www.cnblogs.com/DuPengBG/p/16892392.html