• Go 常用函数


    #### Go 常用函数,错误处理
    这一节我们来学习一下Go 常用的函数,这些函数有些是内置的,有些是官方标准库内的, 熟悉这些函数对程序开发来讲还是很重要的;
    1. len("abc") 统计字符串的字节长度
    fmt.Println(len("abc,我")) // 4 + 3 = 7 中文字符占三个字节
    

      


    2. strconv.Atoi("11") 将字符串转为整数
        var str = "11"
       s,err := strconv.Atoi(str)
       fmt.Println(s,err) // 11 nil , 默认如果没有错误,返回nil 
    

      


    3. strconv.Itoa(11) 将整数转为字符串
        var a = 11
       s := strconv.Itoa(a)
       fmt.Println(s) // 11,默认情况下,如果转换不成功返回空字符串
    

      


    4. strconv.FormatInt(11,2) 将int64 类型的整数转为2,8,16 进制的字符串
       var a int64 = 11
       fmt.Println(strconv.FormatInt(a,10)) // 11
       fmt.Println(strconv.FormatInt(a,2)) // 1011
       fmt.Println(strconv.FormatInt(a,8)) // 13
       fmt.Println(strconv.FormatInt(a,16)) // b 
    

      


    5. []byte("abc") 将字符串转为字节切片
        var a = "abc"
       fmt.Println([]byte(a)) // [97 98 99] 
    

      


    6. []rune("你好") 将包含中文或其它语言的字符串转为rune 字节切片
        var a = "你好"
           fmt.Println([]rune(a)) // [20320 22909] unicode 编码
    

      


    7. strings.Contains("abc","a") 判断字符串是否包含目标字符
        fmt.Println(strings.Contains("abc","a")) // true
    

      


    8. strings.Count("abc","a") 统计字符串中出现目标字符的个数
        fmt.Println(strings.Count("abaac","a")) // 3
    

      


    9. strings.EqualFold("abc","ABC") 不区分大小写的字符串比较
        fmt.Println(strings.EqualFold("abc","ABC")) // true
    

      


    10. strings.Index("aabbcc","a") 查询目标字符中字符串中首次出现的索引(下标)值
        fmt.Println(strings.Index("aabbcc","a")) // 0
    

      


    11. strings.LastIndex("aabbcc","a") 查询目标字符中字符串中最后一次出现的索引(下标)值
        fmt.Println(strings.LastIndex("aabbcc","a")) // 1
    

      


    12. strings.Replace("aabbcc","a","d",-1) 将指定的字符串替换为另一个字符串,可以指定替换个数
        // -1 表示替换所有的目标字符
        fmt.Println(strings.Replace("aabbcc","a","d",-1)) // ddbbcc
    

      


    13. strings.Split("aa,bb,cc",",") 将字符串按指定的字符转换成***字符串切片***
        fmt.Println(strings.Split("aa,bb,cc",",")) // [aa bb cc]
    

      


    14. strings.ToUpper("aa") 将字符串转为大写
        fmt.Println(strings.ToUpper("aa")) // AA
    

      


    15. strings.ToLower("AA") 将字符串转为小写
        fmt.Println(strings.ToUpper("AA")) // aa
    

      


    16. strings.TrimSpace(" aa bb cc ") 将字符串左右两边的空格去掉
        fmt.Println(strings.TrimSpace(" aa bb cc ")) // aa bb cc
    

      


    17. strings.Trim(",aa,bb,cc,",",") 将字符串左右两边指定的字符去掉
        fmt.Println(strings.Trim(",aa,bb,cc,",",")) // aa,bb,cc
    

      


    18. strings.TrimLeft(",aa,bb,cc,",",") 将字符串左边指定的字符去掉
        fmt.Println(strings.TrimLeft(",aa,bb,cc,",",")) // aa,bb,cc,
    

      


    19. strings.TrimRight(",aa,bb,cc,",",") 将字符串右边指定的字符去掉
        fmt.Println(strings.TrimRight(",aa,bb,cc,",",")) // ,aa,bb,cc
    

      


    20. strings.HasPrefix("http://127.0.0.1","http") 判断字符串是否以指定的字符开头
        fmt.Println(strings.HasPrefix("http://127.0.0.1","http")) // true
    

      


    21. strings.HasSuffix("abc.jpg","jpg") 判断字符串是否以指定的字符结尾
        fmt.Println(strings.HasSuffix("abc.jpg","jpg")) // true
    

      


    ---
    ##### 时间和日期相关的函数
    时间和日期相关的函数需要导入time 包
    时间的类型为: time.Time
    时间常量:
    const (
       Nanosecond  Duration = 1                   // 纳秒
       Microsecond          = 1000 * Nanosecond   // 微秒
       Millisecond          = 1000 * Microsecond  // 毫秒
       Second               = 1000 * Millisecond  // 秒
       Minute               = 60 * Second         // 分
       Hour                 = 60 * Minute         // 小时
    )
    

      

    
    
    package main
    
    import (
       "fmt"
       "math"
       "time"
    )
    
    func main() {
       now := time.Now()
       fmt.Printf("now value is %v,now type is %T
    ", now, now)
       // 获得到具体的时间
       fmt.Println(now.Year())   // 年
       fmt.Println(now.Month())  // 月
       fmt.Println(now.Day())    // 日
       fmt.Println(now.Hour())   // 时
       fmt.Println(now.Minute()) // 分
       fmt.Println(now.Second()) // 秒
       fmt.Println(now.Date())   // 日期
       // 格式化日期
       // 2006-01-02 15:04:05  这6个数字是固定的,必须这样写, 位置可以随意更改,其中15,也可以写成03,代表24时制和12小时制
       fmt.Println(now.Format("2006-01-02 15:04:05"))
       fmt.Println(now.Unix())  // 从1970-01-01 到现在经过的的时间: 秒
       fmt.Println(now.UnixNano()) // 从1970-01-01 到现在经过的的时间: 纳秒, 如果超过int64 表示的范围,结果将溢出
       fmt.Println(math.MaxInt64) // int64 能表示的最大范围
    }
    

      


    ---
    ###### 内置函数
    Go 中提供了一些函数, 这些函数可以直接使用,称为内置函数
    1. len: 用来求长试, 如: string,array,slice,map,channel ;
    2. new: 用来分配内存主要用来分配值类型的,如: int,float64,struct 等, 返回的是对应值类型的指针;
    3. make: 用来分配内存,主要用来分配引用类型,如: channel,map,slice.
    4. make 的作用,稍后学习到复合数据类型时再详细学习,这里先学习一下用法
    package main
    
    import "fmt"
    func main(){
       var a *int  // 定义变量a 的类型为 *int , int 类型的指针
       a = new(int) // 用new 来分配内存
       fmt.Printf("a value is %p
    ",a) // 变量的a 的值, 实际是上一步new 出来的地址: 0xc000010098
       fmt.Printf("a address is %p
    ",&a) // 变量a 的地址, 变量a 本身的自己的地址:  0xc000006028
       *a = 100   // 将a 的地址指向值100
       fmt.Println(*a)
       // 对比一下传统的变量声明
       var b int
       b = 100
       fmt.Printf("b value is %d
    ",b)
       fmt.Printf("b address is %p
    ",&b)
       // 用new 方式
       // a --> 0xc000010098 --> 100
       // 用普通方式
       // b --> 100
       //
       // make
       var c []int
       c = make([]int,1) // 为引用类型c(切片),分配内存,如果不分配内存(声明的方式)是不可以使用的
       // 这里重新强调一下变量的几种声明方式
       // 1. 显示声明变量的类型,再赋值,var b int , b = 100 ;此种方式声明的引用类型的变量必须make,否则变量无法使用 
       // 2. 直接为变量赋值, 编译器为推断变量的类型, var b = 100; 此种方式声明的引用类型的变量也必须make,否则变量无法使用
       // 3. 短变量声明,只适用为函数内部, b := 100
       c[1] = 10
       fmt.Println(c)
    }
    

      


    ---
    ##### 错误处理
    1. 默认情况下,当程序发生panic 错误后,程序就会退出;
    2. 实际上有的错误并不需要退出,为了保证程序能正常的运行,我们可以捕捉错误,并进行错误处理;
    3. Go 中不支持传统的try...catch...finally 这种语法, 它的错误捕捉处理方式为: defer panic,recover;
    package main
    
    import "fmt"
    
    func test01(){
       // 使用defer recover 来捕捉错误
       defer func() {
          r := recover()
          if r != nil {
             fmt.Println("捕捉到了错误,需要处理")
             fmt.Println(r)
          }
       }()
       a := 10
       var b int
       res := a / b // 除数不能为0, 所以这个地方会导致程序panic , 也就是崩溃,加入错误处理机制后可保证程序正常运行
       // 如果没有defer recover 程序到这里就退出了;  
       fmt.Println(res)
    
    }
    func main(){
       test01()
       fmt.Println("错误处理后,还能正常运行")
    }
    

      


    ---
    ##### 自定义错误
    自定义错误,需要用来errors 包和panic 函数;
    errors.New("string") 返回一个错误类型的值,表示一个错误
    panic 是一个内置函数,接收一个interface 的值(可以接收任意值),输出错误信息,并退出程序;
    package main
    
    import (
       "errors"
       "fmt"
    )
    
    func test01()(err error){
       defer func() {
          r := recover()
          if r != nil {
             // 自定义错误
             err = errors.New("something is wrong")
             return
          }
       }()
       var a = 10
       var b int
       res := a / b
       fmt.Println(res)
       return nil
    }
    func main()  {
       err := test01()
       if err != nil {
          panic("test01 is wrong") // 报出错误,并退出程序
       }
       fmt.Println("main is running")
    }
    

      个人微信公众号上有最新文章: 欢迎大家关注一同学习交流

  • 相关阅读:
    一步一步使用Ext JS MVC与Asp.Net MVC 3开发简单的CMS后台管理系统之用户管理(1)
    一步一步使用Ext JS MVC与Asp.Net MVC 3开发简单的CMS后台管理系统之创建Viewport(2)
    一步一步使用Ext JS MVC与Asp.Net MVC 3开发简单的CMS后台管理系统之用户管理(2)
    一步一步使用Ext JS MVC与Asp.Net MVC 3开发简单的CMS后台管理系统之完成登录功能
    一步一步使用Ext JS MVC与Asp.Net MVC 3开发简单的CMS后台管理系统之登录窗口调试
    一步一步使用Ext JS MVC与Asp.Net MVC 3开发简单的CMS后台管理系统之创建Viewport(1)
    一步一步使用Ext JS MVC与Asp.Net MVC 3开发简单的CMS后台管理系统之创建输出验证码图片的控制器
    一步一步使用Ext JS MVC与Asp.Net MVC 3开发简单的CMS后台管理系统之调整首页显示
    一步一步使用Ext JS MVC与Asp.Net MVC 3开发简单的CMS后台管理系统之登录窗口
    一步一步使用Ext JS MVC与Asp.Net MVC 3开发简单的CMS后台管理系统之用户管理(3)
  • 原文地址:https://www.cnblogs.com/Mail-maomao/p/11411793.html
Copyright © 2020-2023  润新知