ホームページ > バックエンド開発 > Golang > golang ビルドのブログ

golang ビルドのブログ

WBOY
リリース: 2023-05-16 16:23:37
オリジナル
752 人が閲覧しました

近年、Golang (Go 言語) は、その効率的な実行速度とシンプルな構文により、インターネット開発で徐々に人気のある言語となり、非常に人気のあるインターネット アプリケーションとして、ブログでも Golang の利点が十分に発揮されています。この記事では、Golangを使って簡単なブログを構築する方法を紹介します。

ステップ 1: Golang をインストールする
まず、Golang 環境をローカルにインストールする必要があります。公式 Web サイトにアクセスして Golang の最新バージョンをダウンロードし、公式 Web サイトの指示に従ってインストールできますが、ここでは詳細は説明しません。インストールが完了したら、GOPATH 環境変数を設定する必要があります。

ステップ 2: Gin をインストールする
ブログをより便利に構築するには、軽量の Web フレームワークである Gin を使用する必要があります。ターミナルで次のコマンドを使用してインストールできます:
go get -u github.com/gin-gonic/gin
インストールが完了したら、それをプロジェクト。

ステップ 3: データベース設計
次に、ブログ コンテンツを保存するデータベースを設計する必要があります。 MySQL や PostgreSQL などのリレーショナル データベースを使用できますが、ここでは SQLite を使用することにします。 SQLite を使用する理由は、SQLite が小さくて使いやすく、別のサーバーを起動する必要がないためです。ターミナルで次のコマンドを使用して SQLite をインストールできます:
go get -u github.com/mattn/go-sqlite3
インストールが完了したら、次のコマンドを使用してデータベース接続を確立できます。次のコード:

db, err := sql.Open("sqlite3", "./blog.db")
if err != nil {
    panic(err)
}
defer db.Close()
ログイン後にコピー

上記のコードは、最初に sql.Open() メソッドを呼び出してデータベースに接続し、最後に db.Close() を呼び出します。 リソースを解放するメソッド。 2 番目のパラメータを変更することで、データ ファイルが保存されるパスを設定できます。ここでは、ブログのデータ テーブルに「posts」という名前を付けます。次の SQL ステートメントを使用して、posts データ テーブルを作成できます:

CREATE TABLE posts (
    id INTEGER PRIMARY KEY AUTOINCREMENT,
    title VARCHAR(64) NOT NULL,
    content TEXT NOT NULL,
    created_at DATETIME DEFAULT CURRENT_TIMESTAMP,
    updated_at DATETIME DEFAULT CURRENT_TIMESTAMP
);
ログイン後にコピー

上記の SQL ステートメントは、id、title、content、created_at を含む、posts という名前のデータ テーブルを作成します。 updated_at 5 つのフィールド。

ステップ 4: 追加、削除、変更、およびクエリの実装
データベースを作成したら、追加、削除、変更、およびクエリ機能の実装を開始できます。ここでは、RESTful API の考え方に基づいてインターフェイスを設計できます。 Gin フレームワークでは、4 つの HTTP メソッド POST、GET、PUT、DELETE を使用して、それぞれ追加、クエリ、更新、削除の操作に対応します。以下は、Gin フレームワークの使用例です。

package main

import (
    "database/sql"
    "net/http"

    "github.com/gin-gonic/gin"
    _ "github.com/mattn/go-sqlite3"
)

type post struct {
    ID        int    `json:"id"`
    Title     string `json:"title"`
    Content   string `json:"content"`
    CreatedAt string `json:"created_at"`
    UpdatedAt string `json:"updated_at"`
}

func main() {
    r := gin.Default()

    db, err := sql.Open("sqlite3", "./blog.db")
    if err != nil {
        panic(err)
    }
    defer db.Close()

    r.GET("/posts", func(c *gin.Context) {
        var p []post
        rows, err := db.Query("SELECT * FROM posts")
        if err != nil {
            c.JSON(http.StatusInternalServerError, gin.H{"error": err.Error()})
            return
        }
        defer rows.Close()

        for rows.Next() {
            var ps post
            rows.Scan(&ps.ID, &ps.Title, &ps.Content, &ps.CreatedAt, &ps.UpdatedAt)
            p = append(p, ps)
        }
        if err := rows.Err(); err != nil {
            c.JSON(http.StatusInternalServerError, gin.H{"error": err.Error()})
            return
        }
        c.JSON(http.StatusOK, gin.H{"data": p})
    })

    r.POST("/posts", func(c *gin.Context) {
        var p post
        if err := c.ShouldBindJSON(&p); err != nil {
            c.JSON(http.StatusBadRequest, gin.H{"error": err.Error()})
            return
        }

        result, err := db.Exec("INSERT INTO posts (title, content) VALUES (?, ?)", p.Title, p.Content)
        if err != nil {
            c.JSON(http.StatusInternalServerError, gin.H{"error": err.Error()})
            return
        }
        p.ID, err = result.LastInsertId()
        if err != nil {
            c.JSON(http.StatusInternalServerError, gin.H{"error": err.Error()})
            return
        }
        c.JSON(http.StatusOK, gin.H{"data": p})
    })

    r.GET("/posts/:id", func(c *gin.Context) {
        var p post

        row := db.QueryRow("SELECT * FROM posts WHERE id = ?", c.Param("id"))
        err := row.Scan(&p.ID, &p.Title, &p.Content, &p.CreatedAt, &p.UpdatedAt)
        if err != nil {
            c.JSON(http.StatusInternalServerError, gin.H{"error": err.Error()})
            return
        }
        c.JSON(http.StatusOK, gin.H{"data": p})
    })

    r.PUT("/posts/:id", func(c *gin.Context) {
        var p post
        if err := c.ShouldBindJSON(&p); err != nil {
            c.JSON(http.StatusBadRequest, gin.H{"error": err.Error()})
            return
        }

        result, err := db.Exec("UPDATE posts SET title = ?, content = ? WHERE id = ?", p.Title, p.Content, c.Param("id"))
        if err != nil {
            c.JSON(http.StatusInternalServerError, gin.H{"error": err.Error()})
            return
        }
        p.ID, err = result.LastInsertId()
        if err != nil {
            c.JSON(http.StatusInternalServerError, gin.H{"error": err.Error()})
            return
        }
        c.JSON(http.StatusOK, gin.H{"data": p})
    })

    r.DELETE("/posts/:id", func(c *gin.Context) {
        _, err := db.Exec("DELETE FROM posts WHERE id = ?", c.Param("id"))
        if err != nil {
            c.JSON(http.StatusInternalServerError, gin.H{"error": err.Error()})
            return
        }
        c.JSON(http.StatusOK, gin.H{"data": "Post deleted"})
    })

    r.Run(":8080")
}
ログイン後にコピー

上記のコードは、GET、POST、PUT、および DELETE の 4 つのメソッドを実装しており、対応するリクエスト アドレスは /posts、/posts/:id、/ です。 post/:id と /posts/:id。このうち、GET メソッドはすべての記事のクエリに使用され、POST メソッドは記事の追加に使用され、GET メソッド (パラメーター付き) は指定された ID を持つ記事のクエリに使用され、PUT メソッドは記事の変更に使用され、記事を削除するにはDELETEメソッドを使用します。

ステップ 5: サービスを開始する
上記のステップを完了したら、ターミナルで次のコマンドを使用してサービスを開始できます:
go run main.go
サービスの起動 成功したら、ブラウザに http://localhost:8080/posts と入力してすべての記事を表示できます。

まとめ
上記の手順により、Golang を使用してブログを構築し、Gin フレームワークと SQLite データベースを使用してデータの追加、削除、変更、クエリ機能を実装することができました。もちろん、これは非常に基本的な例にすぎず、ニーズに合わせて拡張できます。

以上がgolang ビルドのブログの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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