• 函数
    • 返回值带有变量名

      return时可以不写返回值,在返回值位置声明即可

      func namedRetvalue() (a, b int) {
        a = 1
        b = 2
        return
      }
      
    • 匿名函数
      • 定义时调用
        func(data int) {
          fmt.Println(data)
        }(100)
        
      • 匿名函数被赋值与调用
        f := func(data int) {
          fmt.Println(data)
        }
        f(100)
        
      • 匿名函数作为回调函数
        func visit(list []int, f func(int)) {
          for -, v := raneg list{
            f(v)
          }
        }
        
        visit([]int{1,2,3,4}, func(v int){
          fmt.Println(v)
        })
        
    • 可变参数
      func myfunc(args ...int) {
        for -, arg := range args {
          fmt.Println(arg)
        }
      }
      

      任意类型的可变参数

      func myfunc(args ...interface{}) {
        var typeString string
        // 类型断言
        for _, s := range args {
          switch s.(type) {
          case bool:
            typeString = "bool"
          case string:
            typeString = "string"
          case int:
            typeString = "int"
          }
        }
        fmt.Println(typeString)
      }
      
      func main() {
        myfunc(1, "a", true)
      }
      
    • defer延迟语句

      后进先出
      函数退出时,释放资源

      func main() {
        defer fmt.Println(1)
        defer fmt.Println(2)
        defer fmt.Println(3)
      }
      
      var (
        cMap   = make(map[string]int)
        cMutex sync.Mutex
      )
      
      func myfunc(key string) int {
        cMutex.Lock()
        defer cMutex.Unlock()
        return cMap[key]
      }
      
      func main() {
        ret := myfunc("A")
        fmt.Println(ret)
      }
      
    • Go运行时错误
      1.一个可能造成错误的函数,需要返回一个错误接口 error
      2.函数调用后需要检查错误,正确处理每一个可能发生的错误的函数
      3.实现Error() string 方法的接口
      4.errors包自定义错误,errors.New("error")
      
    • panic与recover

      panic会引发程序崩溃,一般用于严重的错误
      recover只在延迟函数defer中有效,调用recover捕获panic的输入值

      func RecoverPanic(entry func()) {
        defer func() {
          err := recover()
      
          switch err.(type) {
            case runtime.Error:
              fmt.Println(err)
            default:
              fmt.Println(err)
          }
        }()
        entry()
      }
      
    • 哈希函数
      • md5/sha-1
        import (
          "crypto/md5"
          "crypto/sha1"
        )
        
        func main() {
          cString := "Hello, 世界"
          md5Ins := md5.New()
          md5Ins.Write([]byte(cString))
          result := md5Ins.Sum([]byte(""))
          println(result)
          sha1Ins := sha1.New()
          sha1Ins.Write([]byte(cString))
          result = sha1Ins.Sum([]byte(""))
          println(result)
        }
        
posted on 2022-09-11 10:37  _tiny_coder  阅读(21)  评论(0编辑  收藏  举报