日本综合一区二区|亚洲中文天堂综合|日韩欧美自拍一区|男女精品天堂一区|欧美自拍第6页亚洲成人精品一区|亚洲黄色天堂一区二区成人|超碰91偷拍第一页|日韩av夜夜嗨中文字幕|久久蜜综合视频官网|精美人妻一区二区三区

RELATEED CONSULTING
相關(guān)咨詢
選擇下列產(chǎn)品馬上在線溝通
服務(wù)時間:8:30-17:00
你可能遇到了下面的問題
關(guān)閉右側(cè)工具欄

新聞中心

這里有您想知道的互聯(lián)網(wǎng)營銷解決方案
創(chuàng)新互聯(lián)GO教程:Go語言字符串

一個字符串是一個不可改變的字節(jié)序列,字符串可以包含任意的數(shù)據(jù),但是通常是用來包含可讀的文本,字符串是 UTF-8 字符的一個序列(當字符為 ASCII 碼表上的字符時則占用 1 個字節(jié),其它字符根據(jù)需要占用 2-4 個字節(jié))。

成都創(chuàng)新互聯(lián)公司2013年成立,先為河間等服務(wù)建站,河間等地企業(yè),進行企業(yè)商務(wù)咨詢服務(wù)。為河間企業(yè)網(wǎng)站制作PC+手機+微官網(wǎng)三網(wǎng)同步一站式服務(wù)解決您的所有建站問題。

UTF-8 是一種被廣泛使用的編碼格式,是文本文件的標準編碼,其中包括 XML 和 JSON 在內(nèi)也都使用該編碼。由于該編碼對占用字節(jié)長度的不定性,在Go語言中字符串也可能根據(jù)需要占用 1 至 4 個字節(jié),這與其它編程語言如 C++、 Java 或者 Python 不同(Java 始終使用 2 個字節(jié))。Go語言這樣做不僅減少了內(nèi)存和硬盤空間占用,同時也不用像其它語言那樣需要對使用 UTF-8 字符集的文本進行編碼和解碼。

字符串是一種值類型,且值不可變,即創(chuàng)建某個文本后將無法再次修改這個文本的內(nèi)容,更深入地講,字符串是字節(jié)的定長數(shù)組。

定義字符串

可以使用雙引號
""來定義字符串,字符串中可以使用轉(zhuǎn)義字符來實現(xiàn)換行、縮進等效果,常用的轉(zhuǎn)義字符包括:

  • \n:換行符
  • \r:回車符
  • \t:tab 鍵
  • \u 或 \U:Unicode 字符
  • \\:反斜杠自身
package main

import (
    "fmt"
)

func main() {
    var str = "C語言中文網(wǎng)\nGo語言教程"
    fmt.Println(str)
}

運行結(jié)果為:

C語言中文網(wǎng)
Go語言教程

一般的比較運算符(==、!=、<、<=、>=、>)是通過在內(nèi)存中按字節(jié)比較來實現(xiàn)字符串比較的,因此比較的結(jié)果是字符串自然編碼的順序。字符串所占的字節(jié)長度可以通過函數(shù) len() 來獲取,例如 len(str)。

字符串的內(nèi)容(純字節(jié))可以通過標準索引法來獲取,在方括號
[ ]內(nèi)寫入索引,索引從 0 開始計數(shù):

  • 字符串 str 的第 1 個字節(jié):str[0]
  • 第 i 個字節(jié):str[i - 1]
  • 最后 1 個字節(jié):str[len(str)-1]

需要注意的是,這種轉(zhuǎn)換方案只對純 ASCII 碼的字符串有效。

注意:獲取字符串中某個字節(jié)的地址屬于非法行為,例如 &str[i]。

字符串拼接符“+”

兩個字符串 s1 和 s2 可以通過 s := s1 + s2 拼接在一起。將 s2 追加到 s1 尾部并生成一個新的字符串 s。

可以通過下面的方式來對代碼中多行的字符串進行拼接:

str := "Beginning of the string " +
"second part of the string"

提示:因為編譯器會在行尾自動補全分號,所以拼接字符串用的加號“+”必須放在第一行末尾。

也可以使用“+=”來對字符串進行拼接:

s := "hel" + "lo,"
s += "world!"
fmt.Println(s) //輸出 “hello, world!”

字符串實現(xiàn)基于 UTF-8 編碼

Go語言中字符串的內(nèi)部實現(xiàn)使用 UTF-8 編碼,通過 rune 類型,可以方便地對每個 UTF-8 字符進行訪問。當然,Go語言也支持按照傳統(tǒng)的 ASCII 碼方式逐字符進行訪問。

關(guān)于字符串的 UTF-8 字符訪問的詳細方法,后面的章節(jié)將會詳細介紹。

定義多行字符串

在Go語言中,使用雙引號書寫字符串的方式是字符串常見表達方式之一,被稱為
字符串字面量(string literal),這種雙引號字面量不能跨行,如果想要在源碼中嵌入一個多行字符串時,就必須使用
`反引號,代碼如下:

const str = `第一行
第二行
第三行
\r\n
`
fmt.Println(str)

代碼運行結(jié)果:

第一行
第二行
第三行
\r\n

反引號
`,是鍵盤上 1 鍵左邊的鍵,兩個反引號間的字符串將被原樣賦值到 str 變量中。

在這種方式下,反引號間換行將被作為字符串中的換行,但是所有的轉(zhuǎn)義字符均無效,文本將會原樣輸出。

多行字符串一般用于內(nèi)嵌源碼和內(nèi)嵌數(shù)據(jù)等,代碼如下:

const codeTemplate = `// Generated by github.com/davyxu/cellnet/
protoc-gen-msg
// DO NOT EDIT!{{range .Protos}}
// Source: {{.Name}}{{end}}

package {{.PackageName}}

{{if gt .TotalMessages 0}}
import (
    "github.com/davyxu/cellnet"
    "reflect"
    _ "github.com/davyxu/cellnet/codec/pb"
)
{{end}}

func init() {
    {{range .Protos}}
    // {{.Name}}{{range .Messages}}
    cellnet.RegisterMessageMeta("pb","{{.FullName}}", reflect.TypeOf((*{{.Name}})(nil)).Elem(), {{.MsgID}})    {{end}}
    {{end}}
}
`

這段代碼只定義了一個常量 codeTemplate,類型為字符串,使用
`定義,字符串的內(nèi)容為一段代碼生成中使用到的 Go 源碼格式。


`間的所有代碼均不會被編譯器識別,而只是作為字符串的一部分。

字符串類型在業(yè)務(wù)中的應(yīng)用可以說是最廣泛的,讀者需要詳細了解字符串的常見用法,請猛擊下面的文章:

  • Go語言計算字符串長度——len()和RuneCountInString()
  • Go語言遍歷字符串——獲取每一個字符串元素
  • Go語言字符串截取(獲取字符串的某一段字符)
  • Go語言修改字符串
  • Go語言字符串拼接(連接)
  • Go語言fmt.Sprintf(格式化輸出)
  • Go語言Base64編碼——電子郵件的基礎(chǔ)編碼格式

當前名稱:創(chuàng)新互聯(lián)GO教程:Go語言字符串
本文路徑:http://www.dlmjj.cn/article/dpsphjd.html