#### 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\n", 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\n",a) // 变量的a 的值, 实际是上一步new 出来的地址: 0xc000010098
fmt.Printf("a address is %p\n",&a) // 变量a 的地址, 变量a 本身的自己的地址: 0xc000006028
*a = 100 // 将a 的地址指向值100
fmt.Println(*a)
// 对比一下传统的变量声明
var b int
b = 100
fmt.Printf("b value is %d\n",b)
fmt.Printf("b address is %p\n",&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")
}

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

Go 常用函数的更多相关文章

  1. oracle常用函数及示例

    学习oracle也有一段时间了,发现oracle中的函数好多,对于做后台的程序猿来说,大把大把的时间还要学习很多其他的新东西,再把这些函数也都记住是不太现实的,所以总结了一下oracle中的一些常用函 ...

  2. 总结js常用函数和常用技巧(持续更新)

    学习和工作的过程中总结的干货,包括常用函数.常用js技巧.常用正则表达式.git笔记等.为刚接触前端的童鞋们提供一个简单的查询的途径,也以此来缅怀我的前端学习之路. PS:此文档,我会持续更新. Aj ...

  3. [转]SQL 常用函数及示例

    原文地址:http://www.cnblogs.com/canyangfeixue/archive/2013/07/21/3203588.html --SQL 基础-->常用函数 --===== ...

  4. PHP常用函数、数组方法

    常用函数:rand(); 生成随机数rand(0,50); 范围随机数时间:time(); 取当前时间戳date("Y-m-d H:i:s"); Y:年 m:月份 d:天 H:当前 ...

  5. Oracle常用函数

    前一段时间学习Oracle 时做的学习笔记,整理了一下,下面是分享的Oracle常用函数的部分笔记,以后还会分享其他部分的笔记,请大家批评指正. 1.Oracle 数据库中的to_date()函数的使 ...

  6. Thinkcmf:页面常用函数

    Thinkcmf:页面常用函数 全站seo: 文章列表: {$site_seo_title}        <!--SEO标题--> {$site_seo_keywords}   < ...

  7. matlab进阶:常用功能的实现,常用函数的说明

    常用功能的实现 获取当前脚本所在目录 current_script_dir = fileparts(mfilename('fullpath')); % 结尾不带'/' 常用函数的说明 bsxfun m ...

  8. iOS导航控制器常用函数与navigationBar常用属性

    导航控制器常用函数触发时机 当视图控制器的View将要出现时触发 - (void)viewWillAppear:(BOOL)animated 当视图控制器的View已经出现时触发 - (void)vi ...

  9. 《zw版·Halcon-delphi系列原创教程》 zw版-Halcon常用函数Top100中文速查手册

    <zw版·Halcon-delphi系列原创教程> zw版-Halcon常用函数Top100中文速查手册 Halcon函数库非常庞大,v11版有1900多个算子(函数). 这个Top版,对 ...

  10. phpcms V9 常用函数 及 代码整理

    常用函数 及 常用代码 总结如下 <?php //转换字符串或者数组的编码 str_charset($in_charset, $out_charset, $str_or_arr) //获取菜单 ...

随机推荐

  1. 【LeetCode】221. Maximal Square 解题报告(Python & C++)

    作者: 负雪明烛 id: fuxuemingzhu 个人博客: http://fuxuemingzhu.cn/ 目录 题目描述 题目大意 解题方法 动态规划 日期 题目地址: https://leet ...

  2. 【LeetCode】881. Boats to Save People 解题报告(Python)

    [LeetCode]881. Boats to Save People 解题报告(Python) 作者: 负雪明烛 id: fuxuemingzhu 个人博客: http://fuxuemingzhu ...

  3. 【剑指Offer】树的子结构 解题报告(Python)

    [剑指Offer]树的子结构 解题报告(Python) 标签(空格分隔): LeetCode 题目地址:https://www.nowcoder.com/ta/coding-interviews 题目 ...

  4. Test for Job(poj3249)

    Test for Job Time Limit: 5000MS   Memory Limit: 65536K Total Submissions: 10209   Accepted: 2372 Des ...

  5. 遍历 HashMap 的 5 种最佳方式

    使用 Iterator 遍历 HashMap EntrySet 使用 Iterator 遍历 HashMap KeySet 使用 For-each 循环迭代 HashMap 使用 Lambda 表达式 ...

  6. HITCON 2019 Lost Modular again writeup

    HITCON 2019 Lost Modular again writeup 算是基础题,有很多之前题的影子,做不出来纯属菜. 题目 加密脚本 from Crypto.Util.number impo ...

  7. Crypto CTF 2019 writeup

    Crypto CTF 2019 writeup roXen 题目 roXen Relationship with a cryptographer! The Girlfriend: All you ev ...

  8. Spring Boot实战二:集成Mybatis

    Spring Boot集成Mybatis非常简单,在之前搭建好的项目中加入Mybatis依赖的jar,在配置文件中加入数据库配置即可,如下图所示: 创建对应的Controller.Service.Da ...

  9. MySQL基础操作指南

    启动停止MySQL服务 1.Windows服务窗口启动:开始 → 运行 → services.msc → 找到MySQL 56服务 2.MySQL命令启动:开始 → 运行 → 管理员权限运行cmd → ...

  10. 为什么要避免在 Go 中使用 ioutil.ReadAll?

    原文链接: 为什么要避免在 Go 中使用 ioutil.ReadAll? ioutil.ReadAll 主要的作用是从一个 io.Reader 中读取所有数据,直到结尾. 在 GitHub 上搜索 i ...