حلقه for

حلقه for تنها ساختار تکرار در زبان برنامه نویسی Go می باشد. ساختار حلقه for به صورت زیر است :

for initialization; condition; operation 
{
   code to repeat
}

مقدار دهی اولیه (initialization) اولین مقداری است که به شمارنده حلقه می‌دهیم. شمارنده فقط در داخل حلقه for قابل دسترسی است.
شرط (condition) در اینجا مقدار شمارنده را با یک مقدار دیگر مقایسه می‌کند و تعیین می‌کند که حلقه ادامه یابد یا نه.
عملگر (operation) که مقدار اولیه متغیر را کاهش یا افزایش می‌دهد.
در زیر یک مثال از حلقه for آمده است:

  1: package main
  2: 
  3: import "fmt"
  4: 
  5: func main() {
  6:     var i, j int
  7: 
  8:     for i = 1; i <= 4; i++ {
  9:         for j = 1; j <= 5; j++ {
 10:             fmt.Print("*")
 11:         }
 12:         fmt.Println()
 13:     }
 14: }
Number 1
Number 2
Number 3
Number 4
Number 5
Number 6
Number 7
Number 8
Number 9
Number 10

برنامه بالا اعداد 1 تا 10 را با استفاده از حلقه for می‌شمارد. ابتدا یک متغیر به عنوان شمارنده تعریف می‌کنیم و آن را با مقدار 1 مقدار دهی اولیه می‌کنیم. سپس با استفاده از شرط آن را با مقدار 10 مقایسه می‌کنیم که آیا کمتر است یا مساوی؟ توجه کنید که قسمت سوم حلقه (i++ ) فوراً اجرا نمی‌شود. کد اجرا می‌شود و ابتدا رشته Number و سپس مقدار جاری i یعنی 1 را چاپ می‌کند. آنگاه یک واحد به مقدار i اضافه شده و مقدار i برابر 2 می‌شود و بار دیگر i با عدد 10 مقایسه می‌شود و این حلقه تا زمانی که مقدار شرط true شود ادامه می‌یابد. حال اگر بخواهید معکوس برنامه بالا را پیاده سازی کنید یعنی اعداد از بزرگ به کوچک چاپ شوند باید به صورت زیر عمل کنید :

for  i = 10; i > 0; i--
{
   //code omitted
}

کد بالا اعداد را از 10 به 1 چاپ می‌کند (از بزرگ به کوچک). مقدار اولیه شمارنده را 10 می‌دهیم و با استفاده از عملگر کاهش (–) برنامه‌ای که شمارش معکوس را انجام می‌دهد ایجاد می‌کنیم. Go به شما اجازه می‌دهد که از حلقه‌ها به صورت تو در تو استفاده کنید. اگر یک حلقه در داخل حلقه دیگر قرار بگیرد، به آن حلقه تو در تو گفته می‌شود. در این نوع حلقه‌ها، به ازای اجرای یک بار حلقه بیرونی، حلقه داخلی به طور کامل اجرا می‌شود. در زیر نحوه ایجاد حلقه تو در تو آمده است :

  1: package main
  2: 
  3: import "fmt"
  4: 
  5: func main() {
  6: 
  7:     var i, j int
  8: 
  9:     for i = 1; i <= 4; i++ {
 10:         for j = 1; j <= 5; j++ {
 11:             fmt.Print("*")
 12:         }
 13:         fmt.Println()
 14:     }
 15: 
 16: }
 *  *  *  *  *
 *  *  *  *  *
 *  *  *  *  *
 *  *  *  *  *

در کد بالا به ازای یک بار اجرای حلقه for اول (خط 9)، حلقه for دوم (13-10) به طور کامل اجرا می‌شود. یعنی وقتی مقدار i برابر عدد 1 می‌شود، علامت * توسط حلقه دوم 5 بار چاپ می‌شود، وقتی i برابر 2 می‌شود، دوباره علامت * پنج بار چاپ می‌شود و … . در کل منظور از دو حلقه for این است که در 4 سطر علامت * در 5 ستون چاپ شود یا 4 سطر ایجاد شود و در هر سطر 5 بار علامت * چاپ شود. خط 13 هم برای ایجاد خط جدید است. یعنی وقتی حلقه داخلی به طور کامل اجرا شد، یک خط جدید ایجاد می‌شود و علامت‌های * در خطوط جدید چاپ می‌شوند.