<ruby id="bdb3f"></ruby>

    <p id="bdb3f"><cite id="bdb3f"></cite></p>

      <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
        <p id="bdb3f"><cite id="bdb3f"></cite></p>

          <pre id="bdb3f"></pre>
          <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

          <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
          <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

          <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                <ruby id="bdb3f"></ruby>

                合規國際互聯網加速 OSASE為企業客戶提供高速穩定SD-WAN國際加速解決方案。 廣告
                ## 使用database/sql包操作MySQL 關系數據庫較為常見且易于理解。MySQL和Postgres是兩個最流行的開源關系數據庫。本節將演示如何使用database/sql包,該包為許多關系數據庫提供鉤子并自動處理連接池、連接持續時間等。 該包的未來版本將提供包括對上下文和超時的支持。 ### 實踐 1. 獲取第三方庫: ``` go get github.com/go-sql-driver/mysql ``` 2. 建立config.go: ``` package database import ( "database/sql" "fmt" "os" "time" _ "github.com/go-sql-driver/mysql" //注意這里的導入方式 ) // Example 保存了查詢的結果 type Example struct { Name string Created *time.Time } // Setup 配置數據庫連接 func Setup() (*sql.DB, error) { db, err := sql.Open("mysql", fmt.Sprintf("%s:%s@/gocookbook?parseTime=true", os.Getenv("MYSQLUSERNAME"), os.Getenv("MYSQLPASSWORD"))) if err != nil { return nil, err } return db, nil } ``` 3. 建立create.go: ``` package database import ( "database/sql" _ "github.com/go-sql-driver/mysql" ) // Create 建立一個表并填充數據 func Create(db *sql.DB) error { if _, err := db.Exec("CREATE TABLE example (name VARCHAR(20), created DATETIME)"); err != nil { return err } if _, err := db.Exec(`INSERT INTO example (name, created) values ("Aaron", NOW())`); err != nil { return err } return nil } ``` 4. 建立query.go: ``` package database import ( "database/sql" "fmt" _ "github.com/go-sql-driver/mysql" ) // Query 獲取一個新的連接到數據庫 并進行查詢 func Query(db *sql.DB) error { name := "Aaron" rows, err := db.Query("SELECT name, created FROM example where name=?", name) if err != nil { return err } defer rows.Close() for rows.Next() { var e Example if err := rows.Scan(&e.Name, &e.Created); err != nil { return err } fmt.Printf("Results:\n\tName: %s\n\tCreated: %v\n", e.Name, e.Created) } return rows.Err() } ``` 5. 建立 exec.go: ``` package database import ( "database/sql" _ "github.com/go-sql-driver/mysql" ) // Exec 刪除該表 func Exec(db *sql.DB) error { // 在刪除該表時存在未處理的錯誤 這樣寫并不推薦 defer db.Exec("DROP TABLE example") if err := Create(db); err != nil { return err } if err := Query(db); err != nil { return err } return nil } ``` 6. 建立 main.go: ``` package main import ( "github.com/agtorre/go-cookbook/chapter5/database" _ "github.com/go-sql-driver/mysql" ) func main() { db, err := database.Setup() if err != nil { panic(err) } if err := database.Exec(db); err != nil { panic(err) } } ``` 7. 這會輸出: ``` Results: Name: Aaron Created: 2017-02-16 19:02:36 +0000 UTC ``` ### 說明 ``` _ "github.com/go-sql-driver/mysql" ``` 該行引入了數據庫驅動。如果要連接到Postgres,SQLite或任何其他實現了database/sql接口的驅動,命令將類似。 一旦建立連接成功,該包會建立連接池。你可以直接在連接上執行SQL,也可以創建用commit和rollback命令執行的事務對象。在隨后的章節會進一步探討連接池的相關問題。 在與數據庫通信時,mysql包為Go的時間對象提供了一些便利支持。 注意本節是從從MYSQLUSERNAME和MYSQLPASSWORD環境變量中檢索數據庫用戶名和密碼的。 * * * * 學識淺薄,錯誤在所難免。歡迎在群中就本書提出修改意見,以饗后來者,長風拜謝。 Golang中國(211938256) beego實戰(258969317) Go實踐(386056972)
                  <ruby id="bdb3f"></ruby>

                  <p id="bdb3f"><cite id="bdb3f"></cite></p>

                    <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
                      <p id="bdb3f"><cite id="bdb3f"></cite></p>

                        <pre id="bdb3f"></pre>
                        <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

                        <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
                        <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

                        <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                              <ruby id="bdb3f"></ruby>

                              哎呀哎呀视频在线观看