Skip to content

ディープテック経済

市場が追いついたら、もう遅い。

Menu
  • Entertainment
  • お問い合わせ
  • アカウント
  • パスワードのリセット
  • プロファイル
  • ログイン
  • 一つ一つ
  • 登録
Menu

現場で使いそうなので、GoのAPI入門する

Posted on 2023年9月14日2023年9月14日 by DeepRecommend

APIの実装やブロックチェーン系のプロジェクトで

Goが現場で使われてるのを良く見るようになりました。

入門しましょう。ChatGPTに書かせます。

プロジェクトディレクトリと必要なファイルを作成

以下の構造でプロジェクトディレクトリを作成します:

mkdir -p go-todo-api
cd go-todo-api
mkdir db
touch docker-compose.yml
touch db/init.sql
touch main.go

Docker Compose ファイルの作成

docker-compose.yml ファイルに以下の内容を記述します:

version: '3.8'

services:
  app:
    image: golang:1.17
    volumes:
      - .:/go/src/go-todo-api
    working_dir: /go/src/go-todo-api
    command: go run main.go
    depends_on:
      - db
    environment:
      DB_SOURCE: postgres://user:password@db:5432/tododb?sslmode=disable

  db:
    image: postgres:latest
    environment:
      POSTGRES_USER: user
      POSTGRES_PASSWORD: password
      POSTGRES_DB: tododb
    volumes:
      - ./db/init.sql:/docker-entrypoint-initdb.d/init.sql
    ports:
      - "5432:5432"

Go のアプリケーションの作成

main.go ファイルを以下のように記述します:

package main

import (
	"database/sql"
	"fmt"
	"log"
	"net/http"
	"os"

	"github.com/gin-gonic/gin"
	_ "github.com/lib/pq"
)

var db *sql.DB

type Todo struct {
	ID     int    `json:"id"`
	Title  string `json:"title"`
	Status bool   `json:"status"`
}

func main() {
	var err error
	dbSource := os.Getenv("DB_SOURCE")
	if dbSource == "" {
		log.Fatal("DB_SOURCE must be set")
	}
	db, err = sql.Open("postgres", dbSource)
	if err != nil {
		log.Fatalf("Failed to connect to db: %v", err)
	}

	router := gin.Default()

	router.GET("/todos", getTodos)
	router.POST("/todos", createTodo)
	router.GET("/todos/:id", getTodo)
	router.PUT("/todos/:id", updateTodo)
	router.DELETE("/todos/:id", deleteTodo)

	router.Run(":8080")
}

// 以下の部分に getTodos, createTodo, getTodo, updateTodo, および deleteTodo のハンドラ関数を定義します

データベースのスキーマの定義

db/init.sql ファイルに以下の SQL コマンドを追加してデータベースのスキーマを定義します:

CREATE TABLE IF NOT EXISTS todos (
    id SERIAL PRIMARY KEY,
    title VARCHAR(255) NOT NULL,
    status BOOLEAN NOT NULL DEFAULT FALSE
);

Go のパッケージのインストール

プロジェクトディレクトリで以下のコマンドを実行して必要な Go のパッケージをインストールします:

go mod init go-todo-api
go get github.com/gin-gonic/gin
go get github.com/lib/pq

アプリケーションのビルドと実行

プロジェクトディレクトリで以下のコマンドを実行してアプリケーションをビルドおよび実行します:

docker-compose up --build

これでアプリケーションが起動し、REST APIがhttp://localhost:8080/todosで利用可能になります。

REST APIエンドポイントの実装

main.goファイルにgetTodos, createTodo, getTodo, updateTodo, および deleteTodo ハンドラ関数を実装します。 上記の main.go ファイルのプレースホルダー部分を完成させるために、各ハンドラ関数を実装します。

注意: ここでは SQL クエリが直接文字列としてハードコードされていますが、プロダクション環境では SQL インジェクションを防ぐためにパラメータ化されたクエリを使用するべきです。

一度すべてのエンドポイントが実装されたら、docker-compose up --buildコマンドを使用してアプリケーションを再びビルドおよび実行します。

コメントを残す コメントをキャンセル

メールアドレスが公開されることはありません。 ※ が付いている欄は必須項目です

カテゴリー

  • Business (39)
    • Consulting (8)
    • Finance (6)
    • Sales_Marketing (6)
  • Human Resources (4)
  • Marketing (38)
    • Design (8)
    • Music (15)
    • Video (2)
  • News (32)
  • Operation (3)
  • Q&A (5)
  • Technology (205)
    • AI (101)
    • Brain (49)
    • Quantum (21)
  • Value (159)
  • アーカイブ (4,162)

アーカイブ

  • 2025年11月 (1)
  • 2025年10月 (2)
  • 2025年9月 (1)
  • 2025年7月 (1)
  • 2025年6月 (3)
  • 2025年5月 (3)
  • 2025年4月 (1)
  • 2025年3月 (2)
  • 2024年12月 (4)
  • 2024年11月 (5)
  • 2024年10月 (2)
  • 2024年8月 (1)
  • 2024年7月 (3)
  • 2024年6月 (35)
  • 2024年5月 (98)
  • 2024年4月 (16)
  • 2024年3月 (9)
  • 2024年2月 (3)
  • 2023年10月 (1)
  • 2023年9月 (13)
  • 2023年8月 (10)
  • 2023年7月 (77)
  • 2023年6月 (23)
  • 2023年5月 (7)
  • 2023年4月 (26)
  • 2023年3月 (22)
  • 2023年2月 (21)
  • 2023年1月 (53)
  • 2022年12月 (17)
  • 2022年11月 (1)
© 2025 ディープテック経済 | Powered by Minimalist Blog WordPress Theme