Go学习笔记-函数

函数

1. 函数的定义

函数用于对代码块的逻辑封装,提供代码复用的最基本方式

语法

func  函数名称(参数) [返回值类型]{
        函数体
}
函数名: 满足标识符规范
形参:  无形参
      有形参, 名字类型多个形参使用逗号分隔 
返回值 
     无返回值
        返回值省略
     有返回值: 
        return关键字
     必须指定返回值类型 
           只有一个返回值返回值只需要写类型可以省略小括号
           如果有多个返回值需要用小括号包含所有返回值类型 
           return 返回值数量必须和函数定义返回值类型数量一致
      命名返回值 
           返回值定义值为每个返回值指定了变量名称及类型,用括号包含
           返回是只用指定return
调用:  
    接收返回值  = 函数名(实参)
非可变参数:  
    实参数量必须与形参一致 => 实参  按照顺序传递给形参 
可变参数: 
    可变参数定义之前的变量  必须指定实参传递
    可变参数部分可以传递任意多个值(可使用切片解包)
返回值: 
   无返回值不能接收 
   有返回值 必须用相同数量的变量接收返回值(按照返回值的顺序赋值给可接收的变量)

2. 函数调用

package main

import "fmt"

// 定义hello,无参,无返回值
func  sysHello(){
	fmt.Println("hello")
}

//有参数,无返回值
func  sayHi(name string){
	fmt.Println("Hi",name)
}

//有返回值 add 
func  add(a int,b int)int{
	return  a  + b  //return  关键字用来向函数调用返回结果
}

func  main(){
	// 调用函数,函数名称(参数[实参])
	sysHello()
	sayHi("xingxing")
	c := add(4,3 )
    fmt.Println(c)
}

package main

import (
      "fmt"
)

func  sayHello(){
      fmt.Println("hello")
}

func add(a,b int) int{
      return a + b
}

//返回多个值
func op(a,b int)(int,int,int,int){
      return  a + b, a - b , a * b, a/b
}

// 命名返回值
func opv2(a,b int)(sum int, sub int,mul int, div int){
      sum  = a + b
      sub  = a - b
      mul  = a * b
      div  = a /b
      return
}


func main(){
      sayHello()
      add(1,2)
      c := add(3,4)
      fmt.Println(c)
      fmt.Println(op(4,2))
      a,b,c,d :=op(8,2)
      fmt.Println("a=",a,"b=",b,"c=",c,"d=",d)

      fmt.Println(opv2(3,2))

}

3 汉诺塔算法(递归)

package main

import "fmt"

func  tower(a,b,c string,layer int){
   if  layer ==1 {
      fmt.Println(a,"->",c)
      return
   }
   tower(a,c,b,layer-1)
   fmt.Println(a,"->",c)
   tower(b,a,c,layer-1)
}

func main() {
  tower("A","B","C",3)

}

4 冒泡

package main

import "fmt"

func bubble(nums []int){
      for j := 0;j<len(nums)-1;j++{
            for i :=0 ; i<len(nums)-1-j;i++{
                  if nums[i] > nums[i+1] {
                        nums[i],nums[i+1]=nums[i+1],nums[i]
                  }
            }
      }
      fmt.Println(nums)

}

func main() {
      nums :=[]int{5,4,3,2}
      fmt.Println(nums)
      nums =[]int{100,90,88,70,1000,100001}
      bubble(nums)

}

5.函数类型

package main

import "fmt"

func  add(a, b int) int{
   return  a + b
}

func  mul(a,b int) int{
   return  a * b
}



func  main(){
   var f  func(int, int) int = add
   var  fs []func(int,int)int
   fs = append(fs,add,mul)

   c := f(2,3)
   fmt.Println(c)
    for _,f :=range fs {
       fmt.Println(f(2,3))
   }


}

6. 匿名函数

package main

import "fmt"


func  main(){
c := func(){
   fmt.Println("我是匿名函数")
}

fmt.Printf("%T\n",c)
c()


}

7.引用类型

package main

import "fmt"

func main() {

     name :="kk"
     nums  :=[]int{}
     func(){
      fmt.Println(name,nums)
      name = "silence"
      nums = []int{1,2,3}
      fmt.Println(name,nums)

     }()
     fmt.Println(name,nums)


}
comments powered by Disqus