### 声明函数
```
func 函数名(参数列表) (返回参数列表) {
函数体
}
func 函数名() {
函数体
}
函数名:字母数字下划线组成,不能数字开头。同个包内函数名不能重复
参数列表:由参数名和类型组成,比如(x int) 。同类型可以简写,比如(x,y,int)
返回参数列表:由返回的参数名称和类型组成,比如(num,int)。可以简写只写返回参数的类型,比如(int)
函数体:若函数有返回参数的列表,必须有return语句返回,比如 return num。使用带有变量名返回值时,可以直接使用return。
```
```
package main
import "fmt"
func addsub(x int, y int) (num int, sub int) {
// x, y 形参
num = x + y
sub = x * y
return num, sub
}
func main() {
a := 5 //a,b实参
b := 10
num, sub := addsub(a, b)
fmt.Println(num, sub)
// 15 50
}
```
### 函数变量
> **var 变量名称 func(参数列表) (返回参数列表)**
> **var 变量名称 func()**
> **变量名 := 函数名**
> 然后调用,其实都差不多,声明了一个变量调用
```
package main
import "fmt"
func addsub(x int, y int) (num int, sub int) {
// x, y 形参
num = x + y
sub = x * y
return num, sub
}
func main() {
a := 5 //a,b实参
b := 10
// var result func(x int, y int) (num int, sub int)
// result = addsub
result := addsub
num, sub := result(a, b)
fmt.Println(num, sub)
// 15 50
}
```
### 可变参数
```
func 函数名 (固定参数列表,v ...T) (返回参数列表) {
函数体
}
v,变量名
T,类型
...,参数
```
```
package main
import "fmt"
func add(slices ...int) int {
sum := 0
fmt.Println("传入的切片变量", slices)
// 传入的切片变量 [1 2 3 4 5 6 7 8 9 10]
for _, value := range slices {
// "_" 这个是可变参数
sum += value
}
return sum
}
func main() {
fmt.Println("1+2+3......+9+10=", add(1, 2, 3, 4, 5, 6, 7, 8, 9, 10))
// 1+2+3......+9+10= 55
}
```
```
package main
import "fmt"
func main() {
nums := [...]int{1, 2, 3, 4, 5, 6, 7, 8, 9, 10}
sum := 0
for _, value := range nums {
sum += value
}
fmt.Println(sum)
//55
}
```
可变参数还是牛逼啊!!!!
- 安装开发环境
- 安装开发环境
- 安装详细教程
- 引入包
- Go语言基础
- 基本变量与数据类型
- 变量
- 数据类型
- 指针
- 字符串
- 代码总结
- 常量与运算符
- 常量
- 运算符
- 流程控制
- if判断
- for循环
- switch分支
- goto跳转
- 斐波那契数列
- Go语言内置容器
- 数组
- 切片
- 映射
- 函数
- 函数(上)
- 函数(中)
- 函数(下)
- 小节
- 包管理
- 结构体
- 结构体(上)
- 结构体(中)
- 结构体(下)
- 小节
- 错误处理
- 错误处理
- 宕机
- 错误应用
- 小节
- 文件操作
- 获取目录
- 创建和删除目录
- 文件基本操作(上)
- 文件基本操作(中)
- 文件基本操作(下)
- 处理JSON文件
- 接口与类型
- 接口的创建与实现
- 接口赋值
- 接口嵌入
- 空接口
- 类型断言(1)
- 类型断言(2)
- 小节
- 并发与通道
- goroutine协程
- runtime包
- 通道channel
- 单向通道channel
- select
- 线程同步
- 多线程的深入学习
- http编程
- http简介
- Client和Request
- get请求
- post请求
- 模块函数方法
- 模块
- fmt库,模块
- 项目练习
- 爬虫:高三网
- 爬虫:快代理
- 爬虫:快代理2
- 多线程:通道思路
- 多线程爬虫:快代理