golang變數作用域

themoonstone發表於2016-10-12

一直都覺得 golang 的變數作用域很容易出問題、今天在測試 waitGroup 的時候、出現了一個我無法理解的錯

package main

import (
    "fmt"
    "net/http"
    "sync"
    "time"
)

var resp *http.Response

func main() {
    var wg sync.WaitGroup
    var urls = []string{
        "http://www.golang.org/",
        "http://www.google.com/",
        "http://www.somestupidname.com/",
    }

    for _, url := range urls {
        wg.Add(1)
        go func(url string) {
            defer wg.Done()
            resp, err = http.Get(url)  //出錯
            resp, err := http.Get(url) //出錯、在這麼用的時候、沒有宣告全域性變數
            fmt.Println(url)
            time.Sleep(3e9)
        }(url)
    }
    wg.Wait()
}

程式碼如上、我也知道 golang 有變數覆蓋這一說、但關鍵在 resp 不管我在哪宣告、都會出問題、但如果不要 http.Get(url) 這一行、就沒問題了 希望大神們幫忙看一下

更多原創文章乾貨分享,請關注公眾號
  • golang變數作用域
  • 加微信實戰群請加微信(註明:實戰群):gocnio

相關文章