Le package fmt
de Go fournit des capacités de formatage de chaînes puissantes, principalement à travers des fonctions comme fmt.Printf
et fmt.Sprintf
. Ces fonctions utilisent des spécificateurs de format pour définir comment les arguments doivent être formatés dans une chaîne.
Les deux fonctions reposent sur des spécificateurs de format, qui sont des espaces réservés dans une chaîne qui définissent comment les données doivent être formatées. Par exemple, %s
est utilisé pour les chaînes, %d
pour les entiers et %f
pour les nombres à virgule flottante.
Voici un exemple simple de la façon dont fmt.Printf
et fmt.Sprintf
sont utilisés:
<code class="go">package main import "fmt" func main() { name := "Alice" age := 30 // Using fmt.Printf to print directly to console fmt.Printf("My name is %s and I am %d years old.\n", name, age) // Using fmt.Sprintf to return a formatted string formattedString := fmt.Sprintf("My name is %s and I am %d years old.", name, age) fmt.Println(formattedString) }</code>
Les principales différences entre fmt.Printf
et fmt.Sprintf
dans Go sont:
fmt.Printf
écrit la chaîne formatée directement sur la sortie standard (console), tandis que fmt.Sprintf
renvoie la chaîne formatée en tant que valeur string
qui peut être stockée ou utilisée plus tard.fmt.Printf
est généralement utilisé lorsque la sortie immédiate de la console est souhaitée, ce qui le rend adapté à des applications de débogage ou d'interactives. En revanche, fmt.Sprintf
est utile lorsque la chaîne formatée doit être traitée plus loin ou stockée dans une variable avant utilisation.fmt.Printf
ne renvoie pas de valeur; Il ne fait que l'effet secondaire de l'impression sur la console. fmt.Sprintf
, cependant, renvoie la chaîne formatée, qui peut être attribuée à une variable. Le package fmt
de Go prend en charge une variété de spécificateurs de format pour gérer différents types de données et besoins de formatage. Voici quelques spécificateurs de format commun:
% S : Formatage des chaînes.
<code class="go">name := "Bob" fmt.Printf("Hello, %s!\n", name)</code>
% D : Formatage en entier décimal.
<code class="go">age := 25 fmt.Printf("Age: %d\n", age)</code>
% F : Formatage du nombre de points flottants.
<code class="go">price := 12.99 fmt.Printf("Price: %.2f\n", price) // Two decimal places</code>
% V : Le format par défaut du type de la valeur.
<code class="go">structVal := struct { Name string Age int }{"Charlie", 30} fmt.Printf("Value: %v\n", structVal) // Output: Value: {Charlie 30}</code>
% T : type de valeur.
<code class="go">var num int = 42 fmt.Printf("Type: %T\n", num) // Output: Type: int</code>
% P : Adresse du pointeur.
<code class="go">ptr := &num fmt.Printf("Pointer: %p\n", ptr)</code>
fmt.Fprintf
est similaire à fmt.Printf
, mais il vous permet de spécifier une destination pour la sortie formatée. Cette fonction prend un io.Writer
comme premier argument, qui peut être tout type qui implémente la méthode Write
, telle que os.File
, bytes.Buffer
ou strings.Builder
.
Voici un exemple démontrant comment utiliser fmt.Fprintf
avec différentes destinations:
<code class="go">package main import ( "fmt" "os" "bytes" "strings" ) func main() { // Writing to stdout fmt.Fprintf(os.Stdout, "Hello, stdout!\n") // Writing to a file file, err := os.Create("output.txt") if err != nil { panic(err) } defer file.Close() fmt.Fprintf(file, "Hello, file!\n") // Writing to bytes.Buffer var buffer bytes.Buffer fmt.Fprintf(&buffer, "Hello, buffer!") fmt.Println("Buffer content:", buffer.String()) // Writing to strings.Builder var builder strings.Builder fmt.Fprintf(&builder, "Hello, builder!") fmt.Println("Builder content:", builder.String()) }</code>
Dans cet exemple, fmt.Fprintf
est utilisé pour écrire la sortie formatée vers la sortie standard, un fichier, un bytes.Buffer
et un strings.Builder
. Chaque cas montre à quel point fmt.Fprintf
peut être flexible et puissant pour diriger la sortie formatée vers différentes destinations en Go.
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!