#### 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. centos7 升级php版本到7.2

    #自带的只有5.4版本 yum provides php [root@localhost etc]# yum provides php Loaded plugins: fastestmirror, l ...

  2. 【LeetCode】555. Split Concatenated Strings 解题报告(C++)

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

  3. 【LeetCode】758. Bold Words in String 解题报告(C++)

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

  4. 【LeetCode】856. Score of Parentheses 解题报告(Python & C++)

    作者: 负雪明烛 id: fuxuemingzhu 个人博客: http://fuxuemingzhu.cn/ 目录 题目描述 题目大意 解题方法 栈 递归 计数 日期 题目地址:https://le ...

  5. idea使用教程-安装

    [1]将安装包进行解压-->选择固态盘符 [2]发送到桌面快捷方式,生成一个快捷方式 [3]打开: 选择主题: 先进入再说,免费试用: 创建一个项目: 选择JDK: 找到jetbrains-ag ...

  6. 常见分布式唯一ID生成策略

    方法一: 用数据库的 auto_increment 来生成 优点: 此方法使用数据库原有的功能,所以相对简单 能够保证唯一性 能够保证递增性 id 之间的步长是固定且可自定义的 缺点: 可用性难以保证 ...

  7. JSP中的九大内置对象

    JSP九大内置对象 pageContext 存东西 Request 存东西 Response Session 存东西 Application(servletContext) 存东西 config(se ...

  8. Drools集成SpringBoot

    1.说明 为了更好的在项目中使用Drools, 需要把Drools集成到Spring Boot, 下面介绍集成的方法, 并且开发简单的Demo和测试用例. 2.创建Maven工程 pom.xml工程信 ...

  9. .NetCore基于Jenkins和Gogs的自动化部署方案

    准备工作 Jenkins和gogs的安装配置可以看前两篇:Jenkins安装.配置与说明  和 gogs安装与说明(docker) 此外,因为还要安装.net core的SDK和Git工具: 安装.n ...

  10. Jenkins安装、配置与说明

    Jenkins是一个开源的.提供友好操作界面的持续集成(CI)工具,主要用于持续.自动的构建/测试软件项目.监控外部任务的运行. 这么解释很抽象,举个例子,我们开发完一个功能,我们要将项目发布打包好, ...