2017-06-15 181 views
-1
func lengthOfLongestSubstring(s string) { 
    match := make(map[string]int) 
    var current string 

    current = s[0] 

    if match[current] == 1 { 
     /// 
    } 

} 

爲什麼我會收到錯誤cannot use s[0] (type byte) as type string in assignment?據我所知,s的類型爲string,爲什麼訪問一個字符會將它變成byte獲取字符串索引

+2

是否鑄造s [0]串工作? – DJSweetness

+2

,因爲's [0]'是一個'byte',而不是'string'。你確定你只想按字節操作還是應該用utf8符文工作? – JimB

+0

@JimB我只是想檢索字符,所以我可以用它作爲地圖上的一個鍵 – chefcurry7

回答

1

讓我們讀golang官方傢伙怎麼看串中去(https://blog.golang.org/strings):

在圍棋中,字符串實際上是字節只讀片。如果您完全不確定字節的片斷是什麼或者它是如何工作的,請閱讀上一篇博文;我們會假設你有。

事先聲明一個字符串保存任意字節是很重要的。不需要保存Unicode文本,UTF-8文本或任何其他預定義的格式。就字符串的內容而言,它完全等價於一個字節片。

因此,顯然在你的情況下,s [0]是一個字節類型,如果你真的需要賦值,你需要明確的情況。

1
func lengthOfLongestSubstring(s string) { 
    strArr:=[]rune(s) 
    fmt.Println(string(strArr[0])) 

}