[Go] 中的陷阱
Posted September 24, 2021 by clannadzsy ‐ 1 min read
字符串的长度与数量
// Number of Bytes package main import "fmt" func main() { data := "We♥Go" fmt.Println(len(data)) } // 7 // 在 Go 中,字符串是 UTF-8 编码的,这意味着每个称为 rune 的字符可以是 1 到 4 个字节长。这里,字符 ♥ 占用 3 个字节,因此字符串的总长度为 7。
// Number of Runes package main import ( "fmt" "unicode/utf8" ) func main() { data := "We♥Go" fmt.Println(utf8.RuneCountInString(data)) } // 5 // 如果要获取字符串中的字符数量,可以使用 unicode/utf8 包。该 RuneCountInString 功能是返回一个字符串的字符数量
用 nil 初始化变量
package main import "fmt" func main() { var data string = nil if data == nil { fmt.Println(data) } } // cannot use nil as type string in assignment
nil
不是类型而是预定义标识符,不能在赋值中使用它。package main import "fmt" func main() { var data *string = nil if data == nil { fmt.Println(data) } } // <nil> // *string 是指向字符串类型值的指针变量的类型。指针的零值是 nil。
浮点数乘法
package main import "fmt" func main() { var m = 1.39 fmt.Println(m * m) const n = 1.39 fmt.Println(n * n) } // 1.9320999999999997 // 1.9321
字符串类型转换
package main import "fmt" func main() { i := 105 s := string(i) fmt.Println(s) } // i // 字符串支持从 int 类型转换,这里 string() 将整数视为字符。 105的字符是 i。
整数转字符串
package main import ( "fmt" "strconv" ) func main() { i := 105 s := strconv.Itoa(i) fmt.Println(s) s = fmt.Sprintf("%d", i) fmt.Println(s) } // 请使用 strconv.Itoa() 或 fmt.Sprintf() 函数。