字符串中常用的系统函数
- 统计字符串的长度,按字节 len(str)
- 字符串遍历,同时处理中文问题 r:=[]rune(str)
- 字符串转整数:n,err := strconv.Atoi(“12”)
- 整数转字符串:str := strconv.Itoa(12345)
- 字符串转 []byte: var bytes = []byte(“hello”)
- []byte转字符串: str = string([]byte{97,98})
- 10进制转为 2,8,16进制:str = strconv.FormatInt(123,2)
- 查询字串是否在指定字符串中: strings.Contains(“seafood”,“foo”)
- 统计一个字符串有几个指定字符串:strings.Count(“ceheese”,“e”)
- 不区分大小写的字符串比较(== 是区分带小写的字符串比较):fmt.Println(strings.EqualFold(“abc”,“Abc”))
- 返回子串在字符串第一次出现的index值,如果没有返回-1:strings.Index(“NLT_abc”,“abc”)
- 返回子串在字符串最后出现的index,如没有返回-1:strings.LastIndex(“go golang”,“gp”)
- 将指定的子串替换成另外一个子串:strings.Replace(“go go hello”,“go”,“golang”,n) n 可以指定你希望替换几个,如果n=1全部替换
- 拆成数组:strings.Split(“hello,world,”,“,”)
- 将字符串的字母进行大小写转换:
strings.ToLower(“Go”)
strings.ToUpper(“go”) - 去除两边空格:strings.TrimSpace(" fdas ")
- 去除指定两边字符:strings.Trim(“!str!”,“!”)
- 去除指定左边字符:strings.TrimRight(“!str!”,“!”)
- 去除指定右边字符:strings.TrimLeft(“!str!”,“!”)
- 判断字符串是否以指定字符串开头:strings.HasPrefix(“abcde”,“a”)
- 判断字符串是否以指定字符结尾:strings.HasSuffix(“abcde”,“e”)
时间和日期相关函数
说明:在编程中,程序员会经常使用到日期相关的函数,比如:统计某段代码执行花费的时间等等
-
时间和日期相关函数,需要倒入time包
-
time.Time类型,用于表示时间
now := time.Now() // 获取当前时间 -
获取其他日期
-
格式化日期时间
-
时间的常量
const(
Nanosecond Duration = 1 //纳秒
Microsecond = 1000 * Nanosecond // 微秒
Millisecond = 1000 * Microsecond // 毫秒
Second = 1000 * Millisecond // 秒
Minute
Hour
) -
休眠
func.Sleep(d Duration)
arg: time.Sleep(100 * time.Millisecond) -
获取当前unix时间戳和unixnano时间戳
内置函数
说明:Golang设计者为了编程方便,提供了一些函数,这些函数可以直接使用,我们称为go的内置函数。
-
len:求长度, string,array,map,channel
-
new: 用来分配内存,主要用来分配值内存,比如int,float32,struct返回的是指针(地址)
-
make:用来分配内存,主要用来分配引用类型,如chan,map,slice
错误处理
基本说明:
- Go中引入的处理方式:defer,panic,recover
- 这几个异常的使用场景可简单描述为:Go中可以抛出一个panic的异常,然后在defer中通过recover捕获这个异常,然后正常处理
方法中使用
- 错误处理
Go程序中,也支持自定义异常,使用errors.New 和 panic内置函数
(1)errors.New(“错误说明”),会返回一个error类型的值,表示一个错误
(2)panic内置函数,接收一个interface{}类型的值(任何值)作为参数,可以接受error类型的变量,输出错误信息,并退出程序 **
数组
数组可以存放多个统一类型数据。数组也是一种数据类型,在Go中,数组是值类型
- 数组的地址可以通过数组名来获取 $intArr
- 数组的第一个元素的地址,就是数组的首地址
- 数组的各个元素的地址间隔是依据数据的类型决定的
细节
- 数组是多个相同的数据的组合,一个数组一旦声明/定义了,其长度是固定的,不能动态变化
- var arr []int,这时 arr 就是一个slice 切片
- 数组中的元素可以是任何数据类型,包括值类型和引用类型 ,但是不能混用
- 数组创建后,如果没有赋值,有默认值
- 如想 在其他函数中,去修改原来的数组,可以使用引用传递(指针方式)
创建方式
var a1 [3]int = [3]int{1,2,3}
var a2 = [3]int{1,2,3}
var a3 = [...]int{1,2,3}
var a4 = [3]string{1:"tom",0:"jack",2:"array"}
切片
切片的英文是slice
切片是数组的一个引用,因此切片是引用类型,在进行传递时,遵守引用传递机制
切片的使用和数组类似,遍历切片、访问切片的元素和求切片长度len(slice)都是一样的
切片的长度是可以变化的,因此切片是一个可以动态变化数组
切片定义的基本语法:
var 变量名 []类型
比如: var a []int
使用方式
- 方式一:让切片去引用一个已经创建好的数组
var arr [5]int = […]int{1,2,3,4,5}
var slice = arr[1:3] - 方式二
var slice []type = make([]type , len , [cap])
参数说明:type是数据类型 len 数组元素 cap 容量 可选 - 方式三
var slice []int = []int{1,3,5}