نکات Golang
مدتی است در حال یادگیری Golang هستم. Golang یک زبان statically complied است که توسط Google توسعه داده شده است. اینجا نکاتی که در مورد Golang یاد میگیرم رو سعی میکنم به صورت پراکنده به اشتراک بذارم.
توابع
Naked function
توی Go علاوه بر اینکه یک تابع میتونه چند خروجی داشته باشه؛ امکان implicit return رو هم داریم؛ توی TS , CSharp باید از Tuple استفاده کنیم اما تفاوتش اینجاست که توی CSharp و JS/TS خروجی در نهایت یک مقداره اما توی Go عملاً چند مقدار هستش. pic.twitter.com/vvI3tiktdr
— Sirwan Afifi (@SirwanAfifi) October 4, 2021
Closure
اینجا یکی از کاربردهای Closure پیادهسازی Middleware هستش:#Golang pic.twitter.com/8pX9wHENjQ
— Sirwan Afifi (@SirwanAfifi) October 2, 2021
Loop
توی Golang تنها یک مدل loop داریم و اونم for هستش که به دو حالت میشه اون رو نوشت:
for i := 0; i < len(items); i++ {
fmt.Println(items[i])
}
for _, item := range items {
fmt.Println(item)
}
Array
در Go برای تعریف آرایه دو راه داریم؛ یکی اینکه آرایه با سایز مشخص تعیین کنیم یا اینکه سایز آرایه را داینامیک در نظر بگیرم؛ به حالت دوم Slice گفته میشود:
// Fixed Array
users := [2]string{ "Sirwan", "Sana" }
// Slice
users := []string{ "Sirwan", "Sana" }
برای اضافه کردن یک آیتم به Slice Array میتوانیم از تابع append استفاده کنیم:
users := []string{ "Sirwan", "Sana" }
users = append(users, "Kaywan")
Maps
خیلی شبیه Record در TS هستند:
user := map[string]string{ "name": "Sirwan", "lastName": "Afifi" }
// Example:
user := map[int] map[string]string {
1: {"firstName": "Sirwan", "lastName": "Afifi"},
2: {"firstName": "Kaywan", "lastName": "Afifi"},
3: {"firstName": "Sana", "lastName": "Afifi"},
}
for _, u := range user {
for k, v := range u {
fmt.Printf("%s: %s \t", k, v)
}
fmt.Println()
fmt.Println(strings.Repeat("*", 40))
fmt.Println()
}
Struct
توسط Struct میتوانیم یک type تعریف کنیم:
user := User{firstName: "Sirwan", lastName: "Afifi"}
Go از unnamed structها پشتیبانی میکنه؛ خوبیش اینکه یک unnamed struct رو میتونیم به یک named struct اساین کنیم (به شرطی که ساختارشون یکی باشه) به این میگن structural typing ولی اگر بخوایم یک named struct رو به یک named struct دیگه اساین کنیم باید حتماً تایپ مقصد رو تعیین کنیم: pic.twitter.com/TFMHVsMmvq
— Sirwan Afifi (@SirwanAfifi) October 17, 2021