Golang字串切割函數Split

來源:互聯網
上載者:User
這是一個建立於 的文章,其中的資訊可能已經有所發展或是發生改變。

先說結論:大Golang裡面,如果一個Null 字元串通過strings包的Split函數進行切割,那麼結果是一個長度為1的數組,裡面的內容是一個Null 字元串。

為了驗證,分別在1.0.1、1.1、1.2.2、1.3.3、1.4rc上面進行了測試,驗證了上面的結論是正確的。

func main() {a := strings.Split("", ";")fmt.Printf("%d****%s****\n", len(a), a[0])}

這個也很好理解。切割一個Null 字元串,肯定是沒辦法切的,那麼結果就是沒切開,把原字串直接加入結果數組裡面而已。只不過一開始有點難理解,因為我們都會認為如果是Null 字元串去切,結果數組裡應該是空的。

最近升級了beego1.4.2,謝大把beego控制器擷取請求參數函數Controller.GetInt函數的傳回值,由之前的int64改成了int,本來最早用的時候就彆扭,如果想取到int64,那直接再加個函數Controller.GetInt64就可以了,結果這麼一搞,還得自己惦記著。結果這次謝大果斷把Controller.GetInt傳回值改了,項目直接編譯不過了。

當然,這不算什麼,編譯不過最起碼知道問題出在哪裡了。還有一個坑,beego.AppConfig.Strings函數,之前是可以將配置裡的字串通過分號自動切割成數組。結果更新之後,之前的代碼返回是空的了(也就是裡面是長度是1的Null 字元串)。這個可害苦了我。看了下源碼,發現config包解析設定檔的方法進行了大幅度更新,但是我經過分析,認為並不是這裡的錯誤,反而是另一個地方beego/config.go第111行

func (b *beegoAppConfig) Strings(key string) []string {v := b.innerConfig.Strings(RunMode + "::" + key)if len(v) == 0 {return b.innerConfig.Strings(key)}return v}

runmode裡擷取配置的值,如果沒有取到,去取預設值。這裡說一下,beego的設定檔支援devproddefault三種模式。如果配置了runmode,根據其在設定檔內尋找相應的配置,否則去取預設值。上面的代碼大體是這個含義。但是如果沒有找到runmode下的配置,此時if的判斷是len(v) == 0,而之前從設定檔的實現ini.go裡取值的函數如下:

func (c *IniConfigContainer) Strings(key string) []string {return strings.Split(c.String(key), ";")}

它會把取到的字串進行切割,結合我們上面提到的,無論怎麼切割,長度最少是1,所以if判斷永遠是false,取預設值的邏輯永遠不會被執行。修改的方法也很簡單,判斷語言改成if v[0] == ""即可。完成的beego/config包介紹可以看我之前的文章。我已經給謝大提了Merge Request,但是他一直沒有理我。。。

24號謝大合并了My Code,開心開心開心。

本文所涉及到的完整源碼請參考。

原文連結:Golang字串切割函數Split,轉載請註明來源!

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.