# golang-basic **Repository Path**: guonan01/golang-basic ## Basic Information - **Project Name**: golang-basic - **Description**: golang-basic - **Primary Language**: Go - **License**: Not specified - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2022-08-26 - **Last Updated**: 2022-12-04 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # GO语言基础 ## 常量 > 常量命名不要大写,GO语言中大写有特殊含义。 > const数值可以作为各种类型使用,自动转换,不用强转。 ## 枚举 ```go const ( cpp = "cpp" java = iota golang js ) fmt.Println(cpp, java, golang, js) ``` ```go const ( b = 1 << (10 * iota) kb mb gb tb pb ) fmt.Println(b, kb, mb, gb, tb, pb) ``` ## IF-ELSE条件判断 > - if的条件里可以做赋值操作 > - if的条件里赋值的变量作用域只在这个if语句里 ```go const filename = "abcd.txt" if contents, err := ioutil.ReadFile(filename); err != nil { fmt.Println(err) } else { fmt.Printf("%s\n", contents) } ``` ## SWITCH语句 > switch中不需要break,他会自动break,除非使用`fallthrough` ```go func eval(a, b int, op string) int { var result int switch op { case "+": result = a + b case "-": result = a - b case "*": result = a * b case "/": result = a / b default: panic("unsupported operator: " + op) } return result } ``` ## For循环语句 > for的条件里不需要括号 ```go func forTest() int { sum := 0 for i := 1; i <= 100; i++ { sum += i } return sum } ``` > 省略初始条件,相当于while语句 ```go func convertToBin(v int) string { result := "" for ; v > 0; v /= 2 { result = strconv.Itoa(v%2) + result } fmt.Println(result) return result } ``` ```go func printFile(filename string) { file, err := os.Open(filename) if err != nil { panic(err) } scanner := bufio.NewScanner(file) for scanner.Scan() { fmt.Println(scanner.Text()) } } ``` > 无限循环,死循环 ```go for { fmt.Println("abc") } ``` ## 函数 ## 指针 ## 数组 > [10]int和[20]int是不同类型 > 调用func f(arr [10]int)会拷贝数组【值传递】,可以设置指针转为引用类型 ```go var arr1 = [5]int{} arr2 := [3]int{2, 3, 4} arr3 := [...]int{10, 20, 30} fmt.Println(arr1, arr2, arr3) var grid [4][5]int // 四行五列 fmt.Println(grid) for i := 0; i < len(arr3); i++ { fmt.Println(arr3[i]) } for i, item := range arr3 { fmt.Println(i, item) } ``` ## 切片 > 引用传递 ```go arr := [...]int{0, 1, 2, 3, 4, 5, 6, 7} s := arr[2:6] // [2 3 4 5] fmt.Println("arr[2:6]", s) // arr[:6] [0 1 2 3 4 5] fmt.Println("arr[:6]", arr[:6]) // arr[2:] [2 3 4 5 6 7] fmt.Println("arr[2:]", arr[2:]) //arr[:] [0 1 2 3 4 5 6 7] fmt.Println("arr[:]", arr[:]) ```