Go进阶(4): string接口函数+时间接口函数+内置函数+错误处理
1. string接口函數(shù)
- len():內(nèi)建函數(shù),返回字符串/數(shù)組的長(zhǎng)度,按字節(jié)(UTF-);例如,ascii字符占一個(gè)字節(jié),漢字占三個(gè)字節(jié);
- r:=[]rune(str):字符串遍歷函數(shù),同時(shí)可以處理中文問題,中間是轉(zhuǎn)成了slicer類型
運(yùn)行結(jié)果:
字符=h 字符=e 字符=l 字符=l 字符=o 字符= ?字符=? 字符=2 字符=?字符=? 字符=- 字符=?字符=? 字符=?字符=?
字符=h 字符=e 字符=l 字符=l 字符=o 字符= ?字符=沈 字符=子 字符=恒
- n, err = strconv.Atoi(str):字符串轉(zhuǎn)Int類型,err可以打印錯(cuò)誤信息;如,“123”可以轉(zhuǎn)成Int,而“hello”不可以;通常用于輸入類型的校驗(yàn)
- str = strconv.itoA(): 轉(zhuǎn)成字符串
- var bytes = []byte("hello go"): 字符串轉(zhuǎn)成字符,采用了[]byte切片
- str = string([]byte{97,98,99}): 字符list轉(zhuǎn)成字符串
- str = strconv.FormatInt(int num, 2/8/16): 10進(jìn)制轉(zhuǎn)成2/8/16進(jìn)制
- strings.Contains("seafood", "foo"): 字符串中是否包含字串
- strings.Count(“cheese”,"e"): 字符串中包含字串的數(shù)量
- stringsEqualFold(“abc”, "ABC"): 不區(qū)分大小寫判斷字符串是否相等 (區(qū)別==,區(qū)分大小寫)
- strings.Index("helloworld","wor"): 返回子串在字符串中第一次出現(xiàn)的index,如果沒有返回-1
- strings.LastIndex("go golang", "go"): 返回子串在字符串中最后出現(xiàn)的位置
- strings.Replace("go golang", "go", "go語言", 1):字符串替換,-1指全部替換,1指從前向后檢索的第一個(gè)子串
- strings.Split("hello golang, hello world", ","): 按照指定字符切分字符串,形成字符串?dāng)?shù)組
- strings.Lower("HELLO") / strings.Upper("hello"): 字符串轉(zhuǎn)成小寫/大寫
2. 時(shí)間/日期接口函數(shù)(time包)
- now := time.Now(): 獲取當(dāng)前的時(shí)間
- now.Year()?now.Month()?now.Day()?now.Hour()?now.Minute()?now.Second() : 獲取年月日時(shí)分秒
- now.Format: 格式化日期時(shí)間格式
- time.Sleep(100 * time.Millisecond): 休眠時(shí)間
3. 內(nèi)置函數(shù)new和make
- new:用來分配內(nèi)存,主要用來分配值類型,比如int / float32 / struct ... 返回的是指針
運(yùn)行結(jié)果:
num1的類型, 值, 地址:? int 100? ? ? ? ? ? ? ? ? ? 0xc000062058
num2的類型, 值, 地址:?*int 0xc000062090 0xc00008e020
- make: 用來分配內(nèi)存,主要用來分配引用類型,比如channel / map / slice
?
4. 錯(cuò)誤處理
默認(rèn)情況下,程序發(fā)生錯(cuò)誤后(panic),程序就會(huì)退出;如果我們希望,當(dāng)發(fā)生錯(cuò)誤后,程序可以捕捉錯(cuò)誤,及時(shí)發(fā)送錯(cuò)誤報(bào)告,并正常執(zhí)行后下面的正確代碼。
Go不支持傳統(tǒng)的try...catch...finally處理機(jī)制;引入了defer / panic / recover進(jìn)行處理;即Go中可以拋出一個(gè)panic異常,然后在defer中通過recover捕獲這個(gè)異常,然后進(jìn)行正常處理。
- panic-defer-recover
運(yùn)行結(jié)果:
Error: runtime error: integer divide by zero
程序可以正常執(zhí)行...
- errors.New和panic
Go程序中,也支持自定義錯(cuò)誤,使用errors.New()和panic內(nèi)置函數(shù)。
errors.New(“錯(cuò)誤說明”),會(huì)返回一個(gè)error類型的值,表示一個(gè)錯(cuò)誤;
panic內(nèi)置函數(shù),接受一個(gè)interface{}類型的值作為參數(shù),可以接受error類型的量,輸出錯(cuò)誤信息,并退出程序。
總結(jié)
以上是生活随笔為你收集整理的Go进阶(4): string接口函数+时间接口函数+内置函数+错误处理的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 盖茨每一秒能赚多少钱,他现在最担心的是什
- 下一篇: C++中建立对象间消息连接的系统方法