未使用的變量將阻止編譯(這是一件好事),但編譯器並不真正關心未使用的函數,是否有解釋?爲什麼我們可能有未使用的函數,但我們不能有未使用的變量?
0
A
回答
2
變量和函數之間的行爲似乎一致 - 即使未使用,它們都可以在包級別作用域中使用。
這段代碼在編譯沒有任何問題:
package main
var v int // unused variable
func f() {} // unused function
func main() {}
現在,當涉及到局部範圍的東西是不同的,未使用的變量產生錯誤。同爲函數文本(命名嵌套函數不允許在Go):
func main() {
func() {}
}
// Error: func literal evaluated but not used
最後,爲什麼僅僅在本地範圍檢查未使用的變量?因爲通常它是一個錯誤(例如,在Go中,由於意外使用:=
)。編譯器在這裏多次救了我。試想一下:
func f() (err error) {
if somthing {
err := g() // err is unused variable! I really meant `=`.
}
return
}
對於全局(數據包級)作用域未使用的變量和函數通常只是污染命名空間,例如,有人忘了重構之後將其刪除。還有就是一些工具這有助於檢測這些,例如:
-
- https://github.com/alecthomas/gometalinter(使用以前的包)
- https://github.com/remyoudompheng/go-misc/blob/master/deadcode/deadcode.go
我還發現了一個post by Russ Cox評論的問題:
我一直在用C編寫一些C代碼 - 最近 - 錯誤。它 使原型代碼有點難以告訴「你沒有使用 該功能,去修復它」,當你只是試圖測試你到目前爲止,或者註釋掉可能導致麻煩的呼叫。 當然,對於未使用的局部變量 也是如此。區別在於,在Go中,由於:=,一個未使用的本地變量 通常是一個bug,而未使用的未導出函數是 ,這通常是一個bug。
拉斯
相關問題
- 1. 爲什麼我們不能在jQuery中使用setAtrribute函數?
- 2. 爲什麼我們不能使用朋友函數重載「=」?
- 3. 爲什麼我們有mutableOrderedSetValueForKey尚未OrderedSetValueForKey?
- 4. 發揮japid爲什麼我們不能用可變參數
- 5. 爲什麼我們不能使用&(* a),但可以使用typedef來實現它?
- 6. 爲什麼Google提供JSON,但我不能使用它們
- 7. 爲什麼我們分別使用公共和私有變量
- 8. 爲什麼我們有clojure memoize功能?
- 9. CSS中的變量 - 爲什麼不能使用它們?
- 10. 爲什麼我可以使用locationInView,但我不能使用translationInVew
- 11. 爲什麼我們不能使用帶有浮點數的運算符?
- 12. 爲什麼使用id的時候我們只能使用NSObject?
- 13. 爲什麼有'。'和'..'當我們使用scandir函數時
- 14. 爲什麼我們不能在const對象上調用函數?
- 15. 我們爲什麼不能覆蓋Java中的變量
- 16. 爲什麼我不能在函數中使用使用prompt()創建的變量?
- 17. 我可以使用可能未設置的變量調用函數嗎?
- 18. 爲什麼我們使用常量?
- 19. 爲什麼我們不能使用double作爲泛型T?
- 20. 爲什麼我們不能使用ROWID作爲主鍵?
- 21. Java,爲什麼我們不能使用null作爲包名?
- 22. 爲什麼我們不能使用C字符串作爲SEL?
- 23. 有什麼辦法,我們可以命名我們的表作爲我們的局部變量值(T-SQL)
- 24. 爲什麼我們在SQL中使用標量值函數
- 25. 即使函數是靜態的,爲什麼我們不能在函數體內聲明靜態變量?
- 26. 雖然我們有Swing,但爲什麼我們需要JavaFX?
- 27. 如果我們更改函數順序,爲什麼不能使用此代碼?
- 28. 爲什麼我們不能在靜態成員函數中使用const成員?
- 29. 爲什麼不能我們使用原單for循環設置
- 30. 爲什麼我們不能在Tomcat中使用websocket?
你不使用它們並不意味着你的另一個類的消費者不會。未使用的變量不會默認阻止編譯。據我所知,這是一個警告。 –
@OguzOzgul你是對的,但是,在一個主要的包? – Mistermatt
此問題不是最初標記的問題的重複([this](http://stackoverflow.com/questions/22549228/why-does-golang-allow-compilation-of-unused-function-parameters),因爲它是關於未使用的函數_parameters_而不是_functions_本身),但這是[爲什麼Golang允許編譯未使用函數?]的可能重複(http://stackoverflow.com/questions/32564935/why-does-golang-allow-編譯-的未使用的函數)。 – icza