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

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

3年の技術負債を解消するため、サービス全てをリプレイスし生産性とUXが爆上がりした話(第一弾)

## はじめに

![1716284384027 (2).png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3796131/d920af3b-f194-2cb2-5316-c47057dd1d79.png)

こんにちは!
株式会社BlankrでTechLeadをしている原田です。

弊社では、『[ライドリ](https://rideo.jp)』というクリエイターの活動を支援するプラットフォームを運営しています。

2021年からライドリの前身となるサービスの運用を開始し、「オンライン握手会」「SNS」「ファンクラブ」機能など、様々な機能の追加を行ってきました。

今回は、サービス開始から3年が経過した2023年に、メンバー3名で1年かけてサービスを全てリプレイスしたことについて紹介します。

リプレイス後、チームの生産性が向上・バグの問い合わせ数が減少・ページの読み込み速度が向上するなど、様々な効果が得られました。

ぜひ最後までご覧いただけたらと思います。

## 目次

– [はじめに](#はじめに

元記事を表示

How to use Enums in Golang

## Background

Imagine you’re building a Todo application using Go. Each task in your application has a status associated with it, indicating whether it’s **“completed”**, **“archived”** or **“deleted”**.

As a developer, you want to ensure that only valid status values are accepted when creating or updating tasks via your API endpoints. Additionally, you want to provide clear error messages to users if they attempt to set an invalid status apart from the valid ones.

**_Of course, you will sa

元記事を表示

golang

golangを全く知らない状態から学習しましたので、それに自分のコメントをつけたメモです。
今回は以下の3つのUdemy講座を視聴しました。どれも分かりやすい講座でした。一部goのバージョンによってはうまくいかない講座もあるのでその場合は適宜調整が必要です。(そこまで大きな調整ではありませんので、大丈夫だと思います。)

https://www.udemy.com/course/golang_concurrency/learn/lecture/36733674?start=45#questions
https://www.udemy.com/course/go-fintech/learn/lecture/12058826?start=0#questions
https://www.udemy.com/course/bitcoin-lambda-golang/learn/lecture/24927994?start=15#questions

golang学習の定番サイトであるa tour of goは今回学習せずに受講しましたが、他のプログラミング言語を触った経験のある人は一部を除き理

元記事を表示

[Golang]Testcontainersを使ってElasticsearchの単体テストを実装する

## 本記事でやること
– [Testcontainers](https://testcontainers.com/)を使ってElasticsearchに対するテスト環境を構築する
– テスト時に用いるElasticsearchのインデックスを作成するフィクスチャを実装する
– Elasticsearchに検索リクエストを実行するメソッドの単体テストを実装する

## 対象読者
– Elasticsearchへのアクセス周りの単体テストに興味がある人
– Testcontainersを使ってみたい人

## 使用言語/ライブラリ
– Go 1.22.2
– [go-elasticsearch](https://github.com/elastic/go-elasticsearch)
– [testcontainers-go](https://github.com/testcontainers/testcontainers-go)

## 背景
データベースに依存した単体テストを実装する際、該当のデータベースの振る舞いを模倣したテストダブルを用いることがよくあります。

ただ、この方法

元記事を表示

【Go言語】スライスとポインタ

# はじめに

Goのスライスを使う上での注意点をよく忘れるので、自分でまとめました。appendやcopyなどを何も考えずに行うと、メモリリークが起きたり、意図しない動作になる可能性があります。また、v1.21以降では、slicesパッケージが追加されたので、そちらについても少し触れております。

# 例題

さて、突然ですが以下のコードを実行するとどうなると思いますか?

“`go:sample1
func main() {
slice1 := make([]int, 0, 5)
slice2 := slice1
for i := 0; i < 10; i++ { slice1 = append(slice1, i) slice2 = append(slice2, i+100) } fmt.Println("slice1 =", slice1) fmt.Println("slice2 =", slice2) } ``` [Go Playground](https://go.dev/play/p/gVXo9n1FPBB) 実行すると、以下のような結果になりま

元記事を表示

ローカルのDockerコンテナをEC2へデプロイしてみる

## やりたいこと
ローカルで構築したDockerコンテナをEC2上にデプロイして実行する

## 材料
* EC2
* FSx for windows
* Docker
* Amazon Elastic Container Registry (ECR)
* ローカルGo環境
* AWS CLI

## レシピ

### 1.AWS CLIをインストール

“`
# 例:Macでhomebrewを使用
% brew install awscli
“`

### 2.EC2を作成
![スクリーンショット 2024-05-18 11.01.21.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/17764/db88bfdc-cea0-f680-a429-cfb8551c59d8.png)

キーペアを作成した場合はダウンロードしたpemファイルのパーミッションを変更
(ローカル環境)
“`
% chmod 400 keypar.pem
“`

### 3.必要なパッケージをインストール
(EC2)

`

元記事を表示

Go言語学習記録

## はじめに
昨年Go言語を習得しました.この記事では私がどのようにGo言語を習得したのか,参考にした本や記事,Go言語への感想などについてつらつらと書き記します.

## 動機
まず私がなぜGo言語を習得しようと思ったか,主たる動機はバックエンド開発言語のスタックを増やしたかったからです.
それまでにバックエンドの開発言語としてPHPやKotlinを使用していました.
しかしインターンなどの募集が少ないことや実行速度の遅さ,コーディングスタイルが合っていなかったことから別の言語を探していたところGo言語に出会いました.
Go言語と出会い私は一目惚れしました.
シンプルで見やすく書きやすいコード,コンパイル速度の速さ,応答速度の速さなどGo言語の特徴すべてが私にマッチしているような,そんな気分でした

https://go.dev/

## 学習
Go言語入門としてまずは公式の[A Tour of Go](https://go.dev/tour/welcome/1)から始めました
それまで.Net開発などでMicrosoftにお世話になっていたので同時に[Microsoft Lear

元記事を表示

[Go] grepコマンドを一部実装してみる

# はじめに

前回は、`ls`コマンドの一部実装に取り組んでみました。今回は、`grep`コマンドの一部実装に取り組んでみます。
目標としては、
1. 検索文字列が出現する行を出力し、その検索文字列は区別できるように色づけてあげること
2. `-n`オプションで出現位置の行数も出力するようにすること

の2つを設定したいと思います。

前回の記事はこちらから

https://qiita.com/taga3_dev/items/1dd46c3593d1a414dc32

# 実装
今回のリポジトリですmm

https://github.com/ayanami77/go-my-commands/blob/main/my-grep/main.go

まず、1つ目の「 `my-grep sample.txt`で検索文字列が出現する行を出力すること」を実装してみます。ポイントは、`Scanner`を用いて、一行ずつテキストを読み込み、対象の文字列が含まれているか走査している点です。また、対象文字列の色付けには`fatih/color`というライブラリを拝借させていただ

元記事を表示

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

## technology used

– Go – Server
– Fiber – Go web server
– Vite – Client
– Mantine – React component library
– TypeScript – Static types

## Serverを作成する

“`NOTES.md
## Create a Server folder

mkdir Server

## initialize Go app

go mod init github.com/tomdoestech/go-react-todo

## Install Riber v2

go get -u github.com/gofiber/fiver/v2

## Create client app with Vite

yarn create vite client — –template react-ts

## Install dependencies

yarn add @mantine/hooks @mantine/core swr @primer/octic

元記事を表示

[Go] lsコマンドを一部実装してみる

# はじめに
Goを勉強したいので、手始めに`ls`コマンドを一部実装してみようかなと思います。今回は、`ls`でファイル名の一覧が表示されること、またオプションは、`-l`でファイルの詳細一覧が出力されることを目標として設定します。

# 実装
今回のリポジトリですmm

https://github.com/ayanami77/go-my-commands/blob/main/my-ls/main.go

では最初に、`ls`を実装していきます。ポイントは、`os`ライブラリが提供している`os.Getwd()`でカレントディレクトリのパスを取得し、`os.ReadDir()`でディレクトリ内のファイルを全て返して、ファイル名を出力しているようにしている点です。

“`main.go
package main

import (
“fmt”
“os”
)

func main() {
dir, err := os.Getwd()
if err != nil {
panic(err)
}
files, _ := os.ReadDir(dir)

listFiles

元記事を表示

ローカルのAWS Lambda開発環境を整える(hot reload)

ローカルでLambdaの開発をやるために環境を整備したのでやったことを残しておきます。

zenn にも全く同じ内容を書いています。

https://zenn.dev/imishinist/articles/8ff24429f0eb41

今回作成したサンプルの全体コードはこちらのリポジトリです。

https://github.com/imishinist/lambda-sample

## できること
1. ローカルに立ち上げたDockerでAWS Lambdaを動かす
2. 手元からcurlでLambdaを呼び出す
3. ビルド時に自動でLambdaを更新する(hot-reload)

### 動かし方

Goのコード(Lambdaのハンドラ)をビルドしたいときは以下の `make` を実行する。

“`bash
make build-lambda
“`

Lambdaを立ち上げたいときは `docker-compose` で起動する。

“`bash
docker compose up -d –build
“`

## 仕組み

### AWS Lambda を

元記事を表示

Go でアプリを作成してみた【API 開発】

## Dependency Setup

① Go Moduleを初期化する
“`
go mod init example.com/myproject
“`
② Ginのインストール
“`
go get github.com/gin-gonic/gin
“`
## Imports & Data Setup

“`main.go
package main

type book struct{
ID string `json:”id”`
Title string `json:”title”`
Author string `json:”author”`
Quantity int `json:”quantity”`
}

var books = []book{
{ID: “1”, Title: “In search of Lost Time”, Author: “Marcel Proust”, Quantity: 2 },
{ID: “2”, Title: “The Great Gatsby”, Author: “Scott Fitzgerald”, Quan

元記事を表示

【初心者向け】Stripeでクレカ登録・決済・削除を実装する【Python, Go, Javascript】

こんにちは、[わいけい](https://twitter.com/yk_llm_gpt)です。
今回の記事ではStripeを使ってクレジットカード決済を実装します。

## 前置き
開発規模の大小を問わず、**実装したプロダクトで収益を得るにはユーザーからお金を払ってもらう必要があります。**
しかし、決済の仕組みを自分たちで実装するのは色々な困難が伴います。

キャッシュレス決済といえばクレジットカードですが、クレカ決済の実装には例えば下記のような課題があります。

– 実装ミスなどで、ユーザーのクレカ情報が流出すると大事故になる
– PCI DSSというセキュリティ要件を守り、決済ブランドの審査に通過するには莫大なコストがかかる

結論として、個人や小規模な企業がクレカ決済を独自実装するのはあまり現実的ではないと私は思っています。
こういった問題のソリューションとなるのがStripeです。

私のSNSアカウント等です。
今後もPython・LLM・Go・Web開発などのトピックについて発信していくのでフォローしていただけると喜びます。

X: [わいけい](https:

元記事を表示

Goでwebアプリケーションを作成してみよう! 第3回 ~フロントエンドの実装~

この記事では5回に分けてwebアプリケーションの作り方を説明していく
第1回
 [webアプリケーションの構成、仕組み](https://qiita.com/Yutosaki/items/0c6f9349b427d4aee08e “第3回”)
第2回
 [サーバー立ち上げ](https://qiita.com/Yutosaki/items/fcd773a278e9b8663f36 “第2回”)
第3回
 フロントエンドの実装(この記事)
第4回
  [バックエンドの実装](https://qiita.com/Yutosaki/items/da564b74d6fac87aa601 “第4回”)
第5回
メニュー画像の読み取り

実際に作ったアプリケーション

https://github.com/Yutosaki/WiFiRader

# やること
以下のような画面構成にするための JavaScript を書く。また、Go で作成するアプリケーションサーバーに HTTP リクエストを送る。

![今回作成した画像](https://github.com/Yutosa

元記事を表示

【Go】エラーの場合は返り値として空の構造体を返す?nilを返す?

## はじめに

以下のようなコードで、`err != nil`のとき、

ある関数では`models.Article{}`と空の構造体を返しているのに対し、

“`go
func PostArticleService(article models.Article) (models.Article, error) {
// 略
newArticle, err := repositories.InsertArticle(db, article)
if err != nil {
return models.Article{}, err
}

return newArticle, err
}
“`

別の関数では(**空のスライス`[]models.Article{}`ではなく**)`nil`を返しています。

“`go
func GetArticleListService(page int) ([]models.Article, error) {
// 略

articleList, err := repositories.SelectArtic

元記事を表示

Goでwebアプリケーションを作成してみよう! 第4回 ~バックエンドの実装~

この記事では5回に分けてwebアプリケーションの作り方を説明していく
第1回
 [webアプリケーションの構成、仕組み](https://qiita.com/Yutosaki/items/0c6f9349b427d4aee08e “第3回”)
第2回
 [サーバー立ち上げ](https://qiita.com/Yutosaki/items/fcd773a278e9b8663f36 “第2回”)
第3回
[フロントエンドの実装](https://qiita.com/Yutosaki/items/1058dea6e2246b650c7e “第3回”)
第4回
  バックエンドの実装(この記事)
第5回
メニュー画像の読み取り

実際に作ったアプリケーション

https://github.com/Yutosaki/WiFiRader

# やること
JSON 形式で送られてきた現在地と希望金額の情報から、近場のWi-Fiのある場所で、かつ希望金額以下のメニューがあるところのデータを送信する。
構成としては3つに分けられ、
1つ目が受け取ってきたデータを処理する部

元記事を表示

AWS Health 組織ビューの情報をCSV出力するCLIツールをつくりました

:::note info
本記事で紹介しているツールは AWS Health API を使用しています。AWS Health APIを使用するには、ビジネスプラン以上の AWS Support 契約が必要です。
:::

## はじめに
全国の AWS Organizaitons 管理者の皆さん、AWS Health に通知されるイベントの管理はどうされていますか? AWS を利用していると日々様々な通知が飛んでくるのではないかと思います。

これらのイベントは、システムの可用性や信頼性に影響を与える可能性があるため、適切に管理する必要があります。直近では Amazon RDS の証明書更新 (8月) や AWS Lambda の Python 3.8 ランタイムバージョンのサポート終了 (10月) など大きなイベントも待ち構えています。

組織内で多数のアカウントを管理している場合、手作業でイベントを確認し、必要な情報を収集するのはそれなりに手間がかかるのではないでしょうか。

## AWS Health Exporter という CLI ツールをつくりました

https://gi

元記事を表示

密っこくん

# 目次
[1. 概要](#1-概要)
[2. 背景](#2-背景)
[3. 技術スタック](#3-技術スタック)
[4. アプリの詳細](#4-アプリの詳細)
[5. GitHubリポジトリ](#5-githubリポジトリ)
[6. まとめ](#6-まとめ)
# はじめに
 このアプリは**Golang**と**Websocket**による**双方向通信**を学びたいというモチベーションのもと、唐突な思いつきで作成したアプリです。(現在もまだ修正中。最終的には一時的にでもデプロイしたい。)
**やさしい目**で見てもらえると嬉しいです。
 とりあえずアプリの発信のために本記事を書いてます。
**(※使用する場合はリポジトリの注意書きを参照して下さい。)**

 また双方向通信やGolangについてはまた別でまとめられればと思ってます。
(現状あまりやる気が…)
# 1. 概要
 みなさん、こんな経験ないですか?

### 学校で、授業中寝てる友達に先生が気づくように、音を立てて先生の注目を引いたりして、どうにか友達をチクりたい!

みたいな経験ありませんか?(周りにはないと言わ

元記事を表示

ミニ Abema作ってみたい

# Abemaを作ってみたい
作るならどんな感じになるか考えてみた

# スコープ
Androidのabemaアプリのミニ版(機能 超縮小版)を作成する。
Azure等のサービスを使い、インフラ・バックエンドまで簡単に構築する。

## 実装したいAbemaの機能
時間が限られているため、動画タイプは実装せず、配信型のみ実装する。
配信型で全画面表示時、画面上にコメントが表示されようにするタイプの実装を目指す。(既存abemaにない実装となる)
(niconicoの特許に抵触しないよう気をつけたい、)
コメントを打てるようにする。
ユーザーごとにidを振る。
配信が始まったときに、プッシュ通知を出せるようにする。
画質設定ができるようにする。
ユーザーIDに紐づいたマイリストを作る
リンクでシェアできるようにする
CMを定期的に流せるようにする
埋込み型の広告を表示できるようにする

# やるべきことの洗い出し
プレイストアへの登録(可能な範囲で)
広告表示の方法調査(手続きがめんどくさそうでなので、学習レベルで)
フロントエンドの実装
バックエンドの実装
インフラの構築

## 技

元記事を表示

【Go言語学習】struct{}{}

## struct{}{}
再度、なんだこりゃと思い

以前、関数の引数の定義において c <-chan struct{} という表現を知った時、メモリを消費しない表現であると認識したが、受信専用で有ったためか struct{}{} は出てこなかったようで... マップや送信専用チャネルの変数に入れる際は c chan<- struct{}{} とするようで、 意味としては struct{}型の空のインスタンス(値が何も無いので、値を管理するためのメモリを消費しない) を表現しているとのこと。 ・インスタンス自体は存在するためnilではない ・配列のノリで struct{}{}{} をやると、文法エラー ・interface{}{}も文法エラー ## mapで試す ```Go package main import "fmt" func main() { set := make(map[string]interface{}) // 要素を追加 set["item1"] = struct{}{} set["item2"] = "" set["item3"] = nil

元記事を表示

OTHERカテゴリの最新記事