رشته‌ها (Strings)

تعریف رشته، دسترسی با ایندکس، برش (Slicing)، طول رشته و کاراکترهای Unicode.

رشته در Go

رشته در Go دنباله‌ای از بایت‌ها (معمولاً کدگذاری UTF-8) است. رشته‌ها تغییرناپذیر (Immutable) هستند — بعد از ساخت، نمی‌توان کاراکتری را مستقیم تغییر داد.

تعریف رشته

// با گیومه دوتایی — استاندارد
s1 := "سلام دنیا"

// با بک‌تیک — رشته خام (raw string)
s2 := `این رشته خام است
و می‌تواند چند خط باشد
بدون \n`

// رشته خالی
var s3 string = ""
s4 := ""

طول رشته

s := "Hello"
fmt.Println(len(s))   ← 5 (تعداد بایت)

f := "سلام"
fmt.Println(len(f))   ← 8 (هر حرف فارسی ۲ بایت UTF-8)
تابع len() تعداد بایت را می‌دهد نه تعداد کاراکتر! برای شمارش کاراکترهای فارسی/Unicode از utf8.RuneCountInString() استفاده کنید.

دسترسی به کاراکترها

s := "Hello"

fmt.Println(s[0])     ← 72 (کد بایت H)
fmt.Println(string(s[0]))  ← H (تبدیل به رشته)

// برش (Slicing)
fmt.Println(s[0:2])   ← He
fmt.Println(s[:3])    ← Hel (از اول تا ۳)
fmt.Println(s[2:])    ← llo (از ۲ تا آخر)
fmt.Println(s[:])     ← Hello (کل)

الحاق رشته‌ها

first := "سلام"
second := "دنیا"

// با عملگر +
full := first + " " + second

// با +=
greeting := "سلام"
greeting += "!"

fmt.Println(full, greeting)
برای الحاق تعداد زیاد رشته، از strings.Builder یا strings.Join استفاده کنید — سریع‌تر از + است.

رشته‌های خام (Raw Strings)

با بک‌تیک ` تعریف می‌شوند و کاراکترهای کنترلی در آن‌ها معنا ندارند:

path := `C:\Users\name\folder`
regex := `\d+`
multi := `خط اول
خط دوم`

کاراکترهای ویژه (Escape)

کاراکترمعنا
\nخط جدید
\tتب افقی
\بک‌اسلش
\"گیومه دوتایی

پیمایش رشته با for range

برای کار با کاراکترهای Unicode (مثل فارسی)، از for range استفاده کنید که rune (کاراکتر) می‌دهد نه بایت:

for i, r := range "سلام" {
    fmt.Printf("%d: %c\n", i, r)
}

این مبحث بخشی از دوره آموزش کامل گو است.

ابزارهای مرتبط