diff --git a/arrays.go b/arrays.go new file mode 100644 index 0000000000000000000000000000000000000000..7d2e216d0e4ab16be303c74123dc020ba81a83c6 --- /dev/null +++ b/arrays.go @@ -0,0 +1,59 @@ +package main + +import "fmt" + +func arrDefouat() { + var arr1 [3]int // 可以不给初值 + arr2 := [4]int{1, 2, 3, 4} // := 必须给赋值 + arr3 := [...]int{4, 3, 4, 4, 5, 6} + // 字符串数组 + var s1 = [2]string{"hello", "world"} + var s2 = [...]string{"你好", "世界"} + var s3 = [...]string{1: "世界", 0: "你好"} + s4 := [...]string{"你好", "世界"} + + var grid [5][4]int + + fmt.Println(arr1, arr2, arr3) + fmt.Println(grid) + + fmt.Println(s1, s2, s3, s4) + + // + for i := 0; i < len(arr3); i++ { + fmt.Println(arr3[i]) + } + //只要下标 + for i := range arr3 { + fmt.Println(arr3[i]) + } + // 下标 与 值 + for i, v := range arr3 { + fmt.Println(i, v) + } + // 只要值 + for _, v := range arr3 { + fmt.Println(v) + } + +} + +//[4]int 为值类型 +func printArray(arr *[4]int) { + arr[0] = 99 + for i, v := range arr { + fmt.Println(i, v) + } +} +func main() { + arrDefouat() + var arr1 [4]int // 可以不给初值 + arr2 := [4]int{1, 2, 3, 4} // := 必须给赋值 + arr3 := [...]int{4, 3, 4, 4} + printArray(&arr1) + printArray(&arr2) + printArray(&arr3) + + fmt.Println(arr1, arr2, arr3) + +} diff --git a/func.go b/func.go new file mode 100644 index 0000000000000000000000000000000000000000..8408d2a3f34f6f474f4b1fc79b0ee5933d1e351d --- /dev/null +++ b/func.go @@ -0,0 +1,83 @@ +package main + +import ( + "fmt" + "reflect" + "runtime" +) + +/* 返回值 ,可把错误直接返回,不让程序中断执行 */ +func eval(a, b int, op string) (int, error) { + switch op { + case "+": + return a + b, nil + case "-": + return a - b, nil + case "*": + return a * b, nil + case "/": + + // 返回多个值时,可用下划线 _ 代替不需要的返回值 + q, _ := div(78, 9) + return q, nil + default: + // 程序出错,中断执行 + //panic(" unsupported opertion:"+op) + return 0, fmt.Errorf(" unsupported opertion:%s", op) + } +} + +/*返回两个值*/ +func div(a, b int) (q, r int) { + return a / b, a % b +} + +/* op 为入的函数*/ +func apply(op func(int, int, string) (int, error), a, b int, o string) int { + // 获取被调用的函数名 + p := reflect.ValueOf(op).Pointer() // 获取函数指针 + opName := runtime.FuncForPC(p).Name() + fmt.Printf(" calling function %s with args (%d,%d)", opName, a, b) + if result, err := op(a, b, o); err != nil { + return 0 + } else { + return result + } +} +func swap(a, b *int) { + *b, *a = *a, *b +} + +func main() { + + if result, error := eval(3, 6, "x"); error != nil { + fmt.Printf("error:%s", error) + } else { + fmt.Println(result) + } + + fmt.Println(eval(0, 545, "/")) + + fmt.Println(div(15, 9)) + // 第一种调用方式 + fmt.Println(apply(eval, 3, 4, "+")) + //匿名函数方式 + fmt.Println( + apply( + func(a int, b int, o string) (int, error) { + if a == 0 { + return 0, fmt.Errorf("xxxxxxxx %s", o) + } + return a + b, nil + }, + 100, + 90, + "+", + ), + ) + + a, b := 10, 20 + swap(&a, &b) + fmt.Println(a, b) + +}