はじめる
まず、プロジェクト用に新しいフォルダーを作成し、次のコマンドを使用して Go モジュールを初期化します。
go mod init github.com/vishaaxl/cheershare
プロジェクト構造のセットアップ
まず、次のフォルダー構造で新しい Go プロジェクトをセットアップします。
my-otp-auth-server/ ├── cmd/ │ └── api/ │ └── main.go │ └── user.go │ └── token.go ├── internal/ │ └── data/ │ ├── models.go │ └── user.go │ └── token.go ├── docker-compose.yml ├── go.mod └── Makefile
次に、docker-compose.yml ファイルを設定します。この構成では、このチュートリアル全体で使用するサービス (PostgreSQL と Redis) を定義します。
Docker Compose を使用したサービスのセットアップ
プロジェクトに必要なサービスを構成することから始めます。バックエンドには次のものが必要です:
Redis: redis:6 イメージを使用します。このサービスは、安全なアクセスのためのパスワードを構成し、ポート 6379 を公開し、--requirepass フラグを使用してパスワード認証を強制して、Redis アクセスを保護します。
PostgreSQL: postgres:13 イメージを使用します。このサービスは、デフォルトのユーザー、パスワード、データベースを定義し、通信用にポート 5432 を公開し、耐久性を確保するために名前付きボリューム (postgres_data) でデータを永続化します。
オプション:
- メイン バックエンド サービス: ここで、PostgreSQL と Redis の両方と対話するメイン バックエンド サービスを定義することもできます。
// docker-compose.yml services: postgres: image: postgres:13 container_name: postgres environment: POSTGRES_USER: postgres POSTGRES_PASSWORD: mysecretpassword POSTGRES_DB: cheershare ports: - "5432:5432" volumes: - postgres_data:/var/lib/postgresql/data redis: image: redis:6 container_name: redis environment: REDIS_PASSWORD: mysecretpassword ports: - "6379:6379" command: ["redis-server", "--requirepass", "mysecretpassword"] volumes: postgres_data:
メインのバックエンド サービス
HTTP リクエストのルーティングと処理には、github.com/julienschmidt/httprouter パッケージを使用します。依存関係をインストールするには、次のコマンドを実行します:
go get github.com/julienschmidt/httprouter
次に、cmd/api/main.go にファイルを作成し、次のコードを貼り付けます。各行の説明はコメントに記載されています:
// main.go package main import ( "fmt" "log" "net/http" "os" "time" "github.com/julienschmidt/httprouter" ) /* config struct: - Holds application-wide configuration settings such as: - `port`: The port number on which the server will listen. - `env`: The current environment (e.g., "development", "production"). */ type config struct { port int env string } /* applications struct: - Encapsulates the application's dependencies, including: - `config`: The application's configuration settings. - `logger`: A logger instance to handle log messages. */ type applications struct { config config logger *log.Logger } func main() { cfg := &config{ port: 4000, env: "development", } logger := log.New(os.Stdout, "INFO\t", log.Ldate|log.Ltime) app := &applications{ config: *cfg, logger: logger, } router := httprouter.New() router.GET("/", func(w http.ResponseWriter, r *http.Request, _ httprouter.Params) { w.WriteHeader(http.StatusOK) fmt.Fprintln(w, "Welcome to the Go application!") }) /* Initialize the HTTP server - Set the server's address to listen on the specified port. - Assign the router as the handler. - Configure timeouts for idle, read, and write operations. - Set up an error logger to capture server errors. */ srv := &http.Server{ Addr: fmt.Sprintf(":%d", app.config.port), Handler: router, IdleTimeout: time.Minute, ReadTimeout: 10 * time.Second, WriteTimeout: 30 * time.Second, } app.logger.Printf("Starting server on port %d in %s mode", app.config.port, app.config.env) err := srv.ListenAndServe() if err != nil { app.logger.Fatalf("Could not start server: %s", err) } }
現時点では、 go run ./cmd/api を使用してサーバーを起動し、http://localhost:4000 にリクエストを送信することで、セットアップをテストできます。これにより、ウェルカム メッセージが返されます。次に、コア機能を実装するための 3 つの追加ルートを定義します。
/send-otp: このルートはユーザーへの OTP の送信を処理します。一意の OTP を生成し、Redis に保存して、ユーザーに配信します。
/verify-otp: このルートは、ユーザーが提供した OTP を検証します。 Redis に保存されている値と照合してユーザーの ID を確認します。
/login: OTP が検証され、ユーザーが正常に作成されると、このルートはユーザーのログイン機能を処理します。
ただし、続行する前に、電話番号やワンタイム パスワードなどのユーザー情報を保存する方法が必要です。これらの情報は、docker-compose.yml ファイルで前に定義したサービスに接続する必要があります。
ヘルパー関数の定義
ルートを実装する前に、2 つの重要なヘルパー関数を定義しましょう。これらの関数は Redis および PostgreSQL サーバーへの接続を処理し、バックエンドがこれらのサービスと対話できるようにします。
サービスに関する情報を保存するように「config」構造体を変更します。 これらの関数は一目瞭然です。
my-otp-auth-server/ ├── cmd/ │ └── api/ │ └── main.go │ └── user.go │ └── token.go ├── internal/ │ └── data/ │ ├── models.go │ └── user.go │ └── token.go ├── docker-compose.yml ├── go.mod └── Makefile
docker-compose up -d コマンドでサービスを開始した後、これらの関数を使用して PostgreSQL データベースと Redis サーバーへの接続を確立できます。
次のパートでは、以前に説明したルートの作業を開始します。 main.go ファイルは次のようになります。
// docker-compose.yml services: postgres: image: postgres:13 container_name: postgres environment: POSTGRES_USER: postgres POSTGRES_PASSWORD: mysecretpassword POSTGRES_DB: cheershare ports: - "5432:5432" volumes: - postgres_data:/var/lib/postgresql/data redis: image: redis:6 container_name: redis environment: REDIS_PASSWORD: mysecretpassword ports: - "6379:6379" command: ["redis-server", "--requirepass", "mysecretpassword"] volumes: postgres_data:
以上がGo を使用して OTP ベースの認証サーバーを構築する: パート 1の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

Golangは高い並行性タスクにより適していますが、Pythonには柔軟性がより多くの利点があります。 1.Golangは、GoroutineとChannelを介して並行性を効率的に処理します。 2。Pythonは、GILの影響を受けるが、複数の並行性メソッドを提供するスレッドとAsyncioに依存しています。選択は、特定のニーズに基づいている必要があります。

GolangとCのパフォーマンスの違いは、主にメモリ管理、コンピレーションの最適化、ランタイム効率に反映されています。 1)Golangのゴミ収集メカニズムは便利ですが、パフォーマンスに影響を与える可能性があります。

seetgolangforhighperformance andconcurrency、ithyforbackendservicesandnetworkプログラミング、selectthonforrapiddevelopment、datascience、andmachinelearningduetoistsversitydextentextensextensentensiveLibraries。

GolangとPythonにはそれぞれ独自の利点があります。Golangは高性能と同時プログラミングに適していますが、PythonはデータサイエンスとWeb開発に適しています。 Golangは同時性モデルと効率的なパフォーマンスで知られていますが、Pythonは簡潔な構文とリッチライブラリエコシステムで知られています。

GolangとPythonはどのような側面で使いやすく、より滑らかな学習曲線を持っていますか? Golangは、高い並行性と高性能のニーズにより適しており、学習曲線はC言語の背景を持つ開発者にとって比較的穏やかです。 Pythonは、データサイエンスと迅速なプロトタイピングにより適しており、初心者にとって学習曲線は非常にスムーズです。

GolangとCにはそれぞれパフォーマンス競争において独自の利点があります。1)Golangは、高い並行性と迅速な発展に適しており、2)Cはより高いパフォーマンスと微細な制御を提供します。選択は、プロジェクトの要件とチームテクノロジースタックに基づいている必要があります。

Golangは迅速な発展と同時プログラミングに適していますが、Cは極端なパフォーマンスと基礎となる制御を必要とするプロジェクトにより適しています。 1)Golangの並行性モデルは、GoroutineとChannelを介した同時性プログラミングを簡素化します。 2)Cのテンプレートプログラミングは、一般的なコードとパフォーマンスの最適化を提供します。 3)Golangのごみ収集は便利ですが、パフォーマンスに影響を与える可能性があります。 Cのメモリ管理は複雑ですが、コントロールは問題ありません。

speed、効率、およびシンプル性をspeedsped.1)speed:gocompilesquilesquicklyandrunseffictient、理想的なlargeprojects.2)効率:等系dribribraryreducesexexternaldedenciess、開発効果を高める3)シンプルさ:


ホットAIツール

Undresser.AI Undress
リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover
写真から衣服を削除するオンライン AI ツール。

Undress AI Tool
脱衣画像を無料で

Clothoff.io
AI衣類リムーバー

AI Hentai Generator
AIヘンタイを無料で生成します。

人気の記事

ホットツール

AtomエディタMac版ダウンロード
最も人気のあるオープンソースエディター

PhpStorm Mac バージョン
最新(2018.2.1)のプロフェッショナル向けPHP統合開発ツール

ゼンドスタジオ 13.0.1
強力な PHP 統合開発環境

WebStorm Mac版
便利なJavaScript開発ツール

SublimeText3 Mac版
神レベルのコード編集ソフト(SublimeText3)
