首页 > 其他 > 详细

go函数初级

时间:2019-03-28 10:59:02      阅读:104      评论:0      收藏:0      [点我收藏+]

一、简介

在go语言中,函数的功能是非常强大的,以至于被认为拥有函数式编程语言的多种特性。

二、介绍

1、一个程序中包含了很多的函数:函数式基本的代码块
2、函数编写的顺序是无关紧要的;鉴于可读性的需求,最好把main()函数写在文件的前面
3、编写函数的目的,在于封装,将一个功能编写到一个函数中,已完成功能的封装,已便重复利用

三、函数的定义

  • 格式
func functionName([parameter list]) [return_type]{
    函数体
}
  • 不正确的定义方式
func G()   // "{" 必须与函数名在同一行
{
}
  • 函数定义解析
1、func :关键字 ,函数声明,表明这是一个函数
2、functionName : 函数名
3、paramete list :函数参数,非必须
4、return_type :返回类型,函数返回值(非必须)
5、函数体:函数定义的代码的集合
  • 如下
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

go函数初级

原文:https://www.cnblogs.com/xiaobaiskill/p/10613457.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!