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 }