#### 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. c++之面试(5)

    问题描述 为什么用自增作为主键? 解释 做为主键时,uuid和自增相比较,自增更适合.原因: 1 uuid是无序的, 插入数据时,页的位置会发生变化,页分裂,速度慢. 2 uuid占的空间大,并且in ...

  2. 刷完 900 多题后的首次总结:LeetCode 应该怎么刷?

    「负雪明烛」公众号是负雪明烛维护的一个算法题解公众号,致力于帮助大家刷题.找工作.欢迎关注. 大家好,我是负雪明烛.今天跟大家聊一聊「LeetCode应该怎么刷?」这个话题. 我是大二的时候开始接触 ...

  3. 【LeetCode】520. Detect Capital 解题报告(Java & Python)

    作者: 负雪明烛 id: fuxuemingzhu 个人博客: http://fuxuemingzhu.cn/ 目录 题目描述 题目大意 解题方法 循环判断三个条件 大写字母个数和位置判断 根据首字符 ...

  4. 【LeetCode】830. Positions of Large Groups 解题报告(Python)

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

  5. python xlwt写Excel表

    1 xlwt第三方库 说明:xlwt是一个用于将数据和格式化信息写入并生成Excel文件的库. 注意:xlwt不支持写xlsx表,打开表文件报错. 官方文档:https://xlwt.readthed ...

  6. Windows服务注册(需要指定config文件的情况下)

    最近,遇到一个问题:需要将telegraf在Win平台下注册为windows服务(避免误操作关闭CMD窗口): 尝试了网上的几种注册Windows服务的方法,发现无法将telegraf这种需要在CMD ...

  7. StringBoot

    1.首先我们需要依赖SpringBoot父工程,这是每个项目中必须要有的. <!--引入SpringBoot父依赖--><parent>        <groupId& ...

  8. Wiener Filtering

    目录 基本 滤波的推导 特别的情况 特别的例子 Signals, Systems and Inference, Chapter 11: Wiener Filtering (mit.edu) 基本 在图 ...

  9. cosface: large margin cosine loss for deep face recognition

    目录 概 主要内容 Wang H, Wang Y, Zhou Z, et al. CosFace: Large Margin Cosine Loss for Deep Face Recognition ...

  10. 使用delve调试golang

    目录 前置要求 使用方式 使用funcs查找支持的函数 使用break(b)打断点 使用breakpoints查看当前活动的断点. 使用clear清除断点 使用goroutines查看所有协程 使用s ...