日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

Go进阶(4): string接口函数+时间接口函数+内置函数+错误处理

發布時間:2025/3/15 编程问答 47 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Go进阶(4): string接口函数+时间接口函数+内置函数+错误处理 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

1. string接口函數

  • len():內建函數,返回字符串/數組的長度,按字節(UTF-);例如,ascii字符占一個字節,漢字占三個字節;
  • r:=[]rune(str):字符串遍歷函數,同時可以處理中文問題,中間是轉成了slicer類型
package mainimport "fmt"func main() {str := "hello 沈子恒"for i:=0; i<len(str); i++{ //會出現中文亂碼情況fmt.Printf("字符%c ", str[i])}str_rune := []rune(str)for i:=0; i<len(str_rune); i++{ //會出現中文亂碼情況fmt.Printf("字符%c ", str_rune[i])} }

運行結果:

字符=h 字符=e 字符=l 字符=l 字符=o 字符= ?字符=? 字符=2 字符=?字符=? 字符=- 字符=?字符=? 字符=?字符=?

字符=h 字符=e 字符=l 字符=l 字符=o 字符= ?字符=沈 字符=子 字符=恒

  • n, err = strconv.Atoi(str):字符串轉Int類型,err可以打印錯誤信息;如,“123”可以轉成Int,而“hello”不可以;通常用于輸入類型的校驗
  • str = strconv.itoA(): 轉成字符串
  • var bytes = []byte("hello go"): 字符串轉成字符,采用了[]byte切片
  • str = string([]byte{97,98,99}): 字符list轉成字符串
  • str = strconv.FormatInt(int num, 2/8/16): 10進制轉成2/8/16進制
  • strings.Contains("seafood", "foo"): 字符串中是否包含字串
  • strings.Count(“cheese”,"e"): 字符串中包含字串的數量
  • stringsEqualFold(“abc”, "ABC"): 不區分大小寫判斷字符串是否相等 (區別==,區分大小寫)
  • strings.Index("helloworld","wor"): 返回子串在字符串中第一次出現的index,如果沒有返回-1
  • strings.LastIndex("go golang", "go"): 返回子串在字符串中最后出現的位置
  • strings.Replace("go golang", "go", "go語言", 1):字符串替換,-1指全部替換,1指從前向后檢索的第一個子串
  • strings.Split("hello golang, hello world", ","): 按照指定字符切分字符串,形成字符串數組
  • strings.Lower("HELLO") / strings.Upper("hello"): 字符串轉成小寫/大寫

2. 時間/日期接口函數(time包)

  • now := time.Now(): 獲取當前的時間
  • now.Year()?now.Month()?now.Day()?now.Hour()?now.Minute()?now.Second() : 獲取年月日時分秒
  • now.Format: 格式化日期時間格式
  • time.Sleep(100 * time.Millisecond): 休眠時間

3. 內置函數new和make

  • new:用來分配內存,主要用來分配值類型,比如int / float32 / struct ... 返回的是指針
package mainimport ("fmt""reflect" )func main() {num1 := 100fmt.Println("num1的類型, 值%v, 地址%v:", reflect.TypeOf(num1), num1, &num1)num2 := new(int)fmt.Println("num2的類型, 值%v, 地址%v:", reflect.TypeOf(num2), num2, &num2) }

運行結果:

num1的類型, 值, 地址:? int 100? ? ? ? ? ? ? ? ? ? 0xc000062058
num2的類型, 值, 地址:?*int 0xc000062090 0xc00008e020

  • make: 用來分配內存,主要用來分配引用類型,比如channel / map / slice

?

4. 錯誤處理

默認情況下,程序發生錯誤后(panic),程序就會退出;如果我們希望,當發生錯誤后,程序可以捕捉錯誤,及時發送錯誤報告,并正常執行后下面的正確代碼。

Go不支持傳統的try...catch...finally處理機制;引入了defer / panic / recover進行處理;即Go中可以拋出一個panic異常,然后在defer中通過recover捕獲這個異常,然后進行正常處理。

  • panic-defer-recover
package mainimport "fmt" func test(){defer func() {err := recover()if err != nil {fmt.Println("Error:", err)}}()num1 := 10num2 := 0res := num1/num2fmt.Println(res) }func main() {test()fmt.Println("程序可以正常執行...") }

運行結果:

Error: runtime error: integer divide by zero
程序可以正常執行...

  • errors.New和panic

Go程序中,也支持自定義錯誤,使用errors.New()和panic內置函數。

errors.New(“錯誤說明”),會返回一個error類型的值,表示一個錯誤;

panic內置函數,接受一個interface{}類型的值作為參數,可以接受error類型的量,輸出錯誤信息,并退出程序。

總結

以上是生活随笔為你收集整理的Go进阶(4): string接口函数+时间接口函数+内置函数+错误处理的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。