次の Golang ベースの REST API を構築するために &#golly&# フレームワークを選択したのはなぜですか?

Mary-Kate Olsen
リリース: 2024-10-24 06:18:30
オリジナル
344 人が閲覧しました

サーバーサイド開発に Go (Golang) を選択する理由

サーバーサイド開発に Go (Golang) を選択するのは、多くの場合、その主な強みによって決まります。

  • パフォーマンス: Go の同時実行モデルは、ゴルーチンとチャネルに基づいており、複数のタスクを同時に効率的に処理できるため、高パフォーマンスのサーバー アプリケーションに最適です。

  • シンプルさ: この言語は、最小限の構文でシンプルで読みやすいように設計されています。これにより、大規模なプロジェクトであってもメンテナンスが容易になります。

  • 高速なコンパイルと実行: Go はマシン コードに直接コンパイルされるため、Python や Node.js などのインタープリタ型言語と比較して実行時間が高速になります。

  • スケーラビリティ: Go の組み込み同時実行性と軽量な性質により、多数のリクエストを処理できるスケーラブルなサービスを構築するのに適しています。

  • 強力な標準ライブラリ: Go には、特にネットワーク化されたサービスの構築、HTTP の処理、同時実行性の管理のための強力な標準ライブラリが付属しており、外部依存関係の必要性が軽減されます。

これらの要素により、Go は、特にパフォーマンスとスケーラビリティが重要な場合に、最新のサーバーサイド アプリケーションに最適になります。

Golang で REST API サーバーを構築するにはどうすればよいですか?

Gin、Gorrilla-Mux など、Golang で REST API サーバーを構築するためのフレームワークが多数存在します。

Golang アプリケーションを構築するための包括的なツール セットを提供する新しいフレームワーク goly を使用します。

実装を詳しく見てみましょう

構築したい望ましい API

GET /api/v1/users
POST /api/v1/users
PUT /api/v1/users/:id
DELETE /api/v1/users/:id
ログイン後にコピー
ログイン後にコピー

必要な API を定義したら、プロジェクトを開始することから始めます。次のコマンドを使用します:-

mkdir my-go-server
cd my-go-server
go mod init rest_server

go get oss.nandlabs.io/golly
ログイン後にコピー
ログイン後にコピー

上記のアクションを実行すると、以下のようなフォルダー構造が表示されるはずです

Why I chose

これで、目的のサーバー構造の作成を開始できます

main()、つまり golang アプリケーションのエントリ ポイントを含む main.go ファイルを作成します

package main

import "rest_server/server"

func main() {
        // create the instance of your server
    srv := server.NewServer()
        // start your server
    srv.Start()
}
ログイン後にコピー
ログイン後にコピー

サーバー構成を含む /server/server.go ファイルを作成します

package server

import (
    "rest_server/handlers"
    "rest_server/store"

    "oss.nandlabs.io/golly/lifecycle"
    "oss.nandlabs.io/golly/rest/server"
)

type Server struct {
    store *store.Store
}

func NewServer() *Server {
    return &Server{
        store: store.NewStore(),
    }
}

func (s *Server) Start() {
    // register the router by creating the server object
    restServer, err := server.Default()
    if err != nil {
        panic(err)
    }

    // Add path prefix if you want
    restServer.Opts().PathPrefix = "/api/v1"

    // register routes
    restServer.Get("/users", handlers.GetUsers)
    restServer.Post("/users", handlers.AddUser)
    restServer.Put("/users/:id", handlers.UpdateUser)
    restServer.Delete("/users/:id", handlers.DeleteUser)

    // create the http.Server object and register the router as Handler
    // provide the necessary configurations such as PORT, ReadTimeout, WriteTimeout...
    manager := lifecycle.NewSimpleComponentManager()

    // Register the server
    manager.Register(restServer)

    // start the server
    manager.StartAndWait()
}

ログイン後にコピー

実現したいアプリケーション構造は以下のようなものです

Why I chose

CRUD 操作をテストするために、/store/store.go にインメモリ ストアを作成します。

package store

import "rest_server/models"

type Store struct {
    data map[string]models.Item
}

var initStore *Store

func NewStore() *Store {
    initStore = &Store{data: make(map[string]models.Item)}
    return initStore
}

func GetStore() *Store {
    return initStore
}

func (s *Store) GetAll() []models.Item {
    items := []models.Item{}
    for _, item := range s.data {
        items = append(items, item)
    }
    return items
}

func (s *Store) GetById(id string) (item models.Item, exists bool) {
    item, exists = s.data[id]
    return
}

func (s *Store) Put(id string, item models.Item) {
    s.data[id] = item
}

func (s *Store) Delete(id string) {
    delete(s.data, id)
}
ログイン後にコピー

これは、/models/item.go に存在するモデルを指します

GET /api/v1/users
POST /api/v1/users
PUT /api/v1/users/:id
DELETE /api/v1/users/:id
ログイン後にコピー
ログイン後にコピー

ハンドラーには、/server/server.go で定義された各エンドポイントのハンドラーが含まれます。

/handlers/AddUser.go の実装の 1 つを以下に示します。

mkdir my-go-server
cd my-go-server
go mod init rest_server

go get oss.nandlabs.io/golly
ログイン後にコピー
ログイン後にコピー

同様に、必要なロジックを使用して他のハンドラーを作成できます。

完全な例は、この github リポジトリにあります

サーバーを作成したら、以下のコマンドを使用してサーバーを起動できます

package main

import "rest_server/server"

func main() {
        // create the instance of your server
    srv := server.NewServer()
        // start your server
    srv.Start()
}
ログイン後にコピー
ログイン後にコピー

出力は以下のようになります

Why I chose
登録されたエンドポイントとサーバーが起動された場所を確認できます。

サーバーが起動したら、Postman または Curl コマンドを使用して API を呼び出すことができます。

golang の goly フレームワークを使用して、いかに迅速に REST サーバーを起動できたかがわかります。

Go アプリケーションを構築するための頼りになるフレームワークとして golly を使用する利点

  • ライフサイクル管理、UUID 生成、ロギング、残りサーバー管理など、使用されるすべてのライブラリは golly によってすぐに提供されます。
  • 多数の組み込みライブラリが存在し、複数のサードパーティ ライブラリをインポートする必要がないため、go.mod がクリーンで管理しやすくなります。
  • モジュールのシンプルかつ迅速な実装、容易な学習曲線。
  • オープンソース ライブラリ

Golly の詳細については、Golly リポジトリを参照してください。コードをチェックアウトして、お気軽に貢献してください!

この記事をお読みいただきありがとうございます!!
ご質問がございましたら、コメントにご記入ください。

以上が次の Golang ベースの REST API を構築するために &#golly&# フレームワークを選択したのはなぜですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ソース:dev.to
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
著者別の最新記事
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート
私たちについて 免責事項 Sitemap
PHP中国語ウェブサイト:福祉オンライン PHP トレーニング,PHP 学習者の迅速な成長を支援します!