رشتهها (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)
}
این مبحث بخشی از دوره آموزش کامل گو است.