go语言学习4:包

188 阅读3分钟

一起养成写作习惯!这是我参与「掘金日新计划 · 4 月更文挑战」的第20天,点击查看活动详情

strinbgs包

Go语言提供了很多内置包,例如:fmt、strings、strconv、os、io 等等。

//查找指定字符在字符串中存在的位置 如果不存在返回-1
fmt.Println(strings.Index(s1,"g")) 
//查找字符中任意一个字符出现在字符串中的位置 
fmt.Println(strings.IndexAny(s1,"s")) 
//查找指定字符出现在字符串中最后一个的位置 
fmt.Println(strings.LastIndex(s1,"s"))

//字符串的替换 
s5 := "okoletsgo" 
s6 := strings.Replace(s5, "o", "*", 1) 
fmt.Println(s6)//*koletsgo 
//TODO 1 只替换1次, -1 全部替换

//字符串的截取 
//str[start:end]包含start 不包含end

strconv包

//string 转int 
s1 := "100" //字符串 
b, err := strconv.ParseInt(s1, 10, 64) //10 表示s1要转的数据是10进制 64位 
if err != nil { 
    fmt.Println(err) //打印错误信息 
} 
fmt.Printf("%T,%d", b, b) //int64,100

time包

需要注意的是Go语言中时间的格式化,需要指定格式化时间的模板, 不管年月日的类型格式怎么写,但是具体的数值必须写成2006-01-02 15:04:05, 如果不是这个日期就不能够格式化,这个时间也是为了纪念Go语言诞生的时间。

s := t.Format("2006-1-2 15:04:05") 
fmt.Println(s) //打印出的格式就是当前的时间 2020-3-31 23:08:35 
s := t.Format("2006/1/2") 
fmt.Println(s) //打印出的格式就是当前的年月日 2020/3/31

defer

defer 表示延时推迟的意思,在go语言中用来延时一个函数或者方法的执行。如果一个函数或者方法添加了defer关键字,表示则暂时不执行,等到主函数的所有方法都执行完后才开始执行。

当多个函数被defer的时候他们被添加到一个堆栈中,并且根据先进后出的原则执行。 即 Last In First Out(LIFO)

闭包

go语言支持将一个函数作为参数传递,也支持将一个函数作为返回值。一个外层函数当中有内层函数,这个内层函数会操作外层函数的局部变量。并且,外层函数把内层函数作为返回值,则这里内层函数和外层函数的局部变量,统称为 闭包结构 。 这个外层函数的局部变量的生命周期会随着发生改变,原本当一个函数执行结束后,函数内部的局部变量也会随之销毁。但是闭包结构内的局部变量不会随着外层函数的结束而销毁。

指针

指针是存储另一个变量的内存地址的变量。 例如: 变量B的值为100, 地址为0x1122。变量A的值为变量B的地址0x1122,那么A就拥有了变量B的地址,则A就成为指针。Go语言中通过&获取变量的地址。通过获取指针所对应的变量存储的数值。

panic和recover

panic宕机 recover恢复 panic 表示恐慌。当程序遇到一个异常时候可以强制执行让程序终止操作,同时需要引入defer函数类延时操作后面的函数,在defer函数中通过recover来恢复正常代码的执行,因为defer是根据先入后出原则,所以先被defer的函数会放在最后执行,recover需要放在第一个被执行,当遇到panic时候恢复正常的代码逻辑。同时也可将错误信息通过recover获取panic传递的错误信息。