英文:
Get character at index of string
问题
为什么我会得到错误信息 cannot use s[0] (type byte) as type string in assignment
?据我所知,s
是一个 string
类型,为什么访问一个字符后它会变成 byte
类型?
英文:
func lengthOfLongestSubstring(s string) {
match := make(map[string]int)
var current string
current = s[0]
if match[current] == 1 {
///
}
}
Why do I get the error cannot use s[0] (type byte) as type string in assignment
? As far as I can tell it's clear that s
is of type string
, why does accessing a character turn it into type byte
?
答案1
得分: 6
func lengthOfLongestSubstring(s string) {
strArr := []rune(s)
fmt.Println(string(strArr[0]))
}
英文:
func lengthOfLongestSubstring(s string) {
strArr:=[]rune(s)
fmt.Println(string(strArr[0]))
}
答案2
得分: 5
让我们阅读一下Go语言设计师之一对于Go中字符串的看法(Go中的字符串):
在Go中,字符串实际上是一个只读的字节切片。如果你对字节切片是什么或者它是如何工作的有任何疑问,请阅读前面的博文;我们在这里假设你已经了解了。
首先要明确的是,字符串可以包含任意字节。它不需要保存Unicode文本、UTF-8文本或任何其他预定义格式。就字符串的内容而言,它与字节切片完全等价。
所以,在你的情况下,s[0]
是一个字节类型,如果你确实需要赋值,你需要进行显式的类型转换。
英文:
Let's read how one of the Go designers look at strings in go:
> In Go, a string is in effect a read-only slice of bytes. If you're at all uncertain about what a slice of bytes is or how it works, please read the previous blog post; we'll assume here that you have.
>
> It's important to state right up front that a string holds arbitrary bytes. It is not required to hold Unicode text, UTF-8 text, or any other predefined format. As far as the content of a string is concerned, it is exactly equivalent to a slice of bytes.
So, apparently in your case, s[0]
is a byte type, you need explicit case if you really need the assignment.
通过集体智慧和协作来改善编程学习和解决问题的方式。致力于成为全球开发者共同参与的知识库,让每个人都能够通过互相帮助和分享经验来进步。
评论