ホームページ > データベース > mysql チュートリアル > Go 言語と MySQL データベース: データを行と列に変換するにはどうすればよいですか?

Go 言語と MySQL データベース: データを行と列に変換するにはどうすればよいですか?

WBOY
リリース: 2023-06-17 08:42:11
オリジナル
1324 人が閲覧しました

データ量が増加し続けるにつれ、データ処理と分析は現代の企業にとって不可欠かつ重要なビジネスとなっています。データベースはデータの処理と管理の中核です。 MySQL は、優れたパフォーマンス、強力な機能、使いやすさを備えたリレーショナル データベースとして、ますます多くの企業に選ばれています。 Go 言語は、高効率、開発の容易さ、高度な同時実行性などの利点により、ますます多くの企業や開発者に好まれるプログラミング言語となっています。 MySQLデータベースのデータ行と列をGo言語で変換するにはどうすればよいですか?この記事ではそれについて説明します。

1. MySQL データベースのデータ型

データの行と列の変換処理を実行する前に、まず MySQL データベースのデータ型を理解する必要があります。 MySQL は、数値型、文字列型、時刻および日付型など、さまざまなデータ型をサポートしています。特定の MySQL データ型とそれに対応する Go 言語型を次の表に示します。

#MySQL データ型Go 言語型#INTint64FLOAT、REALfloat64CHAR、VARCHAR、TEXTstringDATE、TIME、DATETIME、TIMESTAMPtime.TimeBLOB[]byte
2. MySQL データベースにデータを保存します

Go 言語では、サードパーティの MySQL ドライバーを使用して MySQL データベースに接続できます。ここでは、github.com/go-sql-driver/mysql パッケージを使用して MySQL データベースに接続します。

まず、データベースのユーザー名とパスワード、サーバーの IP アドレスとポート、データベース名、その他の情報を含む接続文字列を定義する必要があります。

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

const (
    USERNAME = "root"
    PASSWORD = "12345678"
    NETWORK  = "tcp"
    SERVER   = "localhost"
    PORT     = 3306
    DATABASE = "test"
)

func Connect() (*sql.DB, error) {
    connStr := fmt.Sprintf("%s:%s@%s(%s:%d)/%s", USERNAME, PASSWORD, NETWORK, SERVER, PORT, DATABASE)
    db, err := sql.Open("mysql", connStr)
    if err != nil {
        return nil, err
    }
    return db, nil
}
ログイン後にコピー

MySQL データベースに接続し、sql.DB 型のオブジェクトを返す Connect 関数を定義しました。次に、保存するデータを表す構造体を Go 言語で定義できます。学生情報を例に取ると、構造は次のように定義されます:

type student struct {
    id   int
    name string
    age  int
}
ログイン後にコピー

次に、次のコードを通じて学生情報の一部を MySQL データベースに挿入できます:

func InsertStudent(db *sql.DB, stu *student) error {
    sql := "INSERT INTO student (name, age) VALUES (?, ?)"
    stmt, err := db.Prepare(sql)
    if err != nil {
        return err
    }
    defer stmt.Close()
    _, err = stmt.Exec(stu.name, stu.age)
    if err != nil {
        return err
    }
    return nil
}
ログイン後にコピー

上記のコードInsertStudent 関数を定義し、MySQL データベースの Student テーブルに Student オブジェクトを挿入します。事前に、データベース内の学生テーブルを (名前 VARCHAR(50)、年齢 INT) として定義します。

3. MySQL データベース内のデータをクエリする

Go 言語では、クエリを使用して SQL ステートメントを実行できます。以下は、student テーブル内の学生情報をクエリする方法です。

func QueryStudent(db *sql.DB) ([]*student, error) {
    students := make([]*student, 0)
    rows, err := db.Query("SELECT * FROM student")
    if err != nil {
        return nil, err
    }
    defer rows.Close()
    for rows.Next() {
        stu := new(student)
        err := rows.Scan(&stu.id, &stu.name, &stu.age)
        if err != nil {
            return nil, err
        }
        students = append(students, stu)
    }
    if err = rows.Err(); err != nil {
        return nil, err
    }
    return students, nil
}
ログイン後にコピー

上記のコードは、MySQL データベースの Student テーブル内のすべての学生情報をクエリするために使用される QueryStudent 関数を定義します。この関数は学生情報の配列を返します。

4. データ行をデータ列に変換する

データ行をデータ列に変換する必要がある場合があります。たとえば、学生情報テーブルの各行に 4 つの学生情報を表示する必要があります。以下は、学生情報の配列を学生情報の 2 次元配列に変換する方法です。

func ToColumnArray(students []*student, n int) [][]*student {
    result := make([][]*student, (len(students)+n-1)/n)
    for i := range result {
        result[i] = make([]*student, n)
    }
    for i, s := range students {
        row, col := i/n, i%n
        result[row][col] = s
    }
    return result
}
ログイン後にコピー

上記のコードは、学生情報の配列を学生の 2 次元配列に変換する ToColumnArray 関数を定義しています。各行には n 個の学生情報が含まれます。

5. データ列をデータ行に変換する

一方で、データ列をデータ行に変換する必要もあります。たとえば、大きなテーブルを複数の小さなテーブルに分割する必要があります。 . .以下は、学生情報の 2 次元配列を学生情報の配列に変換する方法です。

func ToRowArray(students [][]*student) []*student {
    result := make([]*student, 0)
    for _, row := range students {
        for _, s := range row {
            if s != nil {
                result = append(result, s)
            }
        }
    }
    return result
}
ログイン後にコピー

上記のコードは、学生情報の 2 次元配列を学生の配列に変換する ToRowArray 関数を定義しています。情報。

概要

この記事では、Go 言語で MySQL データベースに接続し、データの行と列の変換処理を実行する方法を紹介します。実際のビジネスにおいて、データの処理と管理は非常に重要です。この記事が皆さんにインスピレーションを与え、大量のデータの処理と管理を改善するのに役立つことを願っています。

以上がGo 言語と MySQL データベース: データを行と列に変換するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
最新の問題
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート