3 回答

TA貢獻1851條經驗 獲得超4個贊
您看到的編譯錯誤正是正在發生的事情。那var alive bool是未使用的。您聲明它并為其分配一個值,但您從未對它做任何事情。
這是一個對游樂場友好的代碼修改,它將運行:
package main
import (
"fmt"
"strconv"
)
func main() {
fmt.Println(isInt("Hello, playground")) // prints false
fmt.Println(isInt("1234567890")) // prints true
}
func isInt(s string) bool {
var alive bool
_, err := strconv.Atoi(s) // simply to demonstrate an error case
if err != nil {
alive = false
} else {
alive = true
}
return alive
}
請注意,我活著回來了。該功能是無用的,不是我建議的東西,但它應該有助于說明您的示例中缺少的內容。

TA貢獻1830條經驗 獲得超9個贊
Golang Devs 團隊負責人的那些奇怪的限制非常煩人。
為什么不允許人們使用選項來禁用他們的限制?
答案很簡單:他們為自己(為 guugle)而不是為社區編寫語言。
幸運的是,Go 是開源的,甚至是用 Go 編寫的。
因此,這是一個簡單的補丁,刪除了引發的“已聲明但未使用”或“已聲明但未使用”錯誤:
diff --git a/src/cmd/compile/internal/gc/walk.go b/src/cmd/compile/internal/gc/walk.go
index 770210f..78c0cbc 100644
--- a/src/cmd/compile/internal/gc/walk.go
+++ b/src/cmd/compile/internal/gc/walk.go
@@ -49,10 +49,7 @@ func walk(fn *Node) {
if defn.Left.Name.Used() {
continue
}
- yyerrorl(defn.Left.Pos, "%v declared and not used", ln.Sym)
defn.Left.Name.SetUsed(true) // suppress repeats
- } else {
- yyerrorl(ln.Pos, "%v declared and not used", ln.Sym)
}
}
diff --git a/src/go/types/stmt.go b/src/go/types/stmt.go
index abd9d05..8b15786 100644
--- a/src/go/types/stmt.go
+++ b/src/go/types/stmt.go
@@ -55,6 +55,7 @@ func (check *Checker) funcBody(decl *declInfo, name string, sig *Signature, body
}
func (check *Checker) usage(scope *Scope) {
+ return
var unused []*Var
for _, elem := range scope.elems {
if v, _ := elem.(*Var); v != nil && !v.used {
(實際適用于 go1.12)
將新的 Golang 解壓縮到 /usr/local/go 并應用補丁。
然后編譯:
export GOROOT_BOOTSTRAP=/usr/local/go2
cp -a /usr/local/go /usr/local/go2
cd /usr/local/go/src
sed -e 's#^bash run.bash.*##' -i all.bash
./all.bash
rm -rf /usr/local/go2
unset GOROOT_BOOTSTRAP
[每個新版本] 應用一次補丁比每次處理每個丟失的變量要快得多。
- 3 回答
- 0 關注
- 209 瀏覽
添加回答
舉報