一, 简介
在 go 语言中, 函数的功能是非常强大的, 以至于被认为拥有函数式编程语言的多种特性.
二, 介绍
, 一个程序中包含了很多的函数: 函数式基本的代码块
, 函数编写的顺序是无关紧要的; 鉴于可读性的需求, 最好把 main() 函数写在文件的前面
, 编写函数的目的, 在于封装, 将一个功能编写到一个函数中, 已完成功能的封装, 已便重复利用
三, 函数的定义
格式
func functionName([parameter list]) [return_type]{
函数体
}
不正确的定义方式
- func G() // "{" 必须与函数名在同一行
- {
- }
函数定义解析
,func : 关键字 , 函数声明, 表明这是一个函数
,functionName : 函数名
,paramete list : 函数参数, 非必须
,return_type : 返回类型, 函数返回值 (非必须)
, 函数体: 函数定义的代码的集合
如下
- func sum(num1,num2 int)int{
- return num1 + num2
- }
四, 函数调用
函数名 ([参数])
- package main
- import "fmt"
- func main(){
- n1,n2 := 2,3
- fmt.Println(sum(n1,n2))
- }
- func sum(num1,num2 int)int{
- return num1 + num2
- }
五, 函数参数
单个参数
- func maxArr(nums [5]int)int{
- var num int
- for _,v := range nums{
- if num <v{
- num = v
- }
- }
- return num
- }
两个参数
- // func max(num1,num2 int)int{} // 这个是推荐写法, 与下面的方式一样
- func max(num1 int,num2 int)int{
- if num1 < num2 {
- return num2
- } else{
- return num1
- }
- }
三个参数
- // 返回两个参数
- func calc(num1,num2 int,operator string) (int,bool){
- switch operator {
- case "+":
- return num1+num2,true
- case "-":
- return num1-num2,true
- case "*":
- return num1*num2,true
- case "/":
- return num1/num2,true
- default:
- return 0,false
- }
- }
可变长参数
- // 可变长参数 .. s 实际类型是数组, 只是不确定数组的个数
- func concat(s ...string)string{
- str := ""
- for _,v := range s{
- str += v
- }
- return str
- }
实例
- package main
- import "fmt"
- func main(){
- arr := [5]int{1,2,3,4,5}
- fmt.Println(maxArr(arr))
- fmt.Println(max(2,3))
- fmt.Println(calc(7,8,"+"))
- fmt.Println(concat("jmz","is","man"))
- }
- // 单个参数
- func maxArr(nums [5]int)int{
- var num int
- for _,v := range nums{
- if num < v{
- num = v
- }
- }
- return num
- }
- // 两个参数
- // func max(num1,num2 int)int{} // 这个是推荐写法, 与下面的方式一样
- func max(num1 int,num2 int)int{
- if num1 < num2 {
- return num2
- } else{
- return num1
- }
- }
- // 多个参数
- // 返回两个参数
- func calc(num1,num2 int,operator string) (int,bool){
- switch operator {
- case "+":
- return num1+num2,true
- case "-":
- return num1-num2,true
- case "*":
- return num1*num2,true
- case "/":
- return num1/num2,true
- default:
- return 0,false
- }
- }
- // 可变长参数 .. s 实际类型是数组, 只是不确定数组的个数
- func concat(s ...string)string{
- str := ""
- for _,v := range s{
- str += v
- }
- return str
- }
结果:
- 5
- 3
- 15 true
- jmz is man
六, 函数返回值
返回一个参数
- func min(nums ...int)int{
- num := nums[0]
- for _,v:=range nums{
- if num> v{
- num = v
- }
- }
- return num
- }
返回两个参数
- func swap(x int,y int)(int,int){
- return y,x
- }
命名函数
函数在调用阶段就已经赋予的返回初始零值
函数会直接返回已经命名的变量
- func calc(num1,num2 int,operator string) (num int,ok bool){
- switch operator {
- case "+":
- num = num1+num2
- ok = true
- case "-":
- num = num1-num2
- ok = true
- case "*":
- num = num1*num2
- ok = true
- case "/":
- num = num1/num2
- ok = true
- }
- return
- }
实例
- package main
- import "fmt"
- func main(){
- fmt.Println(min(4,19,34,12,5,10))
- num1,num2 := 3,5
- num1,num2 = swap(num1,num2)
- fmt.Println(num1,num2)
- num,ok := calc(3,4,"+")
- fmt.Println(num,ok)
- }
- // 返回一个参数
- func min(nums ...int)int{
- num := nums[0]
- for _,v:=range nums{
- if num> v{
- num = v
- }
- }
- return num
- }
- // 返回两个参数
- // 调换函数
- func swap(x int,y int)(int,int){
- return y,x
- }
- // 命名返回值
- // 函数在调用阶段就已经赋予的返回初始零值
- func calc(num1,num2 int,operator string) (num int,ok bool){
- switch operator {
- case "+":
- num = num1+num2
- ok = true
- case "-":
- num = num1-num2
- ok = true
- case "*":
- num = num1*num2
- ok = true
- case "/":
- num = num1/num2
- ok = true
- }
- return
- }
结果:
4
5 3
7 true
来源: http://www.bubuko.com/infodetail-3002540.html