1. slice切片可以越界一位,比如:

      1. func main() {
      2. slice := []int{1, 2, 3}
      3. fmt.Println(slice[3:])
      4. }
      5. //[]

      数组长度为3,所以在查找时实际为slice[3:3],因为左闭右开,所以返回的为空切片。

      1. func main() {
      2. slice := []int{1, 2, 3}
      3. fmt.Println(slice[4:])
      4. }
      5. //panic: runtime error: slice bounds out of range [4:3]

      利用这个特性,在对切片元素删除时,可以这样:

      1. // 删除切片中的任意一个元素,包括最后一个元素,不用额外判断是不是最后一个元素
      2. slice = append(slice[:i], slice[i+1:]...)
    2. rune类型

    https://www.cnblogs.com/cheyunhua/p/16007219.html

    1. Go不允许函数嵌套,但可以通过匿名函数实现函数嵌套,匿名函数只能放在函数中以实现函数嵌套。如二叉树的遍历:

      1. func preorderTraversal(root *TreeNode) (res []int) {
      2. var traversal func(node *TreeNode)
      3. traversal = func(node *TreeNode) {
      4. if node == nil {
      5. return
      6. }
      7. res = append(res,node.Val)
      8. traversal(node.Left)
      9. traversal(node.Right)
      10. }
      11. traversal(root)
      12. return res
      13. }

      注:使用匿名函数嵌套,必须先声明在定义使用。以下方式定义会报错:

      1. func preorderTraversal(root *TreeNode) (res []int) {
      2. traversal := func(node *TreeNode) {
      3. if node == nil {
      4. return
      5. }
      6. res = append(res,node.Val)
      7. traversal(node.Left)
      8. traversal(node.Right)
      9. }
      10. traversal(root)
      11. return res
      12. }
    2. syntax error: non-declaration statement outside function body

    go语言变量赋值只能在方法内,当定义全局变量时只能通过 var 关键字来声明,而不能进行初始化
    https://blog.csdn.net/weixin_38055381/article/details/85060181

    1. 关于切片复制的问题

    力扣:77. 组合
    题解:https://leetcode-cn.com/problems/combinations/comments/1546037
    相关文章:
    golang切片地址问题(深拷贝与浅拷贝)
    Go的切片(进阶版)
    Golang中的三个点…有什么用?

    1. golang闭包

    Golang中闭包的理解
    Go 语言闭包详解
    golang中的闭包的意义和用法
    【golang/go语言】闭包(closure)
    Go语言闭包(Closure)——引用了外部变量的匿名函数

    1. go中的map如果查询不存在的键值对,不会报错,而是默认返回数据对应的空类型或零值,如果需要判断键值对是否存在,应该使用map提供的exist方法来判断。go中当向map查询不存在的键值对时不报错,可以避免程序在实际运行中因为查询不存在的键值对而导致程序崩溃,但也有一个缺点,就是因为查询不存在的键值对也能获取到结果,容易导致莫名其妙的bug。