今回作成したタスク管理アプリの概要
今回作ったタスク管理アプリは、実際のDBに接続するのではなく、Taskオブジェクトを格納するためのスライスをDBと見立てて、作成や取得、削除といったCRUD処理を実装しました。
- createTask(): 新規タスクを作成する関数
- getTasks(): すべてのタスクを取得する関数
- updateTask(): タスクを更新する関数
- deleteTask(): タスクを削除する関数
実際に書いたコードは以下に載せてあります↓
実際のコードはこちら
package main
import (
"encoding/json"
"fmt"
"net/http"
)
type Task struct {
ID int `json:"id"`
Name string `json:"name"`
Completed bool `json:"completed"`
}
var tasks []Task
var currentID int
func createTask(w http.ResponseWriter, r *http.Request) {
var task Task
json.NewDecoder(r.Body).Decode(&task)
currentID++
task.ID = currentID
tasks = append(tasks, task)
json.NewEncoder(w).Encode(task)
}
func getTasks(w http.ResponseWriter, r *http.Request) {
json.NewEncoder(w).Encode(tasks)
}
func updateTask(w http.ResponseWriter, r *http.Request) {
var task Task
json.NewDecoder(r.Body).Decode(&task)
for i, item := range tasks {
if item.ID == task.ID {
tasks[i] = task
break
}
}
json.NewEncoder(w).Encode(task)
}
func deleteTask(w http.ResponseWriter, r *http.Request) {
var task Task
json.NewDecoder(r.Body).Decode(&task)
for i, item := range tasks {
if item.ID == task.ID {
tasks = append(tasks[:i], tasks[i+1:]...)
break
}
}
json.NewEncoder(w).Encode(task)
}
func main() {
http.HandleFunc("/tasks", getTasks)
http.HandleFunc("/tasks/create", createTask)
http.HandleFunc("/tasks/update", updateTask)
http.HandleFunc("/tasks/delete", deleteTask)
fmt.Println("Starting server on port 8000")
http.ListenAndServe(":8000", nil)
}
このコードでは、タスクを管理するための構造体 Task を定義しています。タスクの一覧は tasks 配列に格納し、ID は currentID 変数を使用して管理しています。
それぞれのAPIのハンドラー関数にそれぞれの機能を持っています。 main関数にて、それぞれのAPIをURLと紐付けし、サーバーを立ち上げています。