サーバーサイド開発に Go (Golang) を選択するのは、多くの場合、その主な強みによって決まります。
パフォーマンス: Go の同時実行モデルは、ゴルーチンとチャネルに基づいており、複数のタスクを同時に効率的に処理できるため、高パフォーマンスのサーバー アプリケーションに最適です。
シンプルさ: この言語は、最小限の構文でシンプルで読みやすいように設計されています。これにより、大規模なプロジェクトであってもメンテナンスが容易になります。
高速なコンパイルと実行: Go はマシン コードに直接コンパイルされるため、Python や Node.js などのインタープリタ型言語と比較して実行時間が高速になります。
スケーラビリティ: Go の組み込み同時実行性と軽量な性質により、多数のリクエストを処理できるスケーラブルなサービスを構築するのに適しています。
強力な標準ライブラリ: Go には、特にネットワーク化されたサービスの構築、HTTP の処理、同時実行性の管理のための強力な標準ライブラリが付属しており、外部依存関係の必要性が軽減されます。
これらの要素により、Go は、特にパフォーマンスとスケーラビリティが重要な場合に、最新のサーバーサイド アプリケーションに最適になります。
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
上記のアクションを実行すると、以下のようなフォルダー構造が表示されるはずです
これで、目的のサーバー構造の作成を開始できます
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() }
実現したいアプリケーション構造は以下のようなものです
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() }
出力は以下のようになります
登録されたエンドポイントとサーバーが起動された場所を確認できます。
サーバーが起動したら、Postman または Curl コマンドを使用して API を呼び出すことができます。
golang の goly フレームワークを使用して、いかに迅速に REST サーバーを起動できたかがわかります。
Go アプリケーションを構築するための頼りになるフレームワークとして golly を使用する利点
Golly の詳細については、Golly リポジトリを参照してください。コードをチェックアウトして、お気軽に貢献してください!
この記事をお読みいただきありがとうございます!!
ご質問がございましたら、コメントにご記入ください。
以上が次の Golang ベースの REST API を構築するために golly フレームワークを選択したのはなぜですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。