欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

Golang截取字符串方法示例講解及對(duì)比

 更新時(shí)間:2023年05月16日 10:13:24   作者:raoxiaoya  
這篇文章主要介紹了Golang截取字符串方法,文中介紹了使用rune函數(shù)和utf包以及range遍歷的方式,熟練掌握這些可以幫助我們更方便地處理字符串,提高編程效率和代碼質(zhì)量,感興趣的同學(xué)可以參考下文

1、使用 rune

func BenchmarkSubstr1(b *testing.B) {
	s := "bench基準(zhǔn)測(cè)試,1212"
	for i := 0; i < b.N; i++ {
		s1 := []rune(s)
		s2 := s1[1:6]
		_ = string(s2)
	}
}

2、使用utf包

在中英文混合字符串中,如果能知道每個(gè)字符占幾個(gè)字節(jié),我們也可以實(shí)現(xiàn)截取,于是我們可以從 utf8 編碼的格式入手,實(shí)際上計(jì)算機(jī)能夠識(shí)別出這些字節(jié)也是基于既定的編碼格式,utf8.DecodeRuneInString()方法也是依據(jù)這個(gè)原理,此方法會(huì)從輸入的字符串開(kāi)頭處逐個(gè)字節(jié)讀取,直到滿足一個(gè) utf8 字符。

func DecodeRuneInString(s string) (r rune, size int)

返回一個(gè) rune 類(lèi)型,以及此字符占用幾個(gè)字節(jié)。

func BenchmarkSubstr2(b *testing.B) {
	s := "bench基準(zhǔn)測(cè)試,1212"
	st := 1
	en := 6
	for i := 0; i < b.N; i++ {
		var start, end int
		var c int
		for i := 0; i <= en && c < len(s); i++ {
			_, size := utf8.DecodeRuneInString(s[c:])
			if i == st {
				start = c
			}
			if i == en {
				end = c
			}
			c += size
		}
		_ = s[start:end]
	}
}

3、使用range遍歷

range 遍歷字符串時(shí),默認(rèn)使用 字符 迭代,也就是 ASCII中文 都算作一個(gè) 字符,比如

func TestSubstr(t *testing.T) {
	s := "bench基準(zhǔn)測(cè)試,1212"
	for k, v := range s {
		fmt.Println(k, string(v))
	}
}

打印輸出

0 b
1 e
2 n
3 c
4 h
5 基
8 準(zhǔn)
11 測(cè)
14 試
17 ,
20 1
21 2
22 1
23 2

可見(jiàn) range 默認(rèn)就支持 unicode,因此變量 k 不是連續(xù)的,找到 k 即可。

func TestSubstr(t *testing.T) {
	s := "bench基準(zhǔn)測(cè)試,1212"
	var start, end int
	var c int
	for k := range s {
		if c == 1 {
			start = k
		}
		if c == 6 {
			end = k
		}
		c++
	}
	fmt.Println(s[start:end]) // ench基
}
func BenchmarkSubstr3(b *testing.B) {
	s := "bench基準(zhǔn)測(cè)試,1212"
	for i := 0; i < b.N; i++ {
		var start, end int
		var c int
		for k := range s {
			if c == 1 {
				start = k
			}
			if c == 6 {
				end = k
			}
			c++
		}
		_ = s[start:end]
	}
}

> go test -bench=BenchmarkSubstr -benchtime=100000x -benchmem
goos: windows
goarch: amd64
pkg: test
cpu: Intel(R) Core(TM) i7-4790 CPU @ 3.60GHz
BenchmarkSubstr1-8        100000               107.5 ns/op             0 B/op          0 allocs/op
BenchmarkSubstr2-8        100000                37.74 ns/op            0 B/op          0 allocs/op
BenchmarkSubstr3-8        100000                37.72 ns/op            0 B/op          0 allocs/op 

到此這篇關(guān)于Golang截取字符串方法示例講解及對(duì)比的文章就介紹到這了,更多相關(guān)Go截取字符串內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • Go緩沖channel和非緩沖channel的區(qū)別說(shuō)明

    Go緩沖channel和非緩沖channel的區(qū)別說(shuō)明

    這篇文章主要介紹了Go緩沖channel和非緩沖channel的區(qū)別說(shuō)明,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧
    2021-04-04
  • golang中命令行庫(kù)cobra的使用方法示例

    golang中命令行庫(kù)cobra的使用方法示例

    這篇文章主要給大家介紹了關(guān)于golang中命令行庫(kù)cobra的使用方法,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2018-08-08
  • 淺談go中切片比數(shù)組好用在哪

    淺談go中切片比數(shù)組好用在哪

    數(shù)組和切片都是常見(jiàn)的數(shù)據(jù)結(jié)構(gòu),本文將介紹Go語(yǔ)言中數(shù)組和切片的基本概念,同時(shí)詳細(xì)探討切片的優(yōu)勢(shì),感興趣的可以了解下
    2023-06-06
  • Go獲取兩個(gè)時(shí)間點(diǎn)時(shí)間差的具體實(shí)現(xiàn)

    Go獲取兩個(gè)時(shí)間點(diǎn)時(shí)間差的具體實(shí)現(xiàn)

    本文主要介紹了Go獲取兩個(gè)時(shí)間點(diǎn)時(shí)間差的具體實(shí)現(xiàn),文中通過(guò)示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2022-04-04
  • Go語(yǔ)言使用GORM操作數(shù)據(jù)庫(kù)使用指南

    Go語(yǔ)言使用GORM操作數(shù)據(jù)庫(kù)使用指南

    GORM(全稱為Go?Object?Relational?Mapping)是一個(gè)在Go語(yǔ)言中使用的輕量級(jí)的對(duì)象關(guān)系映射(ORM)庫(kù),本文主要為大家介紹了GORM操作數(shù)據(jù)庫(kù)具體方法,需要的可以參考一下
    2023-05-05
  • 一文解析 Golang sync.Once 用法及原理

    一文解析 Golang sync.Once 用法及原理

    這篇文章主要介紹了一文解析 Golang sync.Once 用法及原理,文章圍繞主題展開(kāi)詳細(xì)的內(nèi)容介紹,具有一定的參考價(jià)值,需要的小伙伴可以參考一下
    2022-08-08
  • Golang使用Gin框架實(shí)現(xiàn)HTTP響應(yīng)格式統(tǒng)一處理

    Golang使用Gin框架實(shí)現(xiàn)HTTP響應(yīng)格式統(tǒng)一處理

    在gin框架中,我們可以定義一個(gè)中間件來(lái)處理統(tǒng)一的HTTP響應(yīng)格式,本文主要為大家介紹了具體是怎么定義實(shí)現(xiàn)這樣的中間件的,感興趣的小伙伴可以了解一下
    2023-07-07
  • 如何使用go-zero開(kāi)發(fā)線上項(xiàng)目

    如何使用go-zero開(kāi)發(fā)線上項(xiàng)目

    這篇文章主要介紹了如何使用go-zero開(kāi)發(fā)線上項(xiàng)目,本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2020-12-12
  • Go引用github包的詳細(xì)流程步驟

    Go引用github包的詳細(xì)流程步驟

    這篇文章主要給大家介紹了關(guān)于Go引用github包的詳細(xì)流程步驟,文中通過(guò)圖文介紹的非常詳細(xì),對(duì)大家學(xué)習(xí)或者使用Go具有一定的參考價(jià)值,需要的朋友可以參考下
    2024-02-02
  • Gin 框架快速創(chuàng)建靜態(tài)文件下載Web服務(wù)

    Gin 框架快速創(chuàng)建靜態(tài)文件下載Web服務(wù)

    本文主要介紹了Gin 框架快速創(chuàng)建靜態(tài)文件下載Web服務(wù),文中通過(guò)示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2021-12-12

最新評(píng)論