2016-04-05 9 views
0

周りの場合ステートメントを使用しているときにエラーが私はこれを実行しようとしています - PHPで正常に動作思われるが、移動中に、私はエラーを取得しています:ゴー - クエリ

if strings.EqualFold(update_status, "live") { 
    stmt, err := dbmap.Prepare(
     "UPDATE Apps SET version=?,deploy_status=?,status=?,live_date=? WHERE id=?") 
} else { 
    stmt, err := dbmap.Prepare(
     "UPDATE Apps SET version=?,deploy_status=?,status=? WHERE id=?") 
} 

私はcontrollers/apps.go:1095: undefined: stmt in stmt.Execのエラーが発生します。

どうすれば変更できますか?

おかげ

+0

問題は、あなたが 'if'後' stmt'を使用しようとするが、彼らは、彼らがで作成されたブロックにスコープされている可能性が高いです 'if'前に' stmt'を宣言し、ちょうど。代入 '='を使います。 – icza

+0

関連項目:[条件が成立した場合にのみ変数を作成するにはどうすればよいですか?](http://stackoverflow.com/questions/35533960/how-do-i-create-a-variable-in-go-go-条件が成立した場合のみ) – icza

+0

@icza stmtを定義する正しい方法は何ですか? –

答えて

0

あなたの問題は、あなたのstmterr変数は(両方ifelse

これはトリックを行う必要があり、あなたの条件の内側のブロックにスコープされているので、あなたは、Short Variable Declarationを使用していることです:

var stmt *sql.Stmt 
var err error 
if strings.EqualFold(update_status, "live") { 
    stmt, err = dbmap.Prepare(
     "UPDATE Apps SET version=?,deploy_status=?,status=?,live_date=? WHERE id=?") 
} else { 
    stmt, err = dbmap.Prepare(
     "UPDATE Apps SET version=?,deploy_status=?,status=? WHERE id=?") 
} 
//stmt is still defined here 
+0

これは私が期待していたように見えますが、どうしたらいいか分かりませんでしたが、今は 'undefined:sql in sql.Stmt'のエラーが出ます。 –