package main
import (
"fmt"
"strconv"
)
func add() func(int) int {
n := 0
return func(a int) int {
n += a
return n
}
}
func main() {
fun := add()
fmt.Println(fun(1))
fmt.Println(fun(2))
fmt.Println(fun(3))
str2 := "hello和"
r := []rune(str2)
//for i := 0; i < len(r); i++ {
// fmt.Printf("%c", r[i])
//}
for _, v := range r {
fmt.Printf("%c", v)
}
fmt.Println(strconv.Atoi("1"))
defer func() {
if err := recover(); err != nil {
fmt.Println("error")
}
}()
//slice := make([]int, 3)
//var slice = make([]int, 4)
aaa := [3]int{111, 12, 2}
lc := aaa[0:3]
fmt.Printf("%p %p\n", &lc[0], &aaa[0])
lc = append(lc, 1)
fmt.Printf("%p %p\n", &lc[0], &aaa[0])
fmt.Print(lc)
aaa[0] = 333
fmt.Print(lc)
//slice = append(slice, ...)
//slice = append(slice, 46)
//slice[5] = 222
//fmt.Print(slice)
fmt.Print(aaa)
}
今天学习了一下go的基本语法,上面是我的学习记录,在学习的过程中,我快速的过了一遍go的基本语法操作如for switch if ,知道了for range的使用方式,它十分适合用来遍历数组以及map等数据结构
在学习的过程中,我知道了它与其他语言在语法上不同的一些区别,如在go里面没有 while 循环、do while 循环,只有唯一的一种 for 循环。最简单的 for 循环就是在 for 后面什么都不写,代表一个死循环。循环途中你可以用 break 跳出。然后是if语句,if 后面没有括号,这与其他语言并不相同。
数组
数组是一个具有编号且是固定长度的一个元素序列,使用起来并没有特别的方便,因为要自己初始化固定的长度如果越界是会爆error
切片
切片就不同于数组,它并不需要一个明确的长度来进行初始化然后也有更多丰富的操作。比如说我们可以用 make 来创建一个切片,可以像数组一样去取值,使用 append 来追加元素。但是进行append扩容操作的时候,需要自己讲返回的新切片接收。
map
map这个数据类型就是一个key value 的键值对,它能分别键值对进行操作,同时是无法重复key的, 我们可以从里面去存储或者取出键值对。也可以用 delete 从里面删除键值对,golang的map是完全无序的,遍历的时候不会按照字母顺序,也不会按照插入顺序输出,而是随机顺序。
函数
func funname() returnName {
}
函数的基本格式如上述所示,还是较好理解的。Golang 里面的函数原生支持返回多个值。在实际的业务逻辑代码里面几乎所有的函数都返回两个值,第一个是真正的返回结果,第二个值是一个错误信息。