65_Go基础_1_32 函数变量

 1 package main
 2 
 3 import "fmt"
 4 
 5 func main() {
 6     /*
 7         Go语言的数据类型:
 8 
 9             数值类型:整数,浮点
10                 进行运算操作,加减乘除,打印
11             字符串:
12                 可以获取单个字符,截取子串,遍历,strings包下的函数操作。。
13             数组,切片,map。。
14                 存储数据,修改数据,获取数据,遍历数据。。。
15             函数:
16                 加(),进行调用
17 
18             注意点:
19                 函数作为一种复合数据类型,可以看做是一种特殊的变量。
20                     函数名():将函数进行调用,函数中的代码会全部执行,然后将return的结果返回给调用处
21                     函数名:指向函数体的内存地址
22 
23     */
24 
25     // 1.整型
26     a := 10
27     //运算:
28     a += 5
29     fmt.Println("a:", a)
30 
31     // 2.数组,切片,map。。容器
32     b := [4]int{1, 2, 3, 4}
33     b[0] = 100
34     for i := 0; i < len(b); i++ {
35         fmt.Printf("%d\t", b[i])
36     }
37     fmt.Println()
38 
39     // 3.函数做一个变量
40     fmt.Printf("%T\n", fun1) // func(int, int)
41     fmt.Println(fun1)        // fun1  0x31e1c0,看做函数名对应的函数体的地址
42 
43     // 4.直接定义一个函数类型的变量
44     var c func(int, int)
45     fmt.Println(c) // <nil> 空
46 
47     // var d  string
48     // d = "hello"
49     c = fun1       // 将fun1的值(函数体的地址)赋值给c
50     fmt.Println(c) // 0x31e1c0
51 
52     fun1(10, 20) // a:10,b:20
53     c(100, 200)  // c也是函数类型的,加小括号也可以被调用  a:100,b:200
54 
55     res1 := fun2       // 将fun2的值(函数的地址)赋值给res1,res1和fun2指向同一个函数体
56     res2 := fun2(1, 2) // 将fun2函数进行调用,将函数的执行结果赋值给res2,相当于:a+b
57     fmt.Println(res1)  // 0x31e1a0
58     fmt.Println(res2)  // 3
59 
60     fmt.Println(res1(10, 20)) // 也可以被调用 30
61     // res2() //cannot call non-function res2 (type int)
62 }
63 func fun2(a, b int) int {
64     return a + b
65 }
66 func fun1(a, b int) {
67     fmt.Printf("a:%d,b:%d\n", a, b)
68 }
原文地址:https://www.cnblogs.com/luwei0915/p/15629779.html