golang入門字符串, string與int等基礎數據類型之間的轉換, string與[]byte, []rune之間的關系


package main

import (
"bytes"
"fmt"
"reflect"
"strconv"
"strings"
)

func testString() {
var tString string

//對於golang, string沒有nil概念, tString = nil 和 tString == nil 這兩種寫法不能通過編譯
fmt.Println(tString == "") //true
fmt.Println(len(tString) == 0) //true
fmt.Printf("address=%p\n", &tString)

tString = "hello,中國" //字符串是不可變的
fmt.Printf("tString len = %d\n", len(tString)) //結果為 12, go中string的底層實現是[]byte, 所以string的len是按照字符串的byte數組的長度計算的, 一個中文字符占3個byte
fmt.Printf("first byte = %c\n", tString[0]) //可以通過下標訪問字節, 但不能修改
s := tString[0:] //這種操作要慎用, 每一次轉換都需要復制內容, 並且切片(s)和原字符串(tString)所指向的底層字符數組是一個
fmt.Println(reflect.TypeOf(s)) //結果為string, 字符串的切片操作, 這里要注意返回的仍然是字符串, 而不是slice

rString := []rune(tString) //如果想訪問中文, 可以用rune類型
fmt.Printf("tString char 7 = %c\n", rString[7]) //國
fmt.Printf("tString char len = %d\n", len(rString)) //結果為 8
//byte實質上是uint8類型, rune實質上是uint32類型

//字符串拼接, 出於效率上的考慮, 如果是少量的拼接,使用哪種都可以, 但如果有大量的字符串拼接, 性能要求較高的場合, 那么選擇選擇合適的拼接方式就顯得很重要
tString = "hello" + "," + "world" // 直接使用運算符 "+" 鏈接, 因為每次運算都會產生新的字符串,空間和gc不太友好, 優點在於簡潔清晰
tString = fmt.Sprintf("%s%s%d", "hello ", "world", 5) //fmt格式化, 邏輯復雜, 幾種拼接方式中, 效率基本是最低的, 優點可以格式化其他的類型
tString = strings.Join([]string{"hello", "world"}, ":") //strings拼接, 優點在 如果已有一個字符串數組效率很高, 但如果是重新構造的話, 代價也不小
buffer := bytes.Buffer{} //bytes.Buffer, 適用於大量的拼接,性能要求較高的場景
buffer.WriteString("hello")
buffer.WriteString("world")
fmt.Println(buffer.String())
fmt.Println(tString)

//字符串的更多操作(截取, 分割, 比較, 索引, 前后綴等)strings
fmt.Println(strings.Contains(tString, "中"))

//字符串與基礎數據類型的轉換在strconv包
iString := "5"
i, _ := strconv.Atoi(iString) //字符串轉int
strconv.Itoa(i) //int轉string
ui, _ := strconv.ParseInt(iString, 10, 8) //第一個參數是需要轉換的字符串, 第二個是進制(二進制, 八進制...), 第三個是bit大小(int8,int16...)

//ParseFloat, ParseUint, ParseBool分別是字符串轉換浮點, uint, 布爾類型.
//基礎類型轉換成string有Format
strconv.FormatInt(ui, 10)
strconv.FormatBool(true)
//字符串操作的包是strings, 比較, 前后綴, 去空格, 切分, 大小寫轉換...

}

func main() {

testString()

}


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM