تبدیل نوع (Type Conversion)

تبدیل صریح بین انواع داده در Go: عددی، رشته و بایت با strconv.

تبدیل نوع در Go

Go برخلاف برخی زبان‌ها هرگز خودکار تبدیل نوع نمی‌کند — حتی بین int و float64! همه تبدیل‌ها باید صریح باشند:

تبدیل عددی

var i int = 42
var f float64 = float64(i)   ← int → float64
var j int = int(f)           ← float64 → int (بخش اعشاری حذف!)

// تقسیم صحیح در مقابل اعشاری
a, b := 7, 2
fmt.Println(a / b)                    ← 3
fmt.Println(float64(a) / float64(b))  ← 3.5
تبدیل float به int بخش اعشاری را قطع می‌کند (گرد نمی‌کند): int(3.9) می‌شود 3!

تبدیل به/از رشته

عدد ↔ رشته با strconv

import "strconv"

// عدد → رشته
s := strconv.Itoa(42)          ← "42"
sf := strconv.FormatFloat(3.14, \f\, 2, 64)  ← "3.14"

// رشته → عدد
n, err := strconv.Atoi("42")           ← 42
f, err := strconv.ParseFloat("3.14", 64) ← 3.14
تابع strconv.Itoa (Integer to ASCII) رایج‌ترین راه تبدیل عدد به رشته است. fmt.Sprintf هم کار می‌کند اما کندتر است.

رشته ↔ بایت

s := "سلام"
b := []byte(s)        ← رشته → slice بایت
s2 := string(b)       ← بایت → رشته

رشته ↔ rune

r := rune(65)        ← A
s := string(r)       ← "A"

runes := []rune("سلام")
s := string(runes)

خطا در تبدیل

توابع Parse خطا برمی‌گردانند — همیشه بررسی کنید:

n, err := strconv.Atoi("abc")
if err != nil {
    fmt.Println("خطا: رشته عدد نیست!")
} else {
    fmt.Println("عدد:", n)
}

تبدیل‌های رایج — جدول مرجع

ازبهروش
intfloat64float64(x)
float64intint(x)
intstringstrconv.Itoa(x)
stringintstrconv.Atoi(s)
stringfloat64strconv.ParseFloat(s, 64)
string[]byte[]byte(s)
[]bytestringstring(b)
intrunerune(x)

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

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