Go関連のことを調べてみた

Go関連のことを調べてみた
目次

Go+Gin+GORM開発環境で食品管理APIを作る~GitHubCopilotChat編~

# はじめに
[こちらの記事](https://qiita.com/sedori/items/5f3c89e934ff30ad6067)で作成した食品管理APIを、今度はGitHub Copilot Chatを用いて作成してみたのでその内容をまとめました。

「見せてもらおうか GitHubのCopilotの性能とやらを」という気持ちです。

# GitHub Copilotについて
GitHubが提供する、AIを使ってプログラミングを支援するサービスです。
利用には課金が必要で主要言語は英語ですが、最近では日本語対応も進んできているので、以前に比べれば使いやすく、便利になってきています。

https://docs.github.com/ja/copilot

# GitHub Copilot Chatについて
GitHub Copilotと対話して、GitHub.com およびサポートされている IDE 内でコーディング関連の質問をしたり、回答を受け取ったりできるチャットインターフェイスです。
GitHub Copilotに課金していれば追加料金なしで利用することができます。

h

元記事を表示

Go+Gin+GORM開発環境で食品管理APIを作る~データ登録・更新・削除編~

# はじめに

[こちらの記事](https://qiita.com/sedori/items/f3cd7c41b97f9202f842)に引き続き、Go開発環境で食品管理APIを作っていきます。

今回は食品の追加、更新、削除APIを作ります。

# 検証環境および開発環境

[前回記事](https://qiita.com/sedori/items/f3cd7c41b97f9202f842)を参照

# 食品の登録、更新、削除APIの作成

今回はREST APIとして作成を進めていきます。

なお、処理は前回作成した取得APIのソースに付け足していきますので、重複する部分は割愛します。

### RESTについて

**RE**presentational **S**tate **T**ransferの略です。

https://ja.wikipedia.org/wiki/Representational_State_Transfer

:::note info
RESTの4原則

– Stateless (状態を保持せず、各リクエストやレスポンスが完結していること)
– Uni

元記事を表示

Go言語におけるCORS設定の実装方法

Go言語でHTTPサーバを実装する際にCORS(Cross-Origin Resource Sharing)の設定を行う方法。

※CORS:ウェブアプリケーションが異なるオリジンのリソースを安全にリクエストできるようにする仕組み

### CORSミドルウェアの実装
CORSポリシーを実施するミドルウェア関数を定義。(今回は全てのHTTPレスポンスに適切なCORSヘッダーを追加し、プリフライトリクエストに適切に応答するものとして定義している)
“`go:presentation/cors_middleware.go
package presentation

import “net/http”

func CORSMiddleware(next http.Handler) http.Handler {
return http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
w.Header().Set(“Access-Control-Allow-Origin”, “*”)

元記事を表示

Go+Gin+GORM開発環境で食品管理APIを作る~データ取得編~

# はじめに

[こちらの記事](https://qiita.com/sedori/items/68608e3b57a6a0467b4f)で検証に用いた食材-食品データベースを利用して、Go開発環境で実際に食品管理APIを作ってみようと思います。

※今回は食品取得APIのみです。

# 検証環境

“`shell
Golang v1.22.3
Gin v1.10.0
GORM v1.25.10

air v1.52.0

MySQL 8.0.29
“`

開発環境の参考情報はこちら

https://qiita.com/sedori/items/840e39a0cbf9d5bff006

:::note info
Goモジュールの初期化は `go mod init go_project` としています。
※もし異なるモジュール名にした場合、以下のソースのgo_projectの部分を変更した値に書き換えてください。
:::

# ディレクトリ構成

最終的には次のようになりました。
~~(名前の突っ込みは受け付けません)~~

“`shell
.
├── .air.toml

元記事を表示

Go言語でパッケージ呼び出し

### プログラムの構成

helloパッケージ
 |_ hello.go
main.go

### helloパッケージ内の処理をmain.goで呼び出す

“`
package main

import “Fyne01/Lesson1/hello”

func main() {
hello.Hello()
}
“`
Goで宣言できるパッケージは1つだけなので、他言語のようにいくつもパッケージで呼び出すことはできない。
代わりにimportを使って呼び出す。

元記事を表示

Goでマイグレーションしようした時の構造体のタイポによるエラー

## 構造体の定義

“`go
type Shop struct {
ID uint `json:”id” gorm:”primaryKey”`
ShopName string `json:”shopname” gorm:”not null”`
Place string `json:”place”`
Location float64 `json:”location”`
Price uint `json:”price”`
Tag string `json:”tag”`
CreatedAt time.Time `json:”created_at”`
UpdatedAt time.Time `json:”updated_at”`
User User `json:”user” gorm:”foreignKey:UserID; constraint:OnDelete:CASCADE”`
UserId uint `json:”userid”`
}
“`

元記事を表示

Ginフレームワークのバインディングとバリデーションを試してみる

# はじめに

Go言語+GinフレームワークでAPIを作成するにあたり、リクエストの形式がJSONのときに構造体へのバインドとバリデーションチェックを行う仕組みを試してみます。

https://gin-gonic.com/ja/docs/examples/binding-and-validation/

# 実行条件

“`shell
Golang v1.22.3
Gin v1.10.0
air v1.52.0

“`

# ディレクトリ構成

“`shell
.
├── .air.toml
├── Dockerfile
├── docker-compose.yml
├── go.mod
├── go.sum
├── main.go
└── tmp
“`

# 検証

`main.go`の中身はこんな感じ

“`golang:main.go
package main

import (
“github.com/gin-gonic/gin”
“net/http”
)

type JsonRequest struct {
Id int `binding

元記事を表示

VSCodeでGO+air+delveのDocker環境をリモートデバッグしよう!

## 概要
VSCodeを使ってGO、air、delveのDocker環境をリモートデバッグする方法について解説します

## 前提
– WebフレームワークはGinを使用
– ORMはPrismaを使用
– GO 1.21を使用

## ディレクトリ構成
“`
tree
.
├── .env
├── .gitignore
├── Makefile
├── README.md
├── application
│ ├── .air.toml
│ ├── .vscode
│ │ └── launch.json
│ ├── config
│ ├── controllers
│ ├── go.mod
│ ├── go.sum
│ ├── main.go
│ ├── prisma
│ ├── routes
│ ├── serializers
│ └── services
├── containers
│ ├── go
│ │ ├── Dockerfile
│ │ └── Dockerfile.debug
│ └── p

元記事を表示

CDK×Lambda×golang×Dynamoでアプリを作ってみる DynamoDB処理のLambda実装編PUT&DELETE(第五回)

さて、今回は更新と削除のメソッドを作成していきたいと思います!
とは言っても構造体などはgetItemやputItemに似ているので非常に分かりやすかったです。

とりあえず全体像は以下の通りになります。
“`
package main

import (
“encoding/json”
“net/http”

“github.com/aws/aws-lambda-go/events”
“github.com/aws/aws-lambda-go/lambda”
“github.com/aws/aws-sdk-go/aws”
“github.com/aws/aws-sdk-go/aws/session”
“github.com/aws/aws-sdk-go/service/dynamodb”
“github.com/aws/aws-sdk-go/service/dynamodb/dynamodbattribute”
)

var (
tableName = “MyDynamoDB”
dynamoDb = dynamodb.New(session.Must(sess

元記事を表示

Go + Reactでアプリを作成してみた【認証付Realtime Chat】

## Go Realtime Chat applicationのデータベース設定と認証エンドポイントの実装

(1) postgres image from docker hub
– create the go-chat database

(2) database setup
– make a connection to the db
– add a db migration file to create the `user` tabele

(3) /signup endpoint to create a new user
– repository ← service ← handler(dependencies)

(4) /login & /logout endpoint
– jwt with http-only cookie(prone to csrt attacks)
– vs.token-based authetication(prone to xss attacks)
– best:short-lived access token + refresh token

##

元記事を表示

GORMライブラリのアソシエーションを試してみる

# はじめに

Go言語およびGORMライブラリの初学者である私は、ドキュメントを見ても部分的な情報だけではイマイチ使い方が把握できませんでした。
ですので、実際に書いて理解した内容を備忘録として載せておきます。

今回は次のアソシエーションを試してみました。

– belongs to(多対1 または 1対1)
– has one(1対1)
– has many(1対多)
– many to many(多対多)

https://go.dev/

https://gorm.io/ja_JP/

https://gorm.io/ja_JP/docs/belongs_to.html

https://gorm.io/ja_JP/docs/has_one.html

https://gorm.io/ja_JP/docs/has_many.html

https://gorm.io/ja_JP/docs/many_to_many.html

# 検証環境

今回は実行結果をJson形式で確認したかったので、Go+Gin+GORMの構成で進めます。
開発環境の構築は以下を利用しています。

h

元記事を表示

How to do Data Serialization and Deserialization in Golang

> Exciting News! Our blog has a new **[Home!](https://canopas.com/blog)** 🚀

## Background

Background
Serialization and deserialization are essential processes in modern software development, enabling data to be efficiently transported and stored.

In Go (Golang), these processes are straightforward. Thanks to its robust standard library and the availability of third-party packages.

In this blog post, we will delve into the basics of serialization and deserialization in Go, covering popular fo

元記事を表示

Go言語での開発におけるMVCモデルについて考えてみる

# はじめに

今回はGo言語での開発におけるMVCモデルについて考えてみました。

[過去記事](https://qiita.com/sedori/items/ba7b825876d906ae2aa1)で作成したプロジェクトをMVCモデルに置き換えてみます。

### MVCとは
Model, View, Controllerの頭文字を取ってMVCです。
Modelはビジネスロジックを担当し、ViewはHTMLなどユーザーが確認できる部分を担当し、ControllerはModelとViewの橋渡しを担当します。

https://ja.wikipedia.org/wiki/Model_View_Controller

# 検証環境

構成について考えるにあたり、過去の記事をベースに進めます。

https://qiita.com/sedori/items/ba7b825876d906ae2aa1

ただし、今回は構成を見直すにあたって必然的にソースの改修も行っているので、参考になるのはGo開発環境の構築までかもしれません。

ですので、ひとまずはGo-Gin-GORM開発環境を作

元記事を表示

Go (Gin Web)でサーバーキャッシュを扱う

# Go (Gin Web)でサーバーキャッシュを扱う
Goでサーバーキャッシュを扱うときの方法を簡単にまとめます。
大規模のトラフィックを捌くときにお役に立てばと思います。
フレームワークはGin Webを利用する想定です。

## main.goでキャッシュの接続を記述
“`go:main.go
package main

import (
“os”
“time”
“tkol-lite/controllers”
“tkol-lite/models”
“tkol-lite/services”

“github.com/gin-contrib/cors”
“github.com/gin-gonic/gin”
)

func main() {

os.Setenv(“TZ”, “UTC”) // タイムゾーンの設定
r := gin.Default()

r.Use(cors.New(cors.Config{

AllowOrigins: []string{ // アクセスを許可したいアクセス元
“http://example.com”,
},

元記事を表示

prisma-client-goを使ったDocker環境の構築から初期設定、テストデータ投入、接続、使用法まで徹底解説!

## 概要
GOのDocker環境を使ったPrismaの
– 初期設定
– テストデータ作成と投入
– Prisma Clientとの接続
– Prismaの使用(今回は一覧表示APIを作成しながら解説します)

方法について解説します

## 前提
– フレームワークはGinを使用します
– DBはPostgresを使用します

## ディレクトリ構成
“`
tree
.
├── .env
├── .gitignore
├── README.md
├── application
│ ├── config
│ │ ├── database.go
│ │ └── passwordManagement.go
│ ├── controllers.go
│ ├── go.mod
│ ├── go.sum
│ ├── main.go
│ ├── prisma
│ │ ├── schema.prisma
│ │ └── seed.go
│ ├── routes.go
│ ├── services.go
├── containers

元記事を表示

Go開発環境でJWTの導入

# はじめに
今回はGo言語で作ったAPIにJWTを実装していきます。
要素検証のみのため簡単な構成で進めます。

### JWTとは
JSON Web Tokenの頭文字を取ってJWT(ジョットと読む)と呼びます。
これは情報を安全に送受信するためのオープンスタンダード(RFC 7519)です。短くてコンパクトなJWTは、HTTPヘッダーやクエリストリングで確実に情報を送ったり、受け取ったりすることが可能です。主にユーザー認証や情報交換のために使われます。JWTは「ヘッダー」「ペイロード」「シグネチャー」の3部分で構成されており、それぞれがBase64Urlでエンコードされています。

詳しくはこちら。

https://ja.wikipedia.org/wiki/JSON_Web_Token

# 検証環境

こちらの記事で構築した環境を利用しました。

https://qiita.com/sedori/items/fee189944293cd9c72c5

# 前提条件

ログイン機能の実装が完了しており、次のコマンドでログイン用のアカウントが作成されていることを前提としています

元記事を表示

CDK×Lambda×golang×Dynamoでアプリを作ってみる DynamoDB処理のLambda実装編GET&POST(第四回)

さて、今回は以下のようにファイルを記述してAPIGatewayで用意したエンドポイントへアクセスし、DynamoDBのレコードを作成&取得できるようにしていきます。長くなってしまうので今回はGETとPOSTをまずは作成し、次回更新と削除を実装していきたいと思います。

いつも通り詳しい解説をしていきます。
“`lambda/dynamoDBHandler/main.go
package main

import (
“github.com/aws/aws-lambda-go/events”
“github.com/aws/aws-lambda-go/lambda”
“github.com/aws/aws-sdk-go/aws”
“github.com/aws/aws-sdk-go/aws/session”
“github.com/aws/aws-sdk-go/service/dynamodb”
“github.com/aws/aws-sdk-go/service/dynamodb/dynamodbattribute”
“encoding/json”
“net/http

元記事を表示

【もしかして】APIテストの事例ってあんまりない😨【えっ!?】

## はじめに

多くの方が、E2Eテストと聞くとフロントの画面のテストを思いつくと思いますが、今回は、バックエンドのE2Eテストについてやってこと、調べたこと、導入してみての結果を書いていこうと思います。

よろしければ、最後までお読みください!
そして、いいね❤️もよろしくお願いいたします!

## 対象読者

– 急にAPIのE2Eテストのタスクが降ってきた方
– バックエンドエンジニア
– Scenarigoに興味ある方

## TL;DR

– APIテストに **scenarigo** オススメ
– aws sigv4を突破するのにproxyという選択もある

**以上**

## 今回導入するシステム

– とある業務DX系SaaS

### 雑な構成と今回のテスト範囲は以下の通り

よくある、っていうか個人開発でも使われるような **The Serverless** な構成
テスト範囲は、クライアントからAPIGateway → ECS → RDSの環境で期待するAPIの

元記事を表示

Go言語でログイン機能を実装してみた

# はじめに

Go言語で簡単なログイン機能(サインアップ、サインイン)を実装したときのお話
今回も要素検証だけですので、単純構成で作っています

# 検証環境

こちらの記事で構築した環境を利用しました。

https://qiita.com/sedori/items/840e39a0cbf9d5bff006

# ディレクトリ構成

“`shell
go-gin-gorm
├── tmp
├── .air.toml
├── docker-compose.yml
├── Dockerfile
├── go.mod
├── go.sum
├── libraries
│ └ crypto.go
└── main.go
“`

# 実行条件

“`shell
Golang v1.22.3
Gin v1.10.0
GORM v1.25.10
MySQL 8.0.29
“`

# ログイン機能の実装

~~サインインを確認するために実装した~~サインアップとサインインの実装例を以下で示します。

### パスワードの暗号化

暗号化にはbcryptを使用しています。
bcr

元記事を表示

gRPCの通信をGo(サーバー)とNode.js(クライアント)で実装してみる。

# Go言語を勉強してみる。
JavascriptとかPHPとか自分がよく知っている言語以外で、あたらしいモノに触れてないなと思い、今になってGoogleが開発したというGoに触れてみている。いろいろ調べていく中でおなじくGoogleが開発したというgRPCというのが出てきたので、どんなものか自分でも実装してみる。

サーバー/クライアントともGo(あるいはNode.js)という記事はいくつかあったが、違うサービス間で通信してるっぽくなるように、あえて違う言語で試した。

Nodeは元からホストにインストールしていたものの、Goはインストールしてなかったので、ここではDockerコンテナを用意した。

# 全体の構成

Dockerコンテナ側に配置するサーバープログラム。

“`
root/
├─docker-compose.yml
├─Dockerfile
├─.env
└─src/
├─go.mod
└─gRPC/
├─grpc_sample/
├─server.go
└─ex.proto
“`

ホスト側に配置

元記事を表示

OTHERカテゴリの最新記事