fmt와 strings 패키지
출력 형식 지정과 문자열 조작
fmt와 strings 패키지은(는) CoddyKit의 무료 Go Academy 강의입니다. 이것은 4개 중 1번째 강의입니다. 아래에서 전체 강의를 무료로 읽을 수 있으며, 내장 코드 에디터와 24/7 AI 튜터와 함께 브라우저에서 직접 실습할 수 있습니다. 이 강의는 Go Academy 학습 경로의 일부이며, 진행 상황이 웹과 CoddyKit 앱에 동기화됩니다. Go Academy 강의에는 총 4개의 강의가 포함되어 있습니다.
fmt 패키지 개요
fmt 패키지는 형식 지정 입출력을 구현합니다. 주요 함수:
fmt.Print,fmt.Println,fmt.Printf— 표준 출력에 씁니다fmt.Sprint,fmt.Sprintf,fmt.Sprintln— 문자열을 반환합니다fmt.Fprint,fmt.Fprintf— 모든 io.Writer에 씁니다fmt.Scan,fmt.Scanf— 표준 입력에서 읽습니다
fmt 형식 지정 동사
fmt.Printf에서 사용하는 일반적인 형식 지정 동사:
package main
import "fmt"
func main() {
name := "Gopher"
age := 15
score := 98.6
fmt.Printf("%s is %d years old\n", name, age)
fmt.Printf("Score: %.1f%%\n", score)
fmt.Printf("Type: %T, Value: %v\n", age, age)
fmt.Printf("Hex: %x, Binary: %b\n", 255, 255)
fmt.Printf("Padded: %10s|%-10s\n", name, name)
}문자열 생성을 위한 fmt.Sprintf
fmt.Sprintf는 형식이 지정된 문자열을 출력하지 않고 반환하므로 문자열을 생성할 때 유용합니다:
package main
import "fmt"
func formatUser(name string, age int) string {
return fmt.Sprintf("User{name: %q, age: %d}", name, age)
}
func main() {
fmt.Println(formatUser("Alice", 30))
// User{name: "Alice", age: 30}
// %q adds quotes; %+v prints struct field names
type Point struct{X, Y int}
p := Point{1, 2}
fmt.Printf("%+v\n", p) // {X:1 Y:2}
}오류 형식을 위한 fmt.Errorf
fmt.Errorf는 형식이 지정된 오류 값을 생성합니다:
package main
import "fmt"
func getUser(id int) error {
return fmt.Errorf("getUser(%d): user not found", id)
}
func main() {
err := getUser(42)
fmt.Println(err) // getUser(42): user not found
// Wrap errors with %w for unwrapping:
base := fmt.Errorf("base error")
wrapped := fmt.Errorf("context: %w", base)
fmt.Println(wrapped)
}strings 패키지: 주요 함수
strings 패키지는 문자열 조작 함수를 제공합니다:
package main
import ("fmt"; "strings")
func main() {
s := " Hello, Go World! "
fmt.Println(strings.TrimSpace(s)) // "Hello, Go World!"
fmt.Println(strings.ToUpper(s)) // " HELLO, GO WORLD! "
fmt.Println(strings.ToLower(s)) // " hello, go world! "
fmt.Println(strings.Contains(s, "Go")) // true
fmt.Println(strings.HasPrefix(s, " Hel")) // true
fmt.Println(strings.Count(s, "l")) // 3
}strings.Split과 strings.Join
strings.Split은 문자열을 나누고, strings.Join은 슬라이스를 결합합니다:
package main
import ("fmt"; "strings")
func main() {
csv := "alice,bob,carol,dave"
names := strings.Split(csv, ",") // ["alice" "bob" "carol" "dave"]
fmt.Println(names)
upper := make([]string, len(names))
for i, n := range names {
upper[i] = strings.ToUpper(n)
}
result := strings.Join(upper, " | ")
fmt.Println(result) // ALICE | BOB | CAROL | DAVE
}strings.Replace와 strings.ReplaceAll
부분 문자열이 나타나는 곳을 대체합니다:
package main
import ("fmt"; "strings")
func main() {
s := "foo bar foo baz foo"
// Replace first 2 occurrences
fmt.Println(strings.Replace(s, "foo", "XXX", 2))
// XXX bar XXX baz foo
// Replace all
fmt.Println(strings.ReplaceAll(s, "foo", "GO"))
// GO bar GO baz GO
}효율적인 연결을 위한 strings.Builder
strings.Builder를 사용하면 문자열을 효율적으로 만들 수 있습니다. 연결할 때마다 새 문자열을 할당하지 않습니다:
package main
import ("fmt"; "strings")
func join(parts []string, sep string) string {
var sb strings.Builder
for i, p := range parts {
if i > 0 { sb.WriteString(sep) }
sb.WriteString(p)
}
return sb.String()
}
func main() {
fmt.Println(join([]string{"a", "b", "c"}, "-")) // a-b-c
}strings.NewReader와 strings.Reader
strings.NewReader는 문자열에서 io.Reader를 생성하므로 리더를 받는 함수를 테스트할 때 유용합니다:
package main
import ("fmt"; "io"; "strings")
func readAll(r io.Reader) string {
data, _ := io.ReadAll(r)
return string(data)
}
func main() {
r := strings.NewReader("Hello from a string reader")
fmt.Println(readAll(r))
// Also: strings.NewReplacer for multiple replacements
rep := strings.NewReplacer("<", "<", ">", ">")
fmt.Println(rep.Replace("<b>bold</b>"))
}strings.Fields와 strings.Map
추가로 유용한 strings 함수:
package main
import ("fmt"; "strings")
func main() {
// Fields splits on any whitespace (like awk)
words := strings.Fields(" one two three ")
fmt.Println(words) // [one two three]
// Map applies a function to each rune
rot13 := func(r rune) rune {
if r >= 'a' && r <= 'z' { return 'a' + (r-'a'+13)%26 }
if r >= 'A' && r <= 'Z' { return 'A' + (r-'A'+13)%26 }
return r
}
fmt.Println(strings.Map(rot13, "Hello, World!"))
}빠른 확인
Go에서 많은 문자열을 효율적으로 연결하려면 어떤 함수를 사용해야 하나요?
요약: fmt와 strings
요약:
- 형식 지정 동사(
%s %d %f %v %T %q)를 사용하는 형식 지정 출력이나 문자열에는fmt.Printf/Sprintf를 사용합니다 - 형식이 지정된 오류에는
fmt.Errorf를 사용하고,%w로 오류를 감쌉니다 strings.Split/Join,Contains,Replace,TrimSpace,ToUpper/Lower를 사용합니다- 효율적인 연결에는
strings.Builder를 사용합니다 - 문자열을
io.Reader로 사용하려면strings.NewReader를 사용합니다
자주 묻는 질문
“fmt와 strings 패키지” 강의는 무료인가요?
네 — “fmt와 strings 패키지” 전체 내용을 이 웹사이트에서 무료로 읽을 수 있습니다. 인터랙티브하게 실습하려면(내장 코드 에디터와 24/7 AI 튜터), CoddyKit PRO로 업그레이드하면 Go Academy 강의 전체를 잠금 해제할 수 있습니다. Go Academy 강의에는 총 4개의 강의가 포함되어 있습니다.
“fmt와 strings 패키지”에서 뭘 배우나요?
출력 형식 지정과 문자열 조작 브라우저에서 직접 실행하는 실습 코드로 Go Academy을(를) 배우며, 24/7 AI 튜터가 강의를 진행하면서 질문에 답변해줍니다.
Go Academy을(를) 시작하는 데 경험이 필요한가요?
사전 경험은 필요하지 않습니다. CoddyKit의 Go Academy은(는) 초급자부터 고급 학습자까지를 위해 구성되어 있으므로, 여기서 시작하거나 처음부터 시작할 수 있으며 자신의 속도대로 진행할 수 있습니다. 이것은 4개 중 1번째 강의입니다.
“fmt와 strings 패키지” 강의는 얼마나 걸리나요?
대부분의 CoddyKit 강의는 약 5~10분이 소요됩니다. 각 강의는 간결하고 인터랙티브하여 꾸준한 진행이 가능하며, 웹과 앱에서 중단한 부분부터 바로 시작할 수 있습니다.
이 Go Academy 강의에서 코드를 작성하고 실행할 수 있나요?
네. 모든 Go Academy 강의에는 내장 코드 에디터가 포함되어 있으므로, 브라우저에서 바로 실제 코드를 작성하고 실행한 후 즉시 AI 피드백을 받을 수 있습니다 — 로컬 설정이 필요 없습니다.
이 강의의 모든 강의
- fmt와 strings 패키지
- strconv, math 및 sort
- time 패키지 핵심
- os와 filepath 패키지