Go 言語と Redis を使用してオンライン Q&A プラットフォームを開発する方法
プロジェクト構造
最初に、次のディレクトリ構造に従ってコードを編成できる新しい Go プロジェクトを作成する必要があります:
project
在`main.go`文件中,我们将实现整个应用程序的入口点。在`question.go`和`answer.go`文件中,我们将定义问题和回答的相关结构和方法。
Redis に接続
at main.go
ファイルで、まず github.com/go-redis/redis
パッケージをインポートし、Redis クライアント インスタンスを作成する必要があります。これは、次のコードで実現できます。
package main import ( "fmt" "github.com/go-redis/redis" ) func main() { client := redis.NewClient(&redis.Options{ Addr: "localhost:6379", Password: "", // 无密码 DB: 0, // 默认数据库 }) pong, err := client.Ping().Result() fmt.Println(pong, err) }
上記のコードでは、client
という名前の Redis クライアント インスタンスを作成し、Ping
メソッドを使用して、接続は正常です。
質問の構造を定義する
次に、question.go
ファイルで、質問の構造と関連メソッドを定義します。質問構造には、タイトル、内容、作成時間などの属性を含めることができます。これを実現するには、次のコードを使用します。
package main import "time" type Question struct { ID string `json:"id"` Title string `json:"title"` Content string `json:"content"` CreatedAt time.Time `json:"created_at"` } func (q *Question) Save(client *redis.Client) error { // 使用Redis的HSET命令保存问题 err := client.HSet("questions", q.ID, q).Err() if err != nil { return err } return nil } func (q *Question) GetByID(client *redis.Client, id string) error { // 使用Redis的HGET命令获取问题 val, err := client.HGet("questions", id).Result() if err != nil { return err } err = json.Unmarshal([]byte(val), q) if err != nil { return err } return nil } func (q *Question) GetAll(client *redis.Client) ([]Question, error) { // 使用Redis的HGETALL命令获取所有问题 vals, err := client.HGetAll("questions").Result() if err != nil { return nil, err } questions := make([]Question, len(vals)) i := 0 for _, val := range vals { err = json.Unmarshal([]byte(val), &questions[i]) if err != nil { return nil, err } i++ } return questions, nil }
上記のコードでは、Question
構造を定義し、質問を保存し、ID に基づいて質問を取得し、すべての質問を取得するメソッドを実装します。 。
回答構造を定義する
同様に、answer.go
ファイルで、回答構造と関連メソッドを定義します。回答構造には、質問 ID、回答内容、作成時間などの属性を含めることができます。これを実現するには、次のコードを使用します。
package main import "time" type Answer struct { ID string `json:"id"` QuestionID string `json:"question_id"` Content string `json:"content"` CreatedAt time.Time `json:"created_at"` } func (a *Answer) Save(client *redis.Client) error { // 使用Redis的HSET命令保存回答 err := client.HSet("answers", a.ID, a).Err() if err != nil { return err } return nil } func (a *Answer) GetByQuestionID(client *redis.Client, questionID string) ([]Answer, error) { // 使用Redis的HGETALL命令获取指定问题的所有回答 vals, err := client.HGetAll("answers").Result() if err != nil { return nil, err } answers := make([]Answer, 0) for _, val := range vals { answer := Answer{} err = json.Unmarshal([]byte(val), &answer) // 遍历所有回答,找到与指定问题ID相匹配的回答 if answer.QuestionID == questionID { answers = append(answers, answer) } } return answers, nil }
上記のコードでは、Answer
構造を定義し、回答を保存し、質問 ID に基づいて回答を取得するメソッドを実装します。 。
Q&A プラットフォームの使用main.go
ファイルの main
関数では、使用方法をテストおよびデモンストレーションできます。オンラインQ&Aプラットフォーム。次のコードに従って実装できます:
package main import ( "fmt" "github.com/go-redis/redis" ) func main() { client := redis.NewClient(&redis.Options{ Addr: "localhost:6379", Password: "", // 无密码 DB: 0, // 默认数据库 }) // 创建问题 question := Question{ ID: "1", Title: "如何学习Go语言?", Content: "我想学习Go语言,请问有什么好的学习资源推荐吗?", CreatedAt: time.Now(), } err := question.Save(client) if err != nil { fmt.Println("保存问题失败:", err) return } // 根据ID获取问题 err = question.GetByID(client, "1") if err != nil { fmt.Println("根据ID获取问题失败:", err) return } fmt.Println("问题标题:", question.Title) // 获取所有问题 questions, err := question.GetAll(client) if err != nil { fmt.Println("获取所有问题失败:", err) return } for _, q := range questions { fmt.Println("问题标题:", q.Title) } // 创建回答 answer := Answer{ ID: "1", QuestionID: "1", Content: "推荐去官方网站学习Go语言。", CreatedAt: time.Now(), } err = answer.Save(client) if err != nil { fmt.Println("保存回答失败:", err) return } // 根据问题ID获取回答 answers, err := answer.GetByQuestionID(client, "1") if err != nil { fmt.Println("根据问题ID获取回答失败:", err) return } for _, a := range answers { fmt.Println("回答内容:", a.Content) } }
上記のコードでは、質問の作成、ID に基づいた質問の取得、すべての質問の取得、回答の作成、回答の取得によってオンライン Q&A プラットフォームの使用方法を示しています。質問IDなどに基づいて
これまで、Go 言語と Redis を使用して、シンプルなオンライン質問と回答のプラットフォームを開発してきました。このプラットフォームを通じて、ユーザーは質問を投稿し、他のユーザーから回答を得ることができます。この記事で提供されているサンプル コードを学習することで、このプラットフォームをさらに拡張および改善して、実際のアプリケーション シナリオにより適したものにすることができます。この記事がお役に立てば幸いです!
以上がGo 言語と Redis を使用してオンライン Q&A プラットフォームを開発する方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。