在线观看不卡亚洲电影_亚洲妓女99综合网_91青青青亚洲娱乐在线观看_日韩无码高清综合久久

鍍金池/ 教程/ GO/ 7.6 字符串處理
7 文本處理
3 Web基礎(chǔ)
14 擴(kuò)展Web框架
10.4 小結(jié)
2.2 Go基礎(chǔ)
2.8 總結(jié)
6.1 session和cookie
5.5 使用beedb庫進(jìn)行ORM開發(fā)
8.3 REST
13.6 小結(jié)
5.4 使用PostgreSQL數(shù)據(jù)庫
14.6 pprof支持
14.1 靜態(tài)文件支持
11.2 使用GDB調(diào)試
7.7 小結(jié)
1 GO環(huán)境配置
14.5 多語言支持
7.1 XML處理
1.5 總結(jié)
13 如何設(shè)計(jì)一個(gè)Web框架
14.3 表單及驗(yàn)證支持
12 部署與維護(hù)
10 國(guó)際化和本地化
1.1 Go 安裝
6.2 Go如何使用session
5.6 NOSQL數(shù)據(jù)庫操作
6.5 小結(jié)
9.4 避免SQL注入
12.1 應(yīng)用日志
4.2 驗(yàn)證表單的輸入
10.1 設(shè)置默認(rèn)地區(qū)
1.3 Go 命令
9.6 加密和解密數(shù)據(jù)
4.1 處理表單的輸入
4.4 防止多次遞交表單
11.3 Go怎么寫測(cè)試用例
8 Web服務(wù)
12.3 應(yīng)用部署
5.7 小結(jié)
12.5 小結(jié)
11 錯(cuò)誤處理,調(diào)試和測(cè)試
9.2 確保輸入過濾
14.2 Session支持
6.4 預(yù)防session劫持
12.4 備份和恢復(fù)
8.1 Socket編程
13.1 項(xiàng)目規(guī)劃
13.4 日志和配置設(shè)計(jì)
7.6 字符串處理
13.2 自定義路由器設(shè)計(jì)
6.3 session存儲(chǔ)
3.4 Go的http包詳解
8.2 WebSocket
10.3 國(guó)際化站點(diǎn)
7.5 文件操作
7.4 模板處理
9.1 預(yù)防CSRF攻擊
13.3 controller設(shè)計(jì)
2.6 interface
14.4 用戶認(rèn)證
2.3 流程和函數(shù)
附錄A 參考資料
11.1 錯(cuò)誤處理
9.5 存儲(chǔ)密碼
9.3 避免XSS攻擊
12.2 網(wǎng)站錯(cuò)誤處理
6 session和數(shù)據(jù)存儲(chǔ)
2.4 struct類型
3.3 Go如何使得Web工作
2.5 面向?qū)ο?/span>
3.1 Web工作方式
1.2 GOPATH與工作空間
2.1 你好,Go
9.7 小結(jié)
13.5 實(shí)現(xiàn)博客的增刪改
7.2 JSON處理
10.2 本地化資源
7.3 正則處理
2 Go語言基礎(chǔ)
5.1 database/sql接口
4.5 處理文件上傳
8.5 小結(jié)
4.3 預(yù)防跨站腳本
5.3 使用SQLite數(shù)據(jù)庫
14.7 小結(jié)
3.2 Go搭建一個(gè)Web服務(wù)器
2.7 并發(fā)
5 訪問數(shù)據(jù)庫
4 表單
3.5 小結(jié)
1.4 Go開發(fā)工具
11.4 小結(jié)
9 安全與加密
5.2 使用MySQL數(shù)據(jù)庫
4.6 小結(jié)
8.4 RPC

7.6 字符串處理

字符串在我們平常的Web開發(fā)中經(jīng)常用到,包括用戶的輸入,數(shù)據(jù)庫讀取的數(shù)據(jù)等,我們經(jīng)常需要對(duì)字符串進(jìn)行分割、連接、轉(zhuǎn)換等操作,本小節(jié)將通過Go標(biāo)準(zhǔn)庫中的strings和strconv兩個(gè)包中的函數(shù)來講解如何進(jìn)行有效快速的操作。

字符串操作

下面這些函數(shù)來自于strings包,這里介紹一些我平常經(jīng)常用到的函數(shù),更詳細(xì)的請(qǐng)參考官方的文檔。

  • func Contains(s, substr string) bool

    字符串s中是否包含substr,返回bool值

      fmt.Println(strings.Contains("seafood", "foo"))
      fmt.Println(strings.Contains("seafood", "bar"))
      fmt.Println(strings.Contains("seafood", ""))
      fmt.Println(strings.Contains("", ""))
      //Output:
      //true
      //false
      //true
      //true
  • func Join(a []string, sep string) string

    字符串鏈接,把slice a通過sep鏈接起來

      s := []string{"foo", "bar", "baz"}
      fmt.Println(strings.Join(s, ", "))
      //Output:foo, bar, baz      
  • func Index(s, sep string) int

    在字符串s中查找sep所在的位置,返回位置值,找不到返回-1

      fmt.Println(strings.Index("chicken", "ken"))
      fmt.Println(strings.Index("chicken", "dmr"))
      //Output:4
      //-1
  • func Repeat(s string, count int) string

    重復(fù)s字符串count次,最后返回重復(fù)的字符串

      fmt.Println("ba" + strings.Repeat("na", 2))
      //Output:banana
  • func Replace(s, old, new string, n int) string

    在s字符串中,把old字符串替換為new字符串,n表示替換的次數(shù),小于0表示全部替換

      fmt.Println(strings.Replace("oink oink oink", "k", "ky", 2))
      fmt.Println(strings.Replace("oink oink oink", "oink", "moo", -1))
      //Output:oinky oinky oink
      //moo moo moo
  • func Split(s, sep string) []string

    把s字符串按照sep分割,返回slice

      fmt.Printf("%q\n", strings.Split("a,b,c", ","))
      fmt.Printf("%q\n", strings.Split("a man a plan a canal panama", "a "))
      fmt.Printf("%q\n", strings.Split(" xyz ", ""))
      fmt.Printf("%q\n", strings.Split("", "Bernardo O'Higgins"))
      //Output:["a" "b" "c"]
      //["" "man " "plan " "canal panama"]
      //[" " "x" "y" "z" " "]
      //[""]
  • func Trim(s string, cutset string) string

    在s字符串的頭部和尾部去除cutset指定的字符串

      fmt.Printf("[%q]", strings.Trim(" !!! Achtung !!! ", "! "))
      //Output:["Achtung"]
  • func Fields(s string) []string

    去除s字符串的空格符,并且按照空格分割返回slice

      fmt.Printf("Fields are: %q", strings.Fields("  foo bar  baz   "))
      //Output:Fields are: ["foo" "bar" "baz"]

字符串轉(zhuǎn)換

字符串轉(zhuǎn)化的函數(shù)在strconv中,如下也只是列表一些常用的:

  • Append 系列函數(shù)將整數(shù)等轉(zhuǎn)換為字符串后,添加到現(xiàn)有的字節(jié)數(shù)組中。

      package main
    
      import (
          "fmt"
          "strconv"
      )
    
      func main() {
          str := make([]byte, 0, 100)
          str = strconv.AppendInt(str, 4567, 10)
          str = strconv.AppendBool(str, false)
          str = strconv.AppendQuote(str, "abcdefg")
          str = strconv.AppendQuoteRune(str, '單')
          fmt.Println(string(str))
      }
  • Format 系列函數(shù)把其他類型的轉(zhuǎn)換為字符串

      package main
    
      import (
          "fmt"
          "strconv"
      )
    
      func main() {
          a := strconv.FormatBool(false)
          b := strconv.FormatFloat(123.23, 'g', 12, 64)
          c := strconv.FormatInt(1234, 10)
          d := strconv.FormatUint(12345, 10)
          e := strconv.Itoa(1023)
          fmt.Println(a, b, c, d, e)
      }
  • Parse 系列函數(shù)把字符串轉(zhuǎn)換為其他類型

      package main
    
      import (
          "fmt"
          "strconv"
      )
      func checkError(e error){
          if e != nil{
              fmt.Println(e)
          }
      }
      func main() {
          a, err := strconv.ParseBool("false")
          checkError(err)
          b, err := strconv.ParseFloat("123.23", 64)
          checkError(err)
          c, err := strconv.ParseInt("1234", 10, 64)
          checkError(err)
          d, err := strconv.ParseUint("12345", 10, 64)
          checkError(err)
          e, err := strconv.Atoi("1023")
          checkError(err)
          fmt.Println(a, b, c, d, e)
      }