0Pricing
Go Academy · Lekcja

Sprintf i Fprintf

Formatuj do stringów i obiektów zapisujących

Sprintf i Fprintf to bezpłatna lekcja Go Academy na CoddyKit. To lekcja 2 z 4. Możesz przeczytać całą lekcję poniżej za darmo — a potem ćwiczyć ją interaktywnie w przeglądarce z wbudowanym edytorem kodu i tutorem AI dostępnym 24/7. To część ścieżki edukacyjnej Go Academy, a Twój postęp synchronizuje się między webem a aplikacją CoddyKit. Kurs Go Academy zawiera 4 lekcji w sumie.

Rodzina Printf

Pakiet fmt udostępnia trzy spokrewnione funkcje formatujące:

  • Printf zapisuje do standardowego wyjścia.
  • Sprintf zwraca sformatowany łańcuch.
  • Fprintf zapisuje do dowolnego writer'a.
package main

import "fmt"

func main() {
    fmt.Printf("hello %s\n", "world")
}

Sprintf zwraca łańcuch

fmt.Sprintf formatuje dokładnie tak samo jak Printf, ale zamiast wypisywać wynik, zwraca go jako łańcuch, który można zapisać lub wykorzystać ponownie.

package main

import "fmt"

func main() {
    msg := fmt.Sprintf("%s scored %d", "Bob", 95)
    fmt.Println(msg)
}

Tworzenie identyfikatorów

Sprintf jest przydatne do składania kluczy, nazw plików lub etykiet z kilku części.

package main

import "fmt"

func main() {
    id := fmt.Sprintf("user-%04d", 42)
    fmt.Println(id)
}

Formatowanie liczb jako tekstu

Należy użyć Sprintf, aby przekształcać liczby w estetycznie sformatowane łańcuchy, na przykład przedstawiające kwoty.

package main

import "fmt"

func main() {
    label := fmt.Sprintf("Price: $%.2f", 7.5)
    fmt.Println(label)
}

Fprintf zapisuje do writer'a

fmt.Fprintf przyjmuje jako pierwszy argument io.Writer i formatuje dane, zapisując je do tego obiektu. os.Stdout jest przykładem takiego writer'a.

package main

import (
    "fmt"
    "os"
)

func main() {
    fmt.Fprintf(os.Stdout, "to stdout: %d\n", 1)
}

Zapis do standardowego wyjścia błędów

Należy wysyłać informacje diagnostyczne do os.Stderr za pomocą Fprintf, aby pozostały oddzielone od zwykłego wyjścia.

package main

import (
    "fmt"
    "os"
)

func main() {
    fmt.Fprintf(os.Stderr, "warning: %s\n", "low disk")
}

Fprintf zapisuje do buildera

Ponieważ strings.Builder również implementuje io.Writer, można formatować dane bezpośrednio do niego, a na końcu odczytać łańcuch.

package main

import (
    "fmt"
    "strings"
)

func main() {
    var b strings.Builder
    fmt.Fprintf(&b, "%s=%d;", "x", 10)
    fmt.Fprintf(&b, "%s=%d", "y", 20)
    fmt.Println(b.String())
}

Fprintf zapisuje do bytes.Buffer

bytes.Buffer jest kolejnym często używanym celem zapisu. Należy zbudować zawartość, a następnie przekształcić ją w łańcuch.

package main

import (
    "bytes"
    "fmt"
)

func main() {
    var buf bytes.Buffer
    fmt.Fprintf(&buf, "row %d\n", 1)
    fmt.Fprintf(&buf, "row %d\n", 2)
    fmt.Print(buf.String())
}

Sprint i Fprint bez f

Wersje z f przyjmują łańcuch formatujący. Po usunięciu f otrzymujemy Sprint/Fprint, które po prostu łączą argumenty, stosując formatowanie domyślne.

package main

import "fmt"

func main() {
    s := fmt.Sprint("a", 1, true)
    fmt.Println(s)
}

Sprintln dodaje spacje

fmt.Sprintln łączy argumenty spacjami, dodaje znak nowej linii i zwraca wynikowy łańcuch.

package main

import "fmt"

func main() {
    s := fmt.Sprintln("x", 1, "y", 2)
    fmt.Print(s)
}

Wybór właściwego narzędzia

Wybór zależy od miejsca docelowego:

  • Potrzebny jest łańcuch? Należy użyć Sprintf.
  • Zapis do stdout? Należy użyć Printf.
  • Zapis do pliku, bufora lub strumienia błędów? Należy użyć Fprintf.
package main

import (
    "fmt"
    "os"
)

func main() {
    s := fmt.Sprintf("count=%d", 3)
    fmt.Fprintf(os.Stdout, "%s\n", s)
}

Szybkie sprawdzenie

Która funkcja zwraca sformatowany tekst zamiast go wypisywać?

Podsumowanie: Sprintf i Fprintf

Poznałeś rodzinę funkcji formatujących:

  • Sprintf zwraca łańcuch.
  • Fprintf zapisuje do dowolnego io.Writer (stdout, stderr, buforów i builderów).
  • Warianty bez f stosują formatowanie domyślne.
package main

import (
    "fmt"
    "strings"
)

func main() {
    var b strings.Builder
    fmt.Fprintf(&b, "result=%s", fmt.Sprintf("%d%%", 80))
    fmt.Println(b.String())
}

Często zadawane pytania

Czy lekcja „Sprintf i Fprintf” jest bezpłatna?

Tak — pełny tekst „Sprintf i Fprintf” jest dostępny za darmo tutaj w sieci. Aby ćwiczyć ją interaktywnie (wbudowany edytor kodu i tutor AI dostępny 24/7) i odblokować resztę kursu Go Academy, przejdź na CoddyKit PRO. Kurs Go Academy zawiera 4 lekcji w sumie.

Co nauczysz się w „Sprintf i Fprintf”?

Formatuj do stringów i obiektów zapisujących Ćwiczysz Go Academy z praktycznym kodem, który uruchamiasz bezpośrednio w przeglądarce, a tutor AI dostępny 24/7 odpowiada na Twoje pytania podczas pracy nad lekcją.

Czy potrzebuję doświadczenia, aby zacząć Go Academy?

Nie wymagamy żadnego doświadczenia. Go Academy w CoddyKit jest strukturyzowany dla początkujących i zaawansowanych użytkowników, więc możesz zacząć tutaj lub od początku i uczyć się w swoim tempie. To lekcja 2 z 4.

Ile czasu zajmuje lekcja „Sprintf i Fprintf”?

Większość lekcji CoddyKit trwa około 5–10 minut. Każda lekcja to mały, interaktywny krok, dzięki czemu robisz systematyczne postępy i zawsze wracasz dokładnie do tego samego miejsca — na webie i w aplikacji.

Czy mogę pisać i uruchamiać kod w tej lekcji Go Academy?

Tak. Każda lekcja Go Academy zawiera wbudowany edytor kodu, więc piszesz i uruchamiasz prawdziwy kod bezpośrednio w przeglądarce i od razu otrzymujesz sprzężenie zwrotne od AI — bez konfiguracji na komputerze.

Wszystkie lekcje w tym kursie

  1. Dyrektywy Printf
  2. Sprintf i Fprintf
  3. Interfejs Stringer
  4. Skanowanie danych wejściowych
← Powrót do Go Academy