このトピックでは、Goを使用してクラスターに接続する方法について説明します。

前提条件

  • Gitがインストールされ、そのパスがpath環境変数に追加されます。
  • Goがダウンロードされ、インストールされます。 詳細については、「ダウンロードとインストール」をご参照ください。
  • Go MySQL Driverがインストールされています。
    1. Go-sql-Driver /MySQLからgo mysql driverをダウンロードします。
    2. シェルスクリプトのgoツールを使用して、パッケージを $GOPATHにインストールします。
      go ge t github.com/go-sql-driver/mysql

クラスターへの接続

パッケージメイン
import (import (import)
    "database/sql"
    "fmt"
    _"github.com/go-sql-driver/mysql"
)
const (
   // user:  クラスターへの接続に使用されるアカウント。 AnalyticDB for MySQLは、特権アカウントと標準アカウントのタイプを提供します。 
    user = "adb_test"
    // password:  クラスターへの接続に使用されるアカウントのパスワード。 
    password = "xxx"
    // host:  クラスターのIPアドレス。 IPアドレスは、AnalyticDB for MySQLコンソールの [クラスター情報] ページで取得できます。 
    host = "127.0.xx.xx"
    // 3306: AnalyticDB for MySQLクラスターへの接続に使用されるポート。 
    port = 3306
    // database:  クラスター内のデータベースの名前。 
    データベース="database_name"
    // connectTimeout: データベース接続のタイムアウト期間。 
    connectTimeout = "10s"
)
func main() {
    // データベース接続を有効にします。 
    url := fmt.Sprintf("% s:% s @ tcp(% s:% d)/% s?timeout=% s" 、ユーザー、パスワード、ホスト、ポート、データベース、connectTimeout)
    db, err := sql. オープン ("mysql", url)
    if err! =nil {
        パニック (err.Error())
    }
    // 有効な接続の最大数を設定します。 デフォルト値は0で、有効な接続の最大数に制限が適用されないことを示します。 
    db.SetMaxOpenConns (2)
    // アイドル接続の最大数を設定します。 
    db.SetMaxIdleConns (1)
    // 接続の最大期間を設定します。 デフォルトでは、接続の期間に制限は適用されず、接続は常に存続します。 
    // この設定では、接続プール内の接続が1時間持続することは保証できません。 
    // この設定は、アイドル接続のタイムアウト期間に関するものではありません。 接続は、初めて作成されてから1時間後に期限切れになります。 
    // 理論的には、接続の最大持続時間が短いほど、最初から接続を作成する頻度が高くなります。 
    db.SetConnMaxLifetime(time.Hour)
    // メイン関数が終了した後までクローズを延期する
    // executing
    defer db.Close()
    rows, err := db.Query("show tables")
    if err! =nil {
        パニック (err.Error())
    }
    行の場合。Next() {
        var tableName文字列
        err := rows.Scan(&tableName)
        if err! =nil {
            パニック (err.Error())
        }
        fmt.Println(tableName)
    }
}

サーバーの準備されたステートメントを有効にする

パッケージメイン
import (import (import)
    "database/sql"
    "fmt"
    _"github.com/go-sql-driver/mysql"
    「時間」
)
const (
   // user:  クラスターへの接続に使用されるアカウント。 AnalyticDB for MySQLは、特権アカウントと標準アカウントのタイプを提供します。 
    user = "adb_test"
    // password:  クラスターへの接続に使用されるアカウントのパスワード。 
    password = "xxx"
    // host:  クラスターのIPアドレス。 IPアドレスは、AnalyticDB for MySQLコンソールの [クラスター情報] ページで取得できます。 
    host = "127.0.xx.xx"
    // 3306: AnalyticDB for MySQLクラスターへの接続に使用されるポート。 
    port = 3306
    // database:  クラスター内のデータベースの名前。 
    データベース="database_name"
    // connectTimeout: データベース接続のタイムアウト期間。 
    connectTimeout = "10s"
)
func main() {
    // データベース接続を開く
    url := fmt.Sprintf("% s:% s @ tcp(% s:% d)/% s?timeout=% s" 、ユーザー、パスワード、ホスト、ポート、データベース、connectTimeout)
    db, err := sql. オープン ("mysql", url)
    if err! =nil {
        パニック (err.Error())
    }
    // 有効な接続の最大数を設定します。 デフォルト値は0で、有効な接続の最大数に制限が適用されないことを示します。 
    db.SetMaxOpenConns (2)
    // アイドル接続の最大数を設定します。
    db.SetMaxIdleConns (1)
    // 接続の最大期間を設定します。 デフォルトでは、接続の期間に制限は適用されず、接続は常に存続します。 
    // この設定では、接続プール内の接続が1時間持続することは保証できません。 接続が利用できなくなり、何らかの理由により自動的に閉じられることがある。 
    // この設定は、アイドル接続のタイムアウト期間に関するものではありません。 接続は、1時間アイドルになった後に有効期限が切れませんが、初めて作成されてから1時間後に有効期限が切れます。 
    // 理論的には、接続の最大持続時間が短いほど、最初から接続を作成する頻度が高くなります。 
    db.SetConnMaxLifetime(time.Hour)
    defer db.Close()
    stmt, err := db.Prepare("select * from student where id = ?")
    if err! =nil {
        パニック (err.Error())
    }
    defer stmt. 閉じる ()
    rows, err := stmt.Query (9)
    if err! =nil {
        パニック (err.Error())
    }
    defer rows.Close()
    行の場合。Next() {
        var id文字列
        var名文字列
        varユニット文字列
        err := rows.Scan(&id、&name、&unit)
        if err! =nil {
            パニック (err.Error())
        }
        fmt.Println(fmt.Sprintf("% s, % s, % s", id, name, unit))
    }
}

クライアントの準備ステートメントを有効にする

Go MySQL Driverの準備ステートメントを有効にするには、クライアントでinterpolateParamsをtrueに設定する必要があります。
重要 db.Preparestmt.Queryは、interpolateParamsがtrueに設定されているかどうかを識別できません。 クライアントの準備ステートメントを有効にするには、db.Queryを使用する必要があります。
パッケージメイン
import (import (import)
    "database/sql"
    "fmt"
    _"github.com/go-sql-driver/mysql"
    「時間」
)
const (
    // user:  クラスターへの接続に使用されるアカウント。 AnalyticDB for MySQLは、特権アカウントと標準アカウントのタイプを提供します。 
    user = "adb_test"
    // password:  クラスターへの接続に使用されるアカウントのパスワード。 
    password = "xxx"
    // host:  クラスターのIPアドレス。 IPアドレスは、AnalyticDB for MySQLコンソールの [クラスター情報] ページで取得できます。 
    host = "127.0.xx.xx"
    // 3306: AnalyticDB for MySQLクラスターへの接続に使用されるポート。 
    port = 3306
    // database:  クラスター内のデータベースの名前。 
    データベース="database_name"
    // connectTimeout: データベース接続のタイムアウト期間。 
    connectTimeout = "10s"
)
func main() {
    // データベース接続を有効にします。 
    url := fmt.Sprintf("% s:% s @ tcp(% s:% d)/% s?timeout=% s&interpolateParams=true" 、ユーザー、パスワード、ホスト、ポート、データベース、connectTimeout)
    db, err := sql. オープン ("mysql", url)
    if err! =nil {
        パニック (err.Error())
    }
    // 有効な接続の最大数を設定します。 デフォルト値は0で、有効な接続の最大数に制限が適用されないことを示します。 
    db.SetMaxOpenConns (2)
    // アイドル接続の最大数を設定します。 
    db.SetMaxIdleConns (1)
    // 接続の最大期間を設定します。 デフォルトでは、接続の期間に制限は適用されず、接続は常に存続します。 
    // この設定では、接続プール内の接続が1時間持続することは保証できません。 接続が利用できなくなり、何らかの理由により自動的に閉じられることがある。 
    // この設定は、アイドル接続のタイムアウト期間に関するものではありません。 接続は、1時間アイドルになった後に有効期限が切れませんが、初めて作成されてから1時間後に有効期限が切れます。 
    // 理論的には、接続の最大持続時間が短いほど、最初から接続を作成する頻度が高くなります。 
    db.SetConnMaxLifetime(time.Hour)
    defer db.Close()
    rows, err := db.Query("select * from student where id = ?", 9)
    if err! =nil {
        パニック (err.Error())
    }
    defer rows.Close()
    行の場合。Next() {
        var id文字列
        var名文字列
        varユニット文字列
        err := rows.Scan(&id、&name、&unit)
        if err! =nil {
            パニック (err.Error())
        }
        fmt.Println(fmt.Sprintf("% s, % s, % s", id, name, unit))
    }
}