Go语言之函数使用(5)函数使用细节和注意事项

1、函数的形参列表可以是多个,返回值列表也可以是多个。

2、形参列表和返回值列表的数据类型可以是值类型和引用类型。

3、函数的命名遵循标识符命名规范,首字母不能是数字,首字母大写该函数可以被本包文件和其它包文件使用,类似public , 首字母小写,只能被本包文件使用,其它包文件不能使用,类似private。

4、函数中的变量是局部的,函数外不生效

func test() {
    var num1 = 10 // num1作用域则只在test函数
}

5、基本数据类型和数组默认都是值传递的,即进行值拷贝。在函数内修改,不会影响到原来的值。

6、如果希望函数内的变量能修改函数外的变量,可以传入变量的地址&,函数内以指针的方式操作变量。从效果上看类似引用

package main
import (
    "fmt"
)
//如果希望函数内的变量能修改函数外的变量,
//可以传入变量的地址&,函数内以指针的方式操作变量。从效果上看类似引用 


func changeNum2(n *int) {
    *n++ // *n 表示取值
    fmt.Printf("n的本身的存储空间地址%p n的存储空间值%v n指向的值%v", &n, n, *n)
    fmt.Println("changeNum2 n ", *n) 
}
func main() {
n1 := 20

    fmt.Printf("n1的地址%p\n", &n1)
    changeNum2(&n1)
    fmt.Println("main n1", n1)
}

7、Go函数不支持函数重载

func changeNum(n int) {
    n++
}

//go中不支持函数重载.
// func changeNum(n int, n2 int) {
//  n++
//  n2++
// }

8、在Go中,函数也是一种数据类型,可以赋值给一个变量,则该变量就是一个函数类型的变量了。通过该变量可以对函数调用

//在Go中,函数也是一种数据类型,可以赋值给一个变量,
//则该变量就是一个函数类型的变量了。通过该变量可以对函数调用

func getSub(n1 int, n2 int) int {
    return n1 - n2
}

func main() {

    //在go中函数也是一种数据类型
    myFun1 := getSub
    //调用一把
    fmt.Printf("myFun的类型%T\n", myFun1)
    fmt.Println("myfun1结果是", myFun1(10, 8))
}

9、函数既然是一种数据类型,因此在Go中,函数可以作为形参,并且调用

//函数既然是一种数据类型,因此在Go中,函数可以作为形参,并且调用
func testFun(fun func(int, int) int, num1 int, num2 int)  int {

    return fun(num1, num2)
}

    //函数可以作为形参
    res1 := testFun(myFun1, 100, 40) //页可以直接传入 getSub
    fmt.Println("res1结果=", res1)

10、为了简化数据类型定义,Go支持自定义数据类型

基本语法:type 自定义数据类型名 数据类型 // 理解: 相当于一个别名

案例:type myInt int // myInt 就等价 int 来使用了, 注:作为类型使用时,仍需强转

案例:type mySum func (int, int) int // 这时 mySum 就等价 一个 函数类型 func (int, int) int

//为了简化数据类型定义,Go支持自定义数据类型

    var num100 int  = 888
    // type integer int  的含义
    // 1. 自定义了一个数据类型 integer
    // 2. integer 的类型就是int
    // 3. 当进行赋值操作时,编译器仍然认为是不同的数据类型,即需要强转
    type integer int 
    var num200 integer = 999
    num200 = integer(num100)
    fmt.Printf("num100=%d num200=%d\n", num100, num200)

11、支持对函数返回值命名

//支持对函数返回值命名
func getSumAndSub2(n1 int, n2 int) (sum int, sub int) {
    sum = n1 + n2
    sub = n1 - n2
    return
}
//支持对函数返回值命名

    sum2, sub := getSumAndSub2(1, 9)
    fmt.Printf("支持对函数返回值命名 sum=%d sub=%d\n", sum2, sub)
    fmt.Println()

12、使用 _ 标识符,忽略返回值

func cal(n1 int ,n2 int) (sum int , sub int) {
sum = n1 + n2
sub = n1 - n2
return
}
func main() {
res1, _ := cal(10, 20)
fmt.Printf("res1= %d ", res1)
}

13、Go支持可变参数

//支持0到多个参数
func sum(args... int) sum int { 
}
//支持1到多个参数
func sum(n1 int, args... int) sum int { 
}

说明:
1)args 是slice 切片, 通过 args[index] 可以访问到各个值。
案例演示: 编写一个函数sum ,可以求出 1到多个int的和

//Go支持可变参数
//编写一个函数sum ,可以求出  1到多个int的和
//args... 表示这是一个可变参数 args程序员写,可以自行决定
//... 是固定写法

func sum(n1 int, args... int) (sum int) {

    sum = n1
    //对args遍历
    for i := 0; i < len(args); i++ {
        sum += args[i]
    }
    //也可以使用 for--range 遍历
    return 
}
    //测试函数的可变参数
    res2 := sum(1, 2, 3, 10)
    fmt.Printf("res2=%d", res2)
    fmt.Println()
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值