2016-10-29 3 views
2

Go 코드에 대한 테스트 프로그램을 작성하려고합니다. 이 코드는 main 패키지에서 초기화하는 글로벌 db 변수를 가지고 있습니다.데이터베이스 연결 gryang mysql

package database 

import(
    "database/sql" 
    _ "github.com/go-sql-driver/mysql" 
) 

//Data type that defines one identity 
type element struct { 
    title string 
    date string 
    url string 
    remoteUrl string 
} 


//global database object for every package 
var (
    db *sql.DB 
) 

// params elem : element to be inserted ,  folder  : folderName 
func insertNoticeData(elem element, folder string) bool { 

    switch folder { 
     case "Results" : stmt, err := db.Prepare("INSERT results_ipu SET title=?, date=?, url=?, remoteUrl=?") 
     case "Notices" : stmt, err := db.Prepare("INSERT notice_ipu SET title=?, date=?, url=?, remoteUrl=?") 
     case "Datesheets" : stmt, err := db.Prepare("INSERT datesheet_ipu SET title=?, date=?, url=?, remoteUrl=?") 
    } 

    res, err1 := stmt.Exec(elem.title, elem.date, elem.url, elem.remoteUrl) 
    if err1 != nil { 
    fmt.Println("Error inserting in database ") 
    return false 
    } 
    return true 
} 
그것은 나에게 오류주고

: undefined symbol stmt

나는 여기에 놓치고 무엇을? switch 문의 case 지점에서 선언

답변

3

변수들은 case의 외부 (안 범위) 액세스 할 수 없습니다, 이 경우 지점에을 범위입니다.

var stmt *sql.Stmt 
var err error 

switch folder { 
case "Results": 
    stmt, err = db.Prepare("INSERT results_ipu SET title=?, date=?, url=?, remoteUrl=?") 
case "Notices": 
    stmt, err = db.Prepare("INSERT notice_ipu SET title=?, date=?, url=?, remoteUrl=?") 
case "Datesheets": 
    stmt, err = db.Prepare("INSERT datesheet_ipu SET title=?, date=?, url=?, remoteUrl=?") 
} 

if err != nil { 
    // handle error 
} 

res, err1 := stmt.Exec(elem.title, elem.date, elem.url, elem.remoteUrl) 

소스 사양에서 :

Declarations and Scope:

용액 대신 short variable declarations (:=)의 switch 전에 stmterr 변수를 선언하고 assignment (=)를 사용하여, 간단

Go is lexically scoped using blocks :
...

  1. The scope of a constant or variable identifier declared inside a function begins at the end of the ConstSpec or VarSpec (ShortVarDecl for short variable declarations) and ends at the end of the innermost containing block.

...

그리고 Spec: Blocks:

A block is a possibly empty sequence of declarations and statements within matching brace brackets.

[...] In addition to explicit blocks in the source code, there are implicit blocks:

  1. Each clause in a "switch" or "select" statement acts as an implicit block.
+0

감사 메이트는 바로 전에 그래서 여전히 golang 며칠 안돼서 시작 : P – Ezio