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

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

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

元記事を表示

Go + Svelteでアプリを作成してみた【Todo List】

## Goモジュールを初期化
“`
mkdir myproject
cd myproject
go mod init github.com/username/projectname
“`

## Router Setup and CRUD Operations

①main.goを作成する

“`main.go

“`
“`
go get github.com/gofiber/fiber/v2

②air.tomlを作成する
“`
touch air.toml
go install github.com/cosmtrek/air@latest
“`

“`air.toml

“`
“`
air
go get github.com/joho/godotenv
“`

③.envを作成する

“`
touch .env

“`

“`.env

“`

④.gitignoreを作成する

“`
touch .gitignore
“`

“`

“`

## 参考サイト
[Go and React Full Stack App – Go T

元記事を表示

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
“`

ホスト側に配置

元記事を表示

Borgoを使ってRust風のコードからGoのコードを生成する

[Borgo](https://github.com/borgo-lang/borgo) というプログラミング言語を使ってみました。

Borgo は Go のトランスパイラで、JavaScript に対する TypeScript のような位置付けのものですが、Go の構文拡張ではなく Rust に似た構文を採用している点が特徴です。

Go の型まわりやエラーハンドリングの不満点を解決するためのものだと思われますが、現時点(2024-05-26 時点)では考慮不足や不備が散見され、まだまだ完成度は低そうでした。

また、あくまでも Rust 風の構文のため、Rust と微妙に違っていたりもします。

# 準備

まず、Borgo のコンパイラを使えるようにします。

現時点でビルド済みバイナリの配布は見当たらなかったため、github からソースコードを取得してビルドしました。

Borgo コンパイラ自体は Rust で実装されており容易にビルドできます。

“`sh:ソースコードの取得
$ git clone https://github.com/borgo-lang/borg

元記事を表示

GoとGinでRESTful APIを開発する

:::note info
この記事は、Goの公式が提供している、**Tutorial: Developing a RESTful API with Go and Gin** を日本語に訳したものです。
:::

https://go.dev/doc/tutorial/web-service-gin

# Tutorial: Developing a RESTful API with Go and Gin

このチュートリアルでは、Goと[Gin Web Framework](https://gin-gonic.com/docs/)(Gin)を使ってRESTfulなWebサービスAPIを書く基本を紹介します。

Ginは、Webサービスを含むWebアプリケーションの構築に関連する多くのコーディング作業を簡素化します。このチュートリアルでは、Ginを使ってリクエストをルーティングし、リクエストの詳細を取得し、レスポンス用のJSONをマーシャルします。

このチュートリアルでは、2つのエンドポイントを持つRESTful APIサーバーを構築します。サンプルプロジェクトは、ビンテージジャズのレ

元記事を表示

goでプロジェクトを立ち上げる:hello, world!

### Go言語のインストール
Goの公式サイトからインストーラをダウンロードし、インストールする。
### プロジェクトのディレクトリを作成:
作業したい場所にプロジェクト用のディレクトリを作成する。
“`shell:zsh
% mkdir go_sample && cd go_sample
“`
### Go Modulesの初期化
プロジェクトディレクトリ内で以下のコマンドを実行し、モジュールを初期化する。
“`shell:zsh
% go mod init go_sample
“`
% プログラムの作成
main.go ファイルを作成し、基本的なプログラムを記述する。
“`go:main.go
package main

import “fmt”

func main() {
fmt.Println(“Hello, World!”)
}
“`
### ビルドと実行
プロジェクトディレクトリで以下のコマンドを実行し、プログラムをビルドして実行する。
“`shell:zsh
go build
# 生成されたバイナリファイルを実行
./go_sample
“`

元記事を表示

Golang+Reactでアプリを作成してみた【Realtime Chat App】

## Technology used
golang
goroutines
websockets
webserver
channels

Frontend
react

## backendを作成

①backendディレクトリとmain.jsを作成
“`
# バックエンド用のディレクトリを作成
mkdir backend
touch main.go
cd backend
go mod init chatapplication
go get github.com/gorilla/websocket
go run main.go
“`
②main.goを作成する

“`backend/main.js
package main

import (
customwebsocket “chatapplication/websocket”
“log”
“net/http”
)

func serverWs(pool *customwebsocket.Pool,w http.ResponseWriter, r *http.Request) {
log.Println(“This

元記事を表示

OTHERカテゴリの最新記事