すべてのプロダクト
Search
ドキュメントセンター

ApsaraDB for OceanBase (Deprecated):Go-MySQL-Driver を使用して OceanBase Database に接続する

最終更新日:Apr 23, 2025

このトピックでは、Go-MySQL-Driver と OceanBase Database を使用して、テーブルの作成、データの挿入、データのクエリなどの基本的なデータベース操作を実行するアプリケーションを構築する方法について説明します。

go-oceanbase サンプルプロジェクトをダウンロードする

前提条件

以下の準備を完了し、対応する環境変数を正しく構成していること。

  • OceanBase Database をインストールする

  • Go をインストールする

  • Go-MySQL-Driver をインストールする

手順

説明

このトピックで提供される手順は、Windows 環境用です。別のオペレーティングシステムまたはコンパイラを使用している場合、手順は多少異なる場合があります。

  1. (オプション) Go と Go-MySQL-Driver をインストールします。

  2. OceanBase Database の接続情報を取得します。

  3. プロジェクトのデータベース接続情報を変更します。go-oceanbase プロジェクト。

  4. プロジェクトを実行します。go-oceanbaseプロジェクト。

手順 1: (オプション) Go と Go-MySQL-Driver をインストールする

Go と Go-MySQL-Driver をインストール済みの場合は、この手順をスキップしてください。インストールしていない場合は、以下の操作を実行します。

  1. Go をインストールします。

    1. お使いのオペレーティングシステムに適した Go インストールパッケージを Go 公式 Web サイトからダウンロードします。

      説明

      このトピックで使用されているインストールパッケージは、go1.20.6.windows-amd64.msi です。

    2. インストールパッケージをダブルクリックし、ウィザードに従って Go をインストールします。

    3. Go のインストールパスをシステムの Path 環境変数に追加します。

      • Windows 環境では、[コントロール パネル] > [システムとセキュリティ] > [システム] > [システムの詳細設定] > [環境変数] > [システム環境変数] を追加します C:\usr\local\go\bin

      • Linux または macOS 環境では、 または ファイルに次の内容を追加します。~/.bashrc または ~/.bash_profile ファイル:

        export PATH=$PATH:/usr/local/go/bin
      説明

      ここで、\usr\local\go\bin は Go のデフォルトのインストールディレクトリです。Go をインストールするときに別のディレクトリを選択した場合は、デフォルトのディレクトリを実際のディレクトリに置き換えてください。

    4. コマンドライン端末で次のコマンドを実行して Go のバージョンを確認し、インストールを検証します。

      C:\Users\admin\> go version
      go version go1.20.6 windows/amd64
  2. Go-MySQL-Driver をインストールします。

    Go のバージョンに応じて異なる方法で Go-MySQL-Driver をインストールできます。Go-MySQL-Driver をインストールするには、プロジェクトディレクトリでコマンドラインターミナルを開く必要があります。Go-MySQL-Driver の詳細については、go-sql-driver/mysqlGitHub をご参照ください。

    インストールコマンドは次のとおりです。

    C:\Users\admin\Desktop\go-oceanbase>go get -u github.com/go-sql-driver/mysql
    go: downloading github.com/go-sql-driver/mysql v1.7.1
    go: added github.com/go-sql-driver/mysql v1.7.1

    使用できない場合は、go getバージョンまたはネットワークの問題が原因でコマンドが失敗した場合は、go installインストール コマンドgo-sql-driver/mysql

    1. 次のコマンドを実行して、go-sql-driver/mysql リポジトリを GitHub から go/src ディレクトリ。

      cd /usr/local/go/src   
      git clone https://github.com/go-sql-driver/mysql.git 
      重要

      /usr/local/go/src と Go の実際のインストールディレクトリに置き換えます。

    2. を実行しますgo install コマンド。

      go install mysql
      重要

      一部の Go バージョンでは、 コマンドのデフォルトの実行ディレクトリが でない場合があります。 コマンドを実行した後に報告されるエラーに基づいて、正しいディレクトリを判断できます。たとえば、 エラーが報告された場合は、mysql フォルダを ディレクトリに配置してから、コマンドを再実行する必要があります。go install コマンドが /src。実行後に報告されるエラーに基づいて、正しいディレクトリを特定できます。go install コマンド。たとえば、/usr/local/go/src/vendor/mysql にパッケージ "mysql" が見つかりませんエラーが報告された場合は、mysql フォルダを /src/vendor ディレクトリに移動してから、コマンドを再実行してください。

    3. Go-MySQL-Driver がインストールされているかどうかを確認します。インストールに失敗した場合は、エラーメッセージに基づいて修正してください。

      go list -m github.com/go-sql-driver/mysql

手順 2: OceanBase Database の接続情報を取得する

OceanBase Database のデプロイエンジニアまたは管理者に連絡して、データベース接続文字列を取得します。

obclient  -h{host} -u{username} -p****** -P{port} -D{schema_name}

データベース接続文字列には、OceanBase Database にアクセスするために必要なパラメータが含まれています。データベース接続文字列を使用して OceanBase Database にログインし、パラメータが正しいことを確認できます。

説明

ここで取得した URL は、test.go ファイルで必要になります。

パラメータの説明は次のとおりです。

  • host: OceanBase Database に接続するための IP アドレス。

  • user_name: テナントアカウントのユーザー名です。

  • password: テナントアカウントのパスワード。

  • port: OceanBase Database に接続するためのポートです。デフォルトのポートは 3306 です。

  • schema_name: アクセスするスキーマの名前です。

手順 3: データベース接続情報を変更するgo-oceanbaseプロジェクト

データベース接続情報を test.go で取得した情報に基づくファイル手順 2:OceanBase Database の接続情報を取得する を選択して右クリックします。test.go ファイルを選択し、[開く]を選択し、メモ帳または別のエディターを使用してファイルを開きます。

例:

  • OBServer ノードの IP アドレスは xxx.xxx.xxx.xxx です。

  • ポートは 3306 です。

  • アクセスするスキーマの名前は test です。

  • テナントアカウントのユーザー名は、rootです。

  • テナントアカウントのパスワードは ****** です。

接続文字列の例は次のとおりです。

conn := "root:******@tcp(xxx.xxx.xxx.xxx:3306)/test"

手順 4: を実行するgo-oceanbaseプロジェクト

必要に応じてコードを変更した後、プロジェクトディレクトリでコマンドライン端末を開き、 コマンドを入力して Go ファイルを実行します。go run Go ファイルを実行するコマンド。

C:\Users\admin\Desktop\go-oceanbase>go run test.go

(オプション) Linux または macOS 環境では、 を実行する前に、一時環境変数を構成する必要があります。go run

export PATH=$PATH:/usr/local/go/bin
go run test.go

次の情報が返された場合、OceanBase Database に接続されており、サンプルプロジェクトは正しく実行されています。

説明

この結果は、テーブル t1 を削除するコードがコメントアウトされている実行に対して返されます。

C:\Users\admin\Desktop\go-oceanbase>go run test.go
success to connect OceanBase with go_mysql driver
Hello OceanBase

プロジェクトコードの紹介

[クリック] go-oceanbase で、圧縮ファイル形式のプロジェクトコードをダウンロードします。go-oceanbase

解凍すると、 という名前のフォルダがあります。ディレクトリ構造は次のとおりです。go-oceanbase。ディレクトリ構造は次のとおりです。

|-- go.mod
|-- go.sum
|-- test.go

ファイルとディレクトリの概要は次のとおりです。

  • go.mod:プロジェクトの他のモジュールおよびモジュールのバージョンへの依存関係を定義する Go モジュールファイルです。

  • go.sum: Go 1.11 以降のモジュール管理ファイルです。 プロジェクトの他のモジュールおよびモジュールのバージョンへの依存関係、および対応するチェックサムが記録されます。

  • test.go: プロジェクトのサンプルコードを含む Go ソースコードファイルです。

go.mod のコード

go.mod ファイルは、モジュール名、Go バージョン、およびプロジェクトの依存関係を定義します。

go.mod ファイルには次の部分が含まれています:

  • module go-oceanbase: モジュールの名前です。これはプロジェクトの名前空間を定義します。Go 1.16 以降では、モジュール名はプロジェクトのルートディレクトリの名前と一致する必要があります。

  • go 1.20: プロジェクトに必要な Go のバージョンです。

  • require github.com/go-sql-driver/mysql v1.7.1 // indirect: プロジェクトの依存関係宣言。プロジェクトがバージョン 1.7.1 の : プロジェクトの依存関係宣言です。プロジェクトが github.com/go-sql-driver/mysql モジュールに依存しており、依存関係が モジュール バージョン 1.7.1 であり、依存関係が go.sum 依存関係に関連付けられた間接依存関係であることを宣言します。 依存関係。

go.sum のコード

go.sumファイルは、github.com/go-sql-driver/mysql 依存関係により、プロジェクトで正しいバージョンが使用されていることを確認します。

go.sum ファイルには次の部分が含まれています:

  • github.com/go-sql-driver/mysql v1.7.1 h1:lUIinVbN1DY0xBg0eMOzmmtGoHwWBbvnWubQUrtU8EI=: モジュールのソースコードファイルのハッシュ値を提供します。これにより、プロジェクトのビルド時に正しいバージョンが使用されることが保証されます。ここでのハッシュ値は lUIinVbN1DY0xBg0eMOzmmtGoHwWBbvnWubQUrtU8EI= です。

  • github.com/go-sql-driver/mysql v1.7.1/go.mod h1:OXbVy3sEdcQ2Doequ6Z5BW6fXNQTmx+9S1MCJN5yJMI=: モジュールの依存関係ファイルのハッシュ値を提供します。これにより、プロジェクトのビルド時に正しい依存関係バージョンが使用されることが保証されます。ここでのハッシュ値は OXbVy3sEdcQ2Doequ6Z5BW6fXNQTmx+9S1MCJN5yJMI=です。

test.go のコード

test.go ファイルでは、OceanBase Database の MySQL モードと Go を使用してやり取りする方法について定義しています。これには、データベースへの接続、テーブルの作成、データの挿入、データのクエリ、テーブルの削除などの操作が含まれます。 test.go ファイルを構成するには、次の手順を実行します。

  1. 定義します メイン パッケージ。package main<executable> タグは、このパッケージが実行可能なプログラムパッケージであり、<executable> タグが含まれていることを示します。main() 関数。この関数は、プログラムの実行時に実行されます。

  2. インポート import パッケージを定義します。

    import 文は、次の 4 つの パッケージ をインポートします。

    • database/sql: 共通の SQL データベースアクセスインターフェイスを提供します。さまざまな種類の SQL データベースに接続して操作するための一連の共通インターフェイスと関数を定義します。

    • fmt: 入出力のフォーマットを行うための関数を備えています。 データを文字列にフォーマットし、コンソールまたは他のデバイスに出力するための一連の関数を定義します。

    • log: ロギング機能を提供します。コンソールまたはその他のデバイスへのログ出力のための一連の関数を定義します。

    • github.com/go-sql-driver/mysql: MySQL モードのドライバーを提供します。これは、Go を使用して OceanBase Database の MySQL モードに接続して操作するために、database/sql パッケージで定義されているインターフェースを実装しています。 ここで go-sql-driver/mysql の正しいインストール パスを指定する必要があります。

    サンプルコードは次のとおりです。

    import (
    "database/sql"
    "fmt"
    "log"
    
    _ "github.com/go-sql-driver/mysql"
    // go-sql-driver/mysql のインストールパスを指定します。
    )
  3. を定義します文字列構造体。 この構造体には、名前クエリ結果を格納するためのフィールド。構造体で、main()関数で、selectAll()テーブルの作成、データの挿入、データのクエリ、およびテーブルの削除を行う関数。

    サンプルコードは次のとおりです。

    type Str struct {
    Name string
    }
    
    func main() {
    selectAll()
    }
  4. 定義する selectAll() 関数。

    selectAll() 関数は、データベースへの接続、テーブルの作成、データの挿入、データのクエリ、およびテーブルの削除の操作を含みます。

    1. データベースに接続します。接続文字列 を定義します。これには、OceanBase Database の MySQL モードの接続パラメータ(ユーザー名、パスワード、IP アドレス、ポート番号、データベース名など)が含まれています。 関数を呼び出して、データベース接続を開きます。エラーが発生した場合は、エラーをログに記録してプログラムを終了します。 キーワードを使用して、データベース接続のクローズを遅延させます。これにより、関数が実行された後に接続がクローズされます。接続、MySQL モードの OceanBase データベースへの接続パラメーター(ユーザー名、パスワード、IP アドレス、ポート番号、データベース名を含む)が格納されています。 sql.Open()`open_connection()` 関数を使用してデータベース接続を開きます。エラーが発生した場合は、エラーをログに記録し、プログラムを終了します。`open_connection()` を使用します。defer データベース接続のクローズを遅延させるキーワード。これにより、関数が実行された後に接続が確実に閉じられます。

      サンプルコードは次のとおりです。

      conn := "user_name:******@tcp(host:port)/schema_name"
      // データベース接続パラメータ
      
      db, err := sql.Open("mysql", conn)
      if err != nil {
          log.Fatal(err)
      }
    2. コンソールにメッセージを出力します。 キーワードを使用して 関数の実行を遅延させます。これにより、関数が実行された後にデータベース接続がクローズされます。 関数を使用して、コンソールに接続成功メッセージを出力します。defer実行を遅延させるキーワードdb.Close() 関数を使用します。この関数は、関数が実行された後にデータベース接続が閉じられることを保証します。 fmt.Printf()コンソールに接続成功メッセージを出力する関数。

      サンプルコードは次のとおりです。

      defer db.Close()
      
      if err != nil {
          log.Fatal(err)
      }
      
      fmt.Printf("success to connect OceanBase with go_mysql driver\n")
    3. t1 が含まれている 文字列 フィールドの varchar(256) タイプ。

      サンプルコードは次のとおりです。

          _, err = db.Query("create table t1(str varchar(256))")
      if err != nil {
          log.Fatal(err)
      }
    4. データを挿入します。 が である行を テーブルに挿入します。文字列Hello OceanBaset1 テーブル。

      サンプルコードは次のとおりです。

      _, err = db.Query("insert into t1 values ('Hello OceanBase')")
      if err != nil {
          log.Fatal(err)
      }
    5. events t1テーブルにクエリ結果を変数に割り当てますres。クエリが失敗した場合は、エラーメッセージを返します。

      サンプルコードは次のとおりです。

      res, err := db.Query("SELECT * FROM t1")
      if err != nil {
          log.Fatal(err)
      }
      defer res.Close()
      
      for res.Next() {
          var str Str
          res.Scan(&str.Name)
          fmt.Printf("%s\n", str.Name)
      }
    6. テーブルを削除します。 t1 table。操作が失敗した場合は、エラーメッセージを返します。

      サンプルコードは次のとおりです。

      _, err = db.Query("drop table t1")
      if err != nil {
          log.Fatal(err)
      }

完全なコード例

go.mod

module go-oceanbase
go 1.20
require github.com/go-sql-driver/mysql v1.7.1 // indirect

go.sum

github.com/go-sql-driver/mysql v1.7.1 h1:lUIinVbN1DY0xBg0eMOzmmtGoHwWBbvnWubQUrtU8EI=
github.com/go-sql-driver/mysql v1.7.1/go.mod h1:OXbVy3sEdcQ2Doequ6Z5BW6fXNQTmx+9S1MCJN5yJMI=

test.go

package main

import (
"database/sql"
"fmt"
"log"

_ "github.com/go-sql-driver/mysql"
// go-sql-driver/mysql のインストールパスを指定します。
)

type Str struct {
Name string
}

func main() {
selectAll()
}

func selectAll() {
conn := "user_name:******@tcp(host:port)/schema_name"
// データベース接続パラメータを設定します。

db, err := sql.Open("mysql", conn)
if err != nil {
    log.Fatal(err)
}
defer db.Close()

if err != nil {
    log.Fatal(err)
}

fmt.Printf("success to connect OceanBase with go_mysql driver\n")
// t1 という名前のテーブルを作成します。
_, err = db.Query("create table t1(str varchar(256))")
if err != nil {
    log.Fatal(err)
}

// データを挿入します。
_, err = db.Query("insert into t1 values ('Hello OceanBase')")
if err != nil {
    log.Fatal(err)
}

// データをクエリします。
res, err := db.Query("SELECT * FROM t1")
if err != nil {
    log.Fatal(err)
}
defer res.Close()

for res.Next() {
    var str Str
    res.Scan(&str.Name)
    fmt.Printf("%s\n", str.Name)
}

// t1 テーブルを削除します。
_, err = db.Query("drop table t1")
if err != nil {
    log.Fatal(err)
}
}

関連情報

Go-MySQL-Driver の詳細については、「Go-MySQL-Driver」をご参照ください。go-sql-driver/mysql GitHub 上。