Go中字元串處理:fmt.Sprintf與string.Builder的比較

来源:https://www.cnblogs.com/lianshuiwuyi/archive/2023/11/11/17825488.html
-Advertisement-
Play Games

在Go語言中,我們通常會遇到兩種主要的方式來處理和操作字元串:使用fmt.Sprintf函數和string.Builder類型。儘管兩者都可以實現字元串的格式化和連接,但它們在性能和用法上有一些關鍵區別。 1. fmt.Sprintf fmt.Sprintf是一個函數,它根據提供的格式化字元串和參數 ...


在Go語言中,我們通常會遇到兩種主要的方式來處理和操作字元串:使用fmt.Sprintf函數和string.Builder類型。儘管兩者都可以實現字元串的格式化和連接,但它們在性能和用法上有一些關鍵區別。

1. fmt.Sprintf

fmt.Sprintf是一個函數,它根據提供的格式化字元串和參數列表,將它們格式化為一個字元串。這個函數非常方便,可以方便地格式化各種數據類型,並生成字元串。

name := "John"
age := 30
str := fmt.Sprintf("My name is %s and I'm %d years old", name, age)
fmt.Println(str)

輸出:

My name is John and I'm 30 years old

2. string.Builder

string.Builder是一個類型,它提供了一個可增長的緩衝區來存儲字元串,從而避免了頻繁的字元串分配和複製操作。使用string.Builder可以高效地構建和操作字元串,特別是在需要頻繁追加、刪除或修改字元串的情況下。

var builder strings.Builder
builder.WriteString("Hello")
builder.WriteString(" ")
builder.WriteString("World!")
str := builder.String()
fmt.Println(str)

輸出:

Hello World!

3. 對比

在性能方面,string.Builder類型通常要優於fmt.Sprintf函數。

string.Builder是通過在內部使用一個可增長的緩衝區來存儲字元串,避免了頻繁的字元串分配和複製操作。在進行字元串操作時,它只會產生很小的開銷。當需要最終的字元串時,通過調用String()方法來獲取,這個操作也非常高效。

相比之下,fmt.Sprintf函數在格式化和構建字元串時可能會產生一些額外的開銷。它需要處理格式化字元串和可變參數的轉換,並且可能會產生臨時的字元串對象。在處理大量字元串時,這些開銷可能會累積起來,導致性能下降。

雖然兩者都可以用於字元串處理,但在性能方面,string.Builder通常更勝一籌。如果需要頻繁操作字元串並生成最終的字元串結果,建議使用string.Builder類型。


孟斯特

聲明:本作品採用署名-非商業性使用-相同方式共用 4.0 國際 (CC BY-NC-SA 4.0)進行許可,使用時請註明出處。
Author: mengbin
blog: mengbin
Github: mengbin92
cnblogs: 戀水無意



您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 這裡給大家分享我在網上總結出來的一些知識,希望對大家有所幫助 眾所周知,vue路由模式常見的有 history 和 hash 模式,但其實還有一種方式-abstract模式(瞭解一哈~) 別急,本文我們將重點逐步瞭解: 路由 + 幾種路由模式 + 使用場景 + 思考 + freestyle 路由概念 ...
  • 架構目標 高可用性 整體系統可用性最低99.9%,目標99.99%。全年故障時間整個系統不超過500分鐘,單個系統故障不超過50分鐘。 高可擴展性 系統架構簡單清晰,應用系統間耦合低,容易水平擴展,業務功能增改方便快捷。 低成本 增加服務的重用性,提高開發效率,降低人力成本; 最終一致性 服務設計能 ...
  • 本文介紹Util應用框架如何記錄日誌. 日誌記錄共分4篇,本文是正文,後續還有3篇分別介紹寫入不同日誌接收器的安裝和配置方法. 概述 日誌記錄對於瞭解系統執行情況非常重要. Asp.Net Core 抽象了日誌基礎架構,支持使用日誌提供程式進行擴展,提供控制台日誌等簡單實現. Serilog 是 . ...
  • 四、基本數據類型和計算(三) 1、枚舉變數 1)通過案例體現枚舉類型的作用 ​ 假設要為我們的游戲裝備設置稀有度屬性,應該如何設計 裝備級別 變數名 普通 normal 高級 high 稀有 rare 史詩 epic 傳說 legend 神話 myth 不使用枚舉變數,使用常量方式設置 #inclu ...
  • 使用 ORDER BY 進行排序 使用 ORDER BY 語句按升序或降序對結果進行排序。 ORDER BY 關鍵字預設按升序排序。要按降序排序結果,使用 DESC 關鍵字。 示例按名稱按字母順序排序結果: import mysql.connector mydb = mysql.connector. ...
  • 1. pip命令 查看已安裝的包 pip list 安裝包 pip install package_name 卸載包 # 卸載指定包 pip uninstall package_name # 卸載已安裝的所有第三方Python庫 pip freeze > list.txt pip uninstall ...
  • 危機感 距離上一次找工作面試已經過去快2年了,那時候正值疫情肆虐,雖然還未感受到“寒潮來臨”的苗頭,但最終還是成功通過了幾輪面試,順利簽約。在目前公司待了2年了,在大環境的影響下,沒有加薪、沒有年終(這個真的很傷)、各種項目混亂、技術快停滯不前,年末又要過一年了,又離35進一步了,終危機感又來了,不 ...
  • 寫在前面 就在這周三,無意間我在掘金刷到一篇文章,讓我這個35歲的單身老狗又次相信了愛情,而且相信真的會有那種所謂的緣分和相濡以沫、雙向奔赴的愛情。 我又相信了愛情 文中男主是在掘金相親角成功的找到了另一半,而順利結婚,打動我的應該是女主的真誠吧,或許應該說那應該是我最嚮往的愛情,如下文中描述: 簡 ...
一周排行
    -Advertisement-
    Play Games
  • 示例項目結構 在 Visual Studio 中創建一個 WinForms 應用程式後,項目結構如下所示: MyWinFormsApp/ │ ├───Properties/ │ └───Settings.settings │ ├───bin/ │ ├───Debug/ │ └───Release/ ...
  • [STAThread] 特性用於需要與 COM 組件交互的應用程式,尤其是依賴單線程模型(如 Windows Forms 應用程式)的組件。在 STA 模式下,線程擁有自己的消息迴圈,這對於處理用戶界面和某些 COM 組件是必要的。 [STAThread] static void Main(stri ...
  • 在WinForm中使用全局異常捕獲處理 在WinForm應用程式中,全局異常捕獲是確保程式穩定性的關鍵。通過在Program類的Main方法中設置全局異常處理,可以有效地捕獲並處理未預見的異常,從而避免程式崩潰。 註冊全局異常事件 [STAThread] static void Main() { / ...
  • 前言 給大家推薦一款開源的 Winform 控制項庫,可以幫助我們開發更加美觀、漂亮的 WinForm 界面。 項目介紹 SunnyUI.NET 是一個基於 .NET Framework 4.0+、.NET 6、.NET 7 和 .NET 8 的 WinForm 開源控制項庫,同時也提供了工具類庫、擴展 ...
  • 說明 該文章是屬於OverallAuth2.0系列文章,每周更新一篇該系列文章(從0到1完成系統開發)。 該系統文章,我會儘量說的非常詳細,做到不管新手、老手都能看懂。 說明:OverallAuth2.0 是一個簡單、易懂、功能強大的許可權+可視化流程管理系統。 有興趣的朋友,請關註我吧(*^▽^*) ...
  • 一、下載安裝 1.下載git 必須先下載並安裝git,再TortoiseGit下載安裝 git安裝參考教程:https://blog.csdn.net/mukes/article/details/115693833 2.TortoiseGit下載與安裝 TortoiseGit,Git客戶端,32/6 ...
  • 前言 在項目開發過程中,理解數據結構和演算法如同掌握蓋房子的秘訣。演算法不僅能幫助我們編寫高效、優質的代碼,還能解決項目中遇到的各種難題。 給大家推薦一個支持C#的開源免費、新手友好的數據結構與演算法入門教程:Hello演算法。 項目介紹 《Hello Algo》是一本開源免費、新手友好的數據結構與演算法入門 ...
  • 1.生成單個Proto.bat內容 @rem Copyright 2016, Google Inc. @rem All rights reserved. @rem @rem Redistribution and use in source and binary forms, with or with ...
  • 一:背景 1. 講故事 前段時間有位朋友找到我,說他的窗體程式在客戶這邊出現了卡死,讓我幫忙看下怎麼回事?dump也生成了,既然有dump了那就上 windbg 分析吧。 二:WinDbg 分析 1. 為什麼會卡死 窗體程式的卡死,入口門檻很低,後續往下分析就不一定了,不管怎麼說先用 !clrsta ...
  • 前言 人工智慧時代,人臉識別技術已成為安全驗證、身份識別和用戶交互的關鍵工具。 給大家推薦一款.NET 開源提供了強大的人臉識別 API,工具不僅易於集成,還具備高效處理能力。 本文將介紹一款如何利用這些API,為我們的項目添加智能識別的亮點。 項目介紹 GitHub 上擁有 1.2k 星標的 C# ...