Go 內建庫第一季 strconv

2021-09-11 17:44:44 字數 3849 閱讀 2704

日常編寫**的過程中,字串和數值型、布林型別之間的轉換算是很頻繁了。所以有必要研究下內建的 strconv 庫。

這節的主題是:字串和其他基本資料型別之間的轉換。

除此之外,還有其他型別的轉換,最值得研究的就是 json , 這些內容,下期再講。

大綱:

怎麼知道這些答案?

func atoi(s string) (int, error)

func canbackquote(s string) bool

func formatbool(b bool) string

func formatfloat(f float64, fmt byte, prec, bitsize int) string

func formatint(i int64, base int) string

func formatuint(i uint64, base int) string

func isgraphic(r rune) bool

func isprint(r rune) bool

func itoa(i int) string

func parsebool(str string) (bool, error)

func parsefloat(s string, bitsize int) (float64, error)

func parseint(s string, base int, bitsize int) (i int64, err error)

func parseuint(s string, base int, bitsize int) (uint64, error)

複製**

大概可以得出答案:基本的資料型別指的是:布林型別、數值型(整型、浮點型)

其他資料型別轉換為字串的函式多以:format 為關鍵字

字串轉換為其他資料型別的函式多以:parse 為關鍵字

func toint(value string) (result int) 

複製**

原理是:"abc" -- > a*100 + b*10 + c

func tostring(value int) (result string) 

複製**

func tobool(value string) (result bool) 

func booltostring(value bool) (result string)

複製**

func tofloat(value string) (result float64) 

func floattostring(value float64) (result string)

複製**

浮點數需要注意精度。

因為數值存在進製的原因:所以需要熟悉這些概念:

可以看出:

私以為,掌握這些能處理絕大多數場景。

字串和整型

func parseint(s string, base int, bitsize int) (i int64, err error)

func parseuint(s string, base int, bitsize int) (n uint64, err error)

func atoi(s string) (i int, err error)

複製**

func tobaseint(value string) (result int64) 

複製**

表示將 8 進製的 「123」 的字串轉為整型:1*8*8+2*8+3*1=83

所以可以將任意進製的資料轉換為 整型,字串轉成整型有錯誤處理,比如 7 進製的數「128」 出現 8, 那麼肯定報錯。

另外還存在無符號的數轉換

func inttostring(value int64) (result string) 

func main

()>> 173

8 進製的 173 和 10 進製的 123 相等

1*64 + 7*8 + 3 = 64 + 56 + 3 = 123

複製**

總結這種轉換:

布林和字串

func parsebool(str string) (value bool, err error)

func formatbool(b bool) string

複製**

需要注意的是:

浮點型和字串

func parsefloat(s string, bitsize int) (f float64, err error)

func formatfloat(f float64, fmt byte, prec, bitsize int) string

複製**

可能會對 引數 fmt 有疑問,其實很好理解,fmt 格式化對浮點型有哪些操作?

%b		無小數部分的,指數為二的冪的科學計數法,與 strconv.formatfloat	

的 'b' 轉換格式一致。例如 -123456p-78

%e 科學計數法,例如 -1234.456e+78 printf("%e", 10.2) 1.020000e+01

%e 科學計數法,例如 -1234.456e+78 printf("%e", 10.2) 1.020000e+01

%f 有小數點而無指數,例如 123.456 printf("%f", 10.2) 10.200000

%g 根據情況選擇 %e 或 %f 以產生更緊湊的(無末尾的0)輸出 printf("%g", 10.20) 10.2

%g 根據情況選擇 %e 或 %f 以產生更緊湊的(無末尾的0)輸出 printf("%g", 10.20+2i) (10.2+2i)

複製**

其他
func quote(s string) string

func quoterune(r rune) string

func quoterunetoascii(r rune) string

func quoterunetographic(r rune) string

func quotetoascii(s string) string

func quotetographic(s string) string

複製**

簡單來說,就是給加上引號, 適合雙引號或者單引號內的內容加引號。

實現專案的中規範錯誤處理機制,比如錯誤碼的含義,具體顯示的資訊之類的非常重要。

一般的專案中是如何處理的呢?

type errorcode struct

func (e errorcode) error()string

var global strcut

errordb = errorcode{}

...}複製**

看上去和 strconv 庫的錯誤處理機制類似:

type numerror struct 

func (e *numerror) error() string

複製**

errors.new()

fmt.errorf()

複製**

參考全文完,

Go 內建庫第一季 json

近期我會持續更新內建庫的學習筆記,主要參考的是文件 godoc 和 內建庫的原始碼 在日常開發過程中,使用最頻繁的當然是內建庫,無數的開源專案,無不是在內建庫的基礎之上進行衍生 開發,所以其實是有很大的必要進行梳理學習。本節的主題 內建庫 json 大綱 既然是 json 操作,那麼核心應該是包括兩...

初學第一季

要增強體力,只有運動 要豐富知識,就只有讀書 鳥哥。學習linux也有段時間了,但是期間看了關於arm方面的書籍,及作業系統方面的書,linux用虛擬機器vm裝的,平時疏於聯絡。在鳥哥的linux書中從新開始學習,打下基礎。x window system 視窗系統名 由mit 所開發的一種流通的視窗...

自我反思 第一季

又來寫點東西了。考完了,有空了。最近總是在剖析自己。發現自己真是乙個 活在未來的人 以前這樣,現在還是這樣,人的性格真還是一樣難以改變的東西。現在我就在乙個三岔口,也許更多口。豬 gg說,不就是換個工作嘛,沒什麼了不起的。可是我總是在擔心未來。不做設計怕技術丟了,做設計又覺得沒有什麼進步的空間,想鍛...