Go Lang 函数

发布时间 2023-12-29 14:47:01作者: Terry841119
  • Go的函数不支持重载
  • 通过指针可以实现引用传递
  • 返回值如果定义了,在调用函数的时候必须要有变量去接返回值或者使用关键字"_"
  • 如果要跨包调用,首字母要的大写
  • 函数本身也可以作为参数
// function
package main

import "fmt"

//全局变量
var testInt int = 1

func main() {
    //局部变量
    var strA, strB string="strA","strB"

    res:=plus(10,20);
    fmt.Println(res);
    res=pluaAll(1,2,3,4,5,6,7,8);
    fmt.Println(res);

    fmt.Println(strA,strB)
    //strA和strB有作用域的关系无法实现交换
    exchangeStr(strA,strB)
    fmt.Println(strA,strB)
    //通过指针实现值的交换
    exchangeStr_point(&strA,&strB)
    fmt.Println(strA,strB)

    //将函数作为参数
    test02(20, test01);

    fmt.Println(testInt);
    //为testInt赋值
    assignTestInt(50);
    fmt.Println(testInt);
}

func plus(a int, b int) (int){
    return a+b;
}
// 可变参数
func pluaAll(args...int) (int) {
    var sum int=0;
    for i:=0;i<len(args);i++{
        sum+=args[i];
    }
    return sum
}

func exchangeStr(strA string,strB string) {
    var strTemp string;
    strTemp=strA;
    strA=strB;
    strB=strTemp;
    fmt.Println("inside exchangeStr",strA,strB)
}
func exchangeStr_point(strA *string, strB *string){
    var strTemp string;
    strTemp=*strA;
    *strA=*strB;
    *strB=strTemp;
}

func test01(a int){
    fmt.Println("test01, arg=", a);
}

//将函数作为参数
func test02(a int, testFunc func(int)){
    fmt.Println("test02, arg=", a);
    a=100;
    testFunc(a);
}
func assignTestInt(a int){
    testInt=a;
}