زبان Go، که به عنوان Golang نیز شناخته میشود، یک زبان برنامهنویسی استاتیک تایپ و کامپایل شده است که توسط گوگل طراحی شده است. این زبان برای سادهسازی توسعه نرمافزار و بهبود بهرهوری برنامهنویسی، به ویژه برای سیستمهای توزیع شده بزرگ، ایجاد شده است. Go دارای سینتکسی تمیز و حداقلی، عملکرد کارآمد و پشتیبانی داخلی از همزمانی است که آن را به انتخابی جذاب برای توسعهدهندگانی که بر روی خدمات ابری، میکروسرویسها و برنامههای شبکهای کار میکنند، تبدیل کرده است.
زبان Go توسط رابرت گریسمر، راب پیک و کن تامپسون در گوگل در سال 2007 توسعه یافت. این زبان در پاسخ به چالشهایی که توسعهدهندگان با زبانهای موجود مانند C++ و جاوا، به ویژه در مورد عملکرد، مدیریت وابستگی و زمان کامپایل، مواجه بودند، ایجاد شد. طراحان بر سادگی، کارایی و بیانگری تأکید کردند.
زبان Go در نوامبر 2009 به طور عمومی اعلام شد. نسخههای اولیه آن به سرعت به دلیل تمرکز بر سینتکس تمیز و همزمانی، که برای توسعهدهندگان در تیمهای بزرگ و پروژههای پیچیده جذاب بود، مورد توجه قرار گرفت. علاوه بر این، کتابخانه استاندارد قوی که شامل بستههایی برای مدیریت HTTP، JSON و ورودی/خروجی فایل بود، پذیرش زبان را بیشتر تقویت کرد.
تا اکتبر 2023، Go یک اکوسیستم قوی با یک جامعه پرجنب و جوش و مجموعهای از کتابخانهها و فریمورکها توسعه یافته است. این زبان به طور گستردهای در توسعه برنامههای ابری بومی استفاده میشود و توسط بسیاری از سازمانها، از جمله شرکتهای بزرگ فناوری مانند گوگل، دراپ باکس و نتفلیکس پذیرفته شده است. این زبان همچنان در حال تکامل است و بهروزرسانیهای منظم که عملکرد را بهبود میبخشند، ویژگیهای جدید معرفی میکنند و تجربه توسعهدهنده را ارتقا میدهند.
زبان Go از تایپ استاتیک قوی استفاده میکند، به این معنی که نوع متغیرها در زمان کامپایل مشخص است. این ویژگی به شناسایی بسیاری از خطاها قبل از اجرای برنامه کمک میکند.
var x int = 10
زبان Go از همزمانی به طور داخلی از طریق گوروتینها پشتیبانی میکند، که رشتههای سبکوزنی هستند که توسط زماناجرای Go مدیریت میشوند. این امر نوشتن برنامههای همزمان را آسان میکند.
go func() {
fmt.Println("Hello from a goroutine!")
}()
کانالها در Go برای ارتباط ایمن بین گوروتینها استفاده میشوند. آنها راهی برای ارسال داده از یک گوروتین به گوروتین دیگر فراهم میکنند.
ch := make(chan int)
go func() {
ch <- 42
}()
value := <-ch
زبان Go از انواع ترکیبی مانند ساختارها و رابطها پشتیبانی میکند و به توسعهدهندگان این امکان را میدهد که کد ماژولار و قابل استفاده مجدد ایجاد کنند.
type Person struct {
Name string
Age int
}
عبارات Switch در Go چندمنظوره هستند و میتوانند بر روی انواع مختلفی از جمله رشتهها، اعداد صحیح و حتی انواع عمل کنند.
switch x := 2; x {
case 1:
fmt.Println("One")
case 2:
fmt.Println("Two")
default:
fmt.Println("Other")
}
زبان Go اجازه میدهد که انواع توکار برای ترویج استفاده مجدد از کد و ایجاد انواع داده پیچیدهتر استفاده شوند.
type Employee struct {
Person // توکار کردن ساختار Person
Salary int
}
عبارات Defer در Go برای اطمینان از اینکه یک فراخوانی تابع در زمان اجرای برنامه بعداً انجام میشود، معمولاً برای پاکسازی، استفاده میشود.
func main() {
defer fmt.Println("Clean up!")
fmt.Println("Hello")
}
رویکرد Go به مدیریت خطا از چندین مقدار بازگشتی استفاده میکند و به توابع این امکان را میدهد که هم یک نتیجه و هم یک خطا را بازگردانند.
result, err := divide(10, 2)
if err != nil {
fmt.Println("Error:", err)
} else {
fmt.Println("Result:", result)
}
برشها راهی انعطافپذیر برای کار با آرایهها فراهم میکنند و از آرایههای با طول ثابت قدرتمندتر هستند.
s := []int{1, 2, 3}
s = append(s, 4) // Append شامل تابع توکار است
سیستم بسته Go از سازماندهی کد و ماژولار بودن پشتیبانی میکند و به کد این امکان را میدهد که به بستههایی تقسیم شود که میتوانند در پروژههای مختلف مورد استفاده مجدد قرار گیرند.
package main
import "fmt"
برنامههای Go معمولاً به کد ماشین با استفاده از کامپایلر Go (gc
) کامپایل میشوند. زماناجرای Go مسئول مدیریت حافظه، زمانبندی گوروتینها و ارائه جمعآوری زباله است.
چندین محیط توسعه یکپارچه (IDE) و ویرایشگر متن از توسعه Go پشتیبانی میکنند، از جمله:
ساخت یک پروژه Go با استفاده از زنجیره ابزار Go ساده است. دستورات رایج شامل:
go build
: بستهها و وابستگیها را کامپایل میکند.go run
: برنامه Go را کامپایل و اجرا میکند.go test
: تستها را اجرا میکند.پروژهها معمولاً در دایرکتوریها سازماندهی میشوند و یک فایل go.mod
برای مدیریت وابستگیها دارند.
زبان Go به طور برجستهای در برنامههای مختلف، به ویژه در محاسبات ابری، شبکه و میکروسرویسها استفاده میشود. کاربردهای رایج شامل:
زبان Go اغلب با سایر زبانها به دلیل ویژگیهای منحصر به فردش مقایسه میشود.
هنگام ترجمه کد به یا از Go، نکات زیر را در نظر بگیرید:
در حالی که ابزارهای خاصی برای ترجمه منبع به منبع مخصوص Go محدود است، ابزارهای زیر ممکن است در انتقال کمک کنند: