zoukankan      html  css  js  c++  java
  • golang基础--func函数

    函数function

    • Go函数不支持 嵌套, 重载和默认参数

    • 支持以下特性:

      无须声明原型,不定长度长度变参,多返回值,命名返回值参数,匿名函数,闭包

    • 定义函数使用关键字func,且左侧大括号不能另起一行

      package main
      
      import (
      	"fmt"
      )
      
      func main() {
      	a, b := 1, 2
      	D(a, b) //传递可变长度变量,无法修改slice索引,无法根本改变slice值
      	s1 := []int{1, 2, 3}
      	D1(s1) //传递slice作为参数,修改索引值可以达到修改原始slice的效果
      	x := 1
      	D2(&x) //传递x的内存地址
      }
       //参数返回值
      func A(a int, b string) int {
      	return a
      }
      
      //多个返回值
      func B() (a, b, c int) { //没有参数,
      	a, b, c = 1, 2, 3 //因为返回值中已经有a,b,c占用了内层,所以后面直接赋值
      	return a, b, c    //可以省略a,b,c
      }
      
      //不定长变参,即int参数可以是多个,传进来的是个slice类型
      func C(b string, a ...int) { 
      	fmt.Println(a) //输出 [1,2,3,4,5]
      }
      
      /不定长参数传递,传入变量
      func D(s ...int) { 
      	fmt.Println(s)
      	s[0] = 3
      	s[1] = 4
      	fmt.Println(s)
      }
      
      //传递slice作为参数,拷贝的是slice的内存地址
      func D1(s []int) { 
      	s[0] = 4
      	s[1] = 5
      	fmt.Println(s)
      }
      
      //指针类型传递,可以达到修改变量值的目的
      func D2(a *int) { 
      	*a = 2 //内存a的值变为2
      	fmt.Println(*a)
      
      }
      
      /*输出
      D---->		[1 2]  //slice
      			[3 4]  //slice
      			 1 2	//int
      D1---->		[4 5 3]
      
      D2---->		2		//参数为指针可以修改变量值
      */
      
    • 函数也可以作为一种类型使用

      package main
      import "fmt"
      
      func main() {
      	a := A //函数作为类型使用
      	a()
      
      }
      
      func A() {
      	fmt.Println("Func A")
      }
      
      //指针类型传递,可以达到修改变量值的目的
      
      /*输出
      a()---->	Func A
      */
      

      函数名可以理解为内存地址的编号,可以被用来赋值操作。

    • 匿名函数,不同与python语言有关键字lamada,go的匿名函数显的更直白,没有函数名,只需要func关键字就可以
      简单构建一个匿名函数,如下

      // 匿名函数
      package main
      import "fmt"
      
      func main() {
      	a := func() { //没有函数名,直接进行赋值给变量
      		fmt.Println("Func A")
      	}
      	a() //调用匿名函数
      }
      
    • 函数的闭包:又称嵌套函数,返回的类型是一个函数,再将函数赋值给变量,重新传入参数执行

      package main
      import "fmt"
      func main() {
      	f := closure(10)
      	fmt.Println(f(3))
      	fmt.Println(f(4))
      }
      
      func closure(x int) func(int) int { // 函数作为返回类型
      	return func(y int) int {
      		return x + y
      	}
      }
      /*输出
      f(3)--->	13
      f(4)--->	14
      */
      
  • 相关阅读:
    【OpenCV学习】XML的读写
    【学术研究基础】聚类分析学习
    【OpenCV学习】Laplace变换(视频边界检测)
    【OpenCV学习】DFT变换
    【英语天天读】生命的起跑线
    【OpenCV学习】yml的读取
    【OpenCV学习】Kmean均值聚类对图片进行减色处理
    【英语天天读】born to win
    WinFrom 中 label背景透明
    dev GridControl双击行事件
  • 原文地址:https://www.cnblogs.com/failymao/p/9297050.html
Copyright © 2011-2022 走看看