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

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

jwtトークンについて調べてみた

## jwt(ジェット)とは

JWT(JSON Web Token)認証は、JSON形式のトークンを使用してユーザーの認証と情報の伝達を行う仕組み。セッション管理や認可に使用されている。jwtトークン自体に署名がついているので内容が改竄されていないかを検証できる。

## jwtのメリット

– サイズが小さいのでHTTPヘッダーに格納できる
– ペイロードにはユーザーに関する必要な情報がすべて含まれているので何度もDBに問い合わせなくても認証ができる
– Json形式なので、多くの言語でパースやマッピングがサポートされており、使いやすい

## jwtの構造

jetは以下の3つの要素で構成されている。

1. ヘッダー(Header)
1. ペイロード(Payload)
1. 署名(Signature)

上記3つの要素をそれぞれハッシュ化したものを`.`で連結したものがjwtトークンと呼ばれる文字列になる。

以下のサイトでイメージを確認できる。
https://jwt.io/

### ヘッダー

ヘッダーにはハッシュ化に使用するアルゴリズム情報やトークンのタイプなどの情報が

元記事を表示

【Go Echo】PostgreSQLにおけるマイグレーション管理

# はじめに

今回は、Goの強力なWebフレームワーク「Echo」を使用して、PostgreSQLをバックエンドとするAPIサーバーを構築し、`golang-migrate/migrate`を用いてデータベースのマイグレーションを管理する方法をご紹介します。

## 前提条件

以下のツールと環境がインストールされていることを確認してください。

– **Go**: [公式サイト](https://golang.org/doc/install)からインストール
– **PostgreSQL**: [公式サイト](https://www.postgresql.org/download/)からインストールし、データベースを作成済み
– **migrate CLI**: [インストール手順](https://github.com/golang-migrate/migrate/tree/master/cmd/migrate)に従ってインストール

## ステップ1: プロジェクトのセットアップ

まず、プロジェクトのディレクトリを作成し、必要なパッケージをインストールします。

`

元記事を表示

【個人開発】財務諸表データを速攻で確認できるアプリをリリースした

# 目次
– 財務諸表って見たことあります?
– 財務諸表検索アプリ「Compass」の技術スタック、構成の紹介
– 最後に

# 財務諸表って見たことあります?
 みなさん、企業の財務諸表を見たことはありますか?

 財務諸表とは企業の財務状況や経営成績をまとめた書類のことで、企業の1年間の「健康診断書」や「成績表」とも呼ばれています。

 財務諸表の中でも貸借対照表(B/S)、損益計算書(P/L)、キャッシュ・フロー計算書(C/F)は「財務三表」と呼ばれ、特に重要な書類とされています。

 …という説明をどこかで見たり聞いたりしたことはあるけれど、実際に財務諸表を見ようと思うと、企業のホームページに行って決算用のページに行って時には書類をダウンロードして…となかなか手間がかかります。

 そこで、財務諸表のデータを簡単に検索できるアプリ「Compass(コンパス)」を作りました!ユーザを企業の世界へと導いていく道しるべ(コンパス)になってほしいという願いと、企業(Company)へのパス(pass)になってほしいという願いを合わせて「Compass」と名付けました。

 

元記事を表示

【Go Echo】CSRF対策 + JWT認証

# はじめに

前回の記事では、[Golang EchoフレームワークでJWT認証を実装する方法
](https://qiita.com/syukan3/items/d8f0d900a0926604f090)について解説しました。

今回は、このアプリケーションに**CSRF(Cross-Site Request Forgery)対策**を追加し、セキュリティをさらに強化する方法を紹介します。

## CSRFとは?

**CSRF(クロスサイトリクエストフォージェリ)** は、ユーザーが意図しないリクエストを第三者が送信させる攻撃手法です。

これを防ぐために、**CSRFトークン** を用いてリクエストの正当性を検証します。

## 追加する機能の概要

1. **CSRFミドルウェアの設定**
2. **CSRFトークン取得用エンドポイントの追加**
3. **クライアント側でのトークン送信**

## 1. CSRFミドルウェアの設定

EchoにはCSRF対策用のミドルウェアが用意されています。`server.go`に以下の設定を追加します。

“`go
import (

元記事を表示

Golangの入門(最低限これくらいは知っておいた方がいい)

# 有益Udemy
全部は紹介しきれないので

https://www.udemy.com/course/golang-webgosql/?couponCode=24T4MT90924B

# 公式ドキュメント

https://pkg.go.dev/std

# Goのメリット
GoはRailsとかと比べたら軽量なので、企業で導入されることケース多いです。
Railsとかだとマイクロサービスの立ち上げがありますが、かなり容量やパフォーマンスなどがヘビーみたいです。
だからGoで作ろう、またはリプレースしようってなるみたいです。

またブロックチェーンの現場など最先端の現場で使われることが多いです。

# Goのデメリット
GoはRailsやLaravelみたいにコマンド1発でファイルができるとかではないです。
ライブラリ選定など1から組まなけれ䜀ならない䛾で、ボイラーテンプレートがあれば効率的に立

# 環境構築(Mac)
今回はMacで環境構築をやっていきます。

“`
brew install go
“`

– バージョン確認
“`
$ go version
go ver

元記事を表示

Goでのテストソースの書き方

### 概要

Go言語で、JavaのJUnitなどのようにプログラムを書いてテストを行う方法

### Goのテストソースのルール

①testingパッケージを利用する

“`
package test
“`

②テスト対象のファイルとテストファイルを同じディレクトリに配置する
③テストファイルのファイル名は
「テスト対象のファイル名_test.go」とする。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3926100/805b8ec8-0a61-6bd7-81e0-b314bcbce2bb.png)

④テストの実行には「go test」コマンドやテストオプションを使う
以下の例ではテストの詳細を表示する-vオプションを使っている

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3926100/df5a8a69-f922-e56d-1a20-a2d565720bbb.png)

元記事を表示

高速・軽量なGoフレームワークGinの魅力とセットアップガイド

## はじめに
Ginは、Go言語で作られた高速かつ軽量なWebフレームワークで、特にAPI開発に強みを持っています。本記事では、Ginの特徴やおすすめの利用シーンについて説明し、その後、実際にアプリケーションを構築する基本的なセットアップ手順をご紹介します。

## Ginとは?その魅力と特徴
Ginは、高速なレスポンスを必要とするサービスや、API開発に特化したシンプルな構文を提供するフレームワークです。以下が主な特徴です。

### 高速かつ軽量
Ginは、C言語で実装されたhttprouterをベースにしており、パフォーマンスが非常に高いです。大量のリクエストを処理するサービスに適しています。

### API開発のための機能が充実
JSONレスポンスの生成が簡単にでき、RESTful APIを素早く実装可能です。また、バリデーションやパラメータのバインディングなどの機能もサポートしています。

### シンプルで直感的な構文
Ginのコードは読みやすく、Goの初心者でも比較的簡単に学ぶことができます。

### ミドルウェア対応
Ginでは、ロギング、エラーハンドリング、認証

元記事を表示

【Go言語】Ginでログイン認証を実装する

## はじめに
今回は、Go言語のWebフレームワーク「Gin」を用いてログイン認証を実装していこうと思います。
本記事では、エンドポイントの構築、JWT(JSON Web Token)による認証、MySQLデータベースとの連携方法について詳しく説明します。
まずは基本的なセットアップから始め、順を追って実装していきましょう!

## 環境
・MacBook Air M1

## 使用技術
– VScode
– Go
– バージョンは1.23.2を使用
– [Gin](https://github.com/gin-gonic/gin)
– Go言語のWebフレームワーク
– MySQL
– 認証情報を MySQL データベースに保存しようと思います
– `mysql`コマンドが使える状態にしておいてください
– Docker
– Dockerを使ってMySQLを用意します
– `docker`コマンドが使える状態にしておいてください
– [Postman](https://www.postman.com/downloads/)

元記事を表示

initial-go-github-actions

## 初めまして

hashi_03と申します。
GitHubはこちら: [https://github.com/db-r-hashimoto](https://github.com/db-r-hashimoto)

## 初めてのGoでのGitHub Action開発 – lgtm_print

GitHubのPull RequestやIssueのコメントに “LGTM” と記載があった場合、自動でランダムなLGTM画像を追加するカスタムアクション「lgtm_print」を開発しました。
開発の過程で学んだことや実装の工夫について紹介します。

ちなみに記事のベースはChatGPTに書かせています。生成AIっぽいなという表現はご了承ください。

実装したカスタムアクションは[こちら](https://github.com/db-r-hashimoto/lgtm_print)

## 背景

GitHubのIssueやPR上で「LGTM (Looks Good To Me)」という表現が使われることが多いため、最近仕事でよく作ってるGitHub Actionsを使ってLGTM画像を投

元記事を表示

Go PostgreSQLの数値型チートシート

# 概要
GoとPostgreSQLで開発を行っている際に、双方の数値型に混乱することが多々あり、せっかくなのでまとめたものを公開します。

# 型の対比

|PostgreSQLの
数値型|Goの
数値型|説明|範囲|
|:-:|:-:|:-:|:-:|
|smallint|int16|16-bit、2バイト|-32768~32767|
|integer|int32|32-bit、4バイト|-2147483648
~2147483647|
|bigint|int64|64-bit、8バイト|-9223372036854775808
~9223372036854775807|
|decimal|string|可変長
ユーザ指定精度
正確|小数点前: 131072桁
小数点以降:16383桁|
|numeric|string|可変長
ユーザ指定精度
正確|小数点前: 131072桁
小数点以降:16383桁|
|real|float64|64-bit、不正確|6桁精度|
|double precision|float64|64-

元記事を表示

Goで基本的なアルゴリズム書いてみた

## 概要

基本的なアルゴリズムをGoで書いてみた。

また書いたら追記していく。

## 線形探索

“`go
func LinearSearch(array []int, target int) int {
for i, v := range array {
if v == target {
return i
}
}
return -1
}
“`

## バブルソート

“`go
// 昇順
func BubbleAscSort(array []int) []int {
n := len(array)
for i := 0; i < n-1; i++ { for j := 0; j < n-1-i; j++ { if array[j] > array[j+1] {
tmp := array[j]
array[j] = array[j+1]
array[j+1] = tmp
}
}
}
return array
}

// 降順
func BubbleDescSort(array []in

元記事を表示

Go言語でSIGMAのハンズオン(Software Designの記事)をやってみた

# はじめに

SIGMAはログ分析のためのシグネチャーフォーマットです。ログからサイバー攻撃の形跡を見つけるための検索方法を特定のSIEMなどの環境に依存しない形式で記述できるものです。

https://sigmahq.io

この解説が「Software Design」の2024年11月号

https://gihyo.jp/magazine/SD/archive/2024/202411

に掲載されていました。(P158)

この中で紹介されているハンズオンをGo言語で試してみた時の記録です。

# sigma-goパッケージ

Go言語でSIGMAを扱うパケージは2つ見つかりました。今回使ったのはsigma-go

https://github.com/bradleyjkemp/sigma-go

です。

# ハンズオン#1 Windows whoami検知

Windowsの環境で

“`terminal
>whoami /priv
“`
というコマンドを実行したことを検知するハンズオンです。
Aurora Liteという商用EDRの無償版で試していますが、これをGO

元記事を表示

【Go】 make と new の違い

Go言語では、データを初期化するために`make`と`new`という2つの異なる関数が用意されています。これらは似たような役割を持つように見えますが、実際には異なる目的と使用方法があります。
#### 1. `new`関数

– **基本的な役割**: `new`は任意の型のゼロ値を持つポインタを生成します。
– **使い方**: 例えば、`new(int)`とすると、整数型のゼロ値(0)を持つポインタが作成されます。
– **具体例**:
“`go
var num *int = new(int) // int型のポインタを作成
fmt.Println(*num) // 0が出力される
*num = 42 // ポインタを通じて値を変更
fmt.Println(*num) // 42が出力される
“`

#### 2. `make`関数

– **基本的な役割**: `make`はスライス、マップ、チャネルを初期化するために使用されます。これらのデータ構造には内部状態があり、`make`を使うこと

元記事を表示

sqlcでトランザクションのロールバックエラーを適切に処理する方法

## 背景
sqlcでトランザクションを使うことについて、公式ドキュメントを見ていると、少し気になるところがあったので、自分なりにコードを改善してみました。

https://docs.sqlc.dev/en/stable/howto/transactions.html

## 公式のコード

“`go
func bumpCounter(ctx context.Context, db *sql.DB, queries *tutorial.Queries, id int32) error {
tx, err := db.Begin()
if err != nil {
return err
}
defer tx.Rollback()
qtx := queries.WithTx(tx)
r, err := qtx.GetRecord(ctx, id)
if err != nil {
return err
}
if err := qtx.UpdateRecord(ctx, tutorial.UpdateRecordParams{
ID: r.ID,

元記事を表示

Next.js,Go言語で作るモダンTODOアプリ

# Next.js,Goを使ってモダンTodoアプリを作っていく
初学者が一度は作るであろうTodoアプリ。最近Go言語を勉強しているので、学習用に作ってみました。
## なぜNext.jsとGoなのか
### Next.jsについて
近年のWeb開発のフロントエンドではNext.js×TypeScriptが主流になっている気がするので、改めてNext.jsの利点を整理してみました。

・SSR(サーバーサイドレンダリング)やSSG(静的サイト生成)によって検索エンジン最適化(SEO)とページロードの高速化を同時に実現できる。

・Next.jsにはファイルベースのルーティングや簡単にAPIルートを追加できる仕組みがあり、開発効率を大幅に向上させることができる。

### Goについて
バックエンドの言語はPython,PHP,Ruby,Node.js,Rust,Goなど様々な選択肢がありますが、なぜそのプログラミング言語を使うのか、について言及した記事が少ないと感じたのでこちらもGoの利点を整理します。

・Goはコンパイル言語であるため、他のインタプリタ型言語に比べて高速に動作し、

元記事を表示

openapi-generator-cli を使って生成したコードを使ってリクエストとレスポンスに使う

# openapi-generator-cli とは?

[openapi-generator-cli](https://github.com/OpenAPITools/openapi-generator-cli)は、OpenAPIで書かれた仕様書からコードを生成するものです。

特にGo言語用というわけではなく、WebApplicationFrameworkに従ったコードも生成してくれます。どんな言語、Frameworkに対応しているかは、[READMEのOverview](https://github.com/OpenAPITools/openapi-generator?tab=readme-ov-file#overview)を見てみると良いでしょう。Perlもありますね(ないと思ってた)。

今回、WebApplicationFrameworkに[Fiber](https://gofiber.io/)を使ったのですが、残念ながら、Fiberには対応していません。ですが、生成したコードを使うことは出来ます。

## openapi-cli-generatorを動かす

今回は、Do

元記事を表示

Go言語のlogパッケージまとめ

# はじめに
個人開発の中で、Goの`log`パッケージを使用する機会があったので、それぞれの関数の使用用途を以下にまとめてみました。

## log パッケージの主要な関数と使用用途

### log.Println
– **用途**: 一般的な情報メッセージをログに出力するのに使います。改行を含むメッセージを出力します。
– **例**:
“`go
log.Println(“This is an informational message.”)
“`

### log.Printf
– **用途**: フォーマットされたログメッセージを出力するのに使います。`fmt.Printf`と同様のフォーマット指定子が使えます。
– **例**:
“`go
log.Printf(“This is a formatted message: %s”, “Hello, World!”)
“`

### log.Fatal
– **用途**: 重大なエラーメッセージをログに出力し、プログラムを終了するのに使います。出力後、`os.Exit(1)

元記事を表示

#4.初めてのGo言語

# はじめに
こんにちは~nayaaaaです。
今回はGoを使ってHello,worldの出力をさせてみたので復習としてブログに書いてみました。
筆者がGo初心者なので内容は初心者向けの内容になります。

# 実行環境
OS:AmazonLinux2
Go:go1.23.2

# Goの環境を設定する

👇こちらで最新版のリンクをコピー

https://go.dev/dl/

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3904736/b683a025-1339-c8e1-c77c-0ae98c117185.png)

私の環境がLinuxなのでLinuxの最新バージョンをコピーしてwgetなどでダウンロードします。

“`
$ wget https://go.dev/dl/go1.23.2.linux-amd64.tar.gz
$ tar -zxf go1.23.2.linux-amd64.tar.gz
“`
ダウンロードして展開をします。ちなみに今回は`go1.23.2`を使

元記事を表示

【Go Echo】Swaggerチュートリアル

# 【Go Echo】Swaggerチュートリアル

このチュートリアルでは、GoのEchoフレームワークを使用してCRUD APIサーバーを構築し、Swaggerを用いてAPIドキュメントを生成する手順を説明します。
また、Swaggerアノテーションの詳細な解説も後半で行います。

## 前提条件

– Goがインストールされていること
– 基本的なGoの知識があること

## 1. プロジェクトのセットアップ

まず、プロジェクト用のディレクトリを作成し、初期化します。

“`bash
mkdir echo-swagger-crud
cd echo-swagger-crud
go mod init github.com/yourusername/echo-swagger-crud
“`

## 2. 必要なパッケージのインストール

EchoフレームワークとSwaggerツールをインストールします。

“`bash
go get github.com/labstack/echo/v4
go get github.com/swaggo/echo-swagger
go get

元記事を表示

ToDoアプリの作成(Task編)

はじめに

今回は,前回に続きタスクの取得、特定のIDのタスクを取得、タスクの新規作成、更新、削除機能を実装していきます。

https://qiita.com/sawadashinji0526/items/7492f19b868833cab343

※動作確認にpgAdminとPostmanを使います。

リポジトリの実装

このコードは、タスク情報を扱うためのリポジトリインターフェースと、そのインターフェースを実装する具体的なリポジトリ構造体を定義しています。

“`repository/task_repository.go
package repository

import (
“fmt”
“go-rest-api/model”

“gorm.io/gorm”
“gorm.io/gorm/clause”
)

type ITaskRepository interface {
//ユーザーのすべてのタスクを取得するメソッドです。
GetAllTasks(tasks *[]model.Task, userId ui

元記事を表示

OTHERカテゴリの最新記事