Go関連のことを調べてみた2023年07月19日

Go関連のことを調べてみた2023年07月19日
目次

( ´∀`) < モナーがechoしてくれる `monaco`って言うコマンドを作りました

# モナーって知ってますか?
モナーは某ネット掲示板の2ちゃんねる(今は5ちゃんねる)で愛されているアスキーアートの1つで
「お前が言うな」 や 「お前も一緒やろ」 的なニュアンスで使われているやつです

# 制作に至った経緯
〜ある日の深夜〜
私 「モナーがechoしたら面白いんじゃね?」
私 「モナーがecho、モナーがエコー、モナーエコー、モナコ、monaco でええやん」
と言う思いつきと深夜テンションのままに作ったコマンドになります
開発してから結構な日数が経っているんですが供養させてください?

ただ、1つだけ問題がMSのOSSの [Monaco Editor](https://microsoft.github.io/monaco-editor/) と名前が被ってるんですよね

## リポジトリはこちら
http

元記事を表示

【Go】ログイン機能でウェブアプリを作ってみる(1)

こんにちは。

Go言語で仮登録・本登録・ログイン機能だけのアプリを作成します。

追加で
“`
・CORS+CSRF
・リフレッシュ
・アクセス回数制限
“`
なども扱ってます。

# Part 1 はじめに

## 何を作るのか?

ユーザーの仮登録、本登録、ログイン、制限されたリソースへのアクセスをするだけのWEBアプリ

## 何が学べるの?

ログイン処理が学べます

追加で
“`
・docker composeの基本的な使い方
・JWTの基本
“`

## 前提

“`
– Go 1.20.2
– WEBのフレームワークとしてlabstack/echoを使用します。
– データベースとのやりとりはjmoiron/sqlxを使用します。
– 認証トークンとしてJWTを使用します。また、lestrrat-go/jwxを使用します。
– メールサーバーはmailhogを使用します。
– テストは書かない
“`

## 作成するエンドポイント

* 仮登録 /auth/register/initial
– クライアントからemail, passwordを受け取る

元記事を表示

echoでstrapi REST APIのようなパラメータを受ける

# 最初に
フロントからの特定のリソースに対して検索リクエストが飛んでくる。
そのリクエストはechoで動くサーバがさばく。
検索クエリはstrapi REST API(ここでは以下strapi API)のようになっていることが要件で
汎用性 <【優先度】< ビジネスロジックとのマッチ とすることが条件となっている。 そうした場合、こうやって組みましたの一例を紹介する。 # リクエスト内容を分解する strapi APIでは、ある規格化されたリクエストパラメータを送ることで 柔軟な検索リクエストを受けることができる。 パラメータ参考;[Parameters | Strapi Documentation](https://docs.strapi.io/dev-docs/api/rest/parameters) その処理を模すには、まず処理できる形にリクエストを分解しなければいけない。 その内容について、書いていく。 ## controller リクエストを受け取った後、parameters構造体に当てはまるよう分解するメソッドに渡す ~~~go import ( searc

元記事を表示

Go言語:ゴルーチンの完全な終了を確実にする方法

## はじめに
Go言語では、非同期のタスクを実行するための手段としてゴルーチンを利用することが一般的です。
しかしながら、その利用には注意が必要です。今回はその一つ、`main`関数が終了すると共にゴルーチンも終了してしまう問題とその解決策について記載します。

## ゴルーチンと`main`関数の関係性

まずは以下のゴルーチンが含まれたコードを見てみましょう。

“`go
package main

import (
“fmt”
)

func sayHello() {
fmt.Println(“Hello”)
}

func sayWorld() {
fmt.Println(“World”)
}

func main() {
go sayHello()
go sayWorld()
}
“`

このコードでは、`main`関数が`sayHello`と`sayWorld`のゴルーチンを起動します。
しかし、ここには一つ問題があります。それは、`main`関数が終了すると全てのゴルーチンも終了するというGoの特性上、これらのゴルーチンが終了する前に`main`関数が終了

元記事を表示

組織でGPTのプロンプト活用するのにお役立ちなツール書いたで!!

# い・しゅー

こんな課題が神々の大地からウォーターフォールしてきてないかな?

– プロンプトのDBを作ってノウハウを蓄積したい
– かつ、誰でも登録出来て誰でも検索させたい
– かつ、出力結果を実際の出力に近い形で分かりやすく参照したい
– かつ、どのくらいの利用があったか可視化出来る仕組みがほしい
– かつ、**分かりやすく使いやすいインタフェースから操作させたい!**

#### いやー無理っす!!!

となるところだけど、僕らが普段使いのslackをラップすれば出来そうな予感がしたので作ってみた
slackだとみんな使ってるから操作を覚える学習コストも少ないし、**スマホとかからも出来て良いよね!!**

# こ・れ

# おもな動作

– **

元記事を表示

Gormの使い方について

こんにちは。

GORMはデベロッパーフレンドリーを目指した、Go言語のORMライブラリです。
goを使ってGORMを使ってデータベース操作する必要があると思います。

# インストール

“`
go get -u gorm.io/gorm
go get -u gorm.io/driver/sqlite
“`

# データベーススキーマの作成

スキーマの作成の仕方についてみていきます。

## マイグレーション(Migrate)

Migrateは、接続先のスキーマを参照して、テーブルやカラムがなければ自動的に作ってくれるコマンドです。

![Screenshot 2023-07-17 at 6.23.52 PM.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3507088/92c8f5e7-efc6-d3ce-71f2-258ceb9380ad.png)

“`
db.AutoMigrate(&User{})

db.AutoMigrate(&User{}, &Product{}, &Orde

元記事を表示

[Azure] Container Apps 機能調査

## Azure Container Apps

Azure Container Appsは、Azure上でコンテナベースのアプリケーションを初めて構築する開発者やエンジニアに向けたサービス。以下に、Azure Container Appsの概要と主な機能について詳しく説明する。

### 概要
Azure Container Appsは、コンテナ化されたアプリケーションのデプロイや実行を簡素化するためのパス(PaaS)サービス。このサービスは、開発者がアプリケーション自体に集中することができるよう、インフラストラクチャの詳細を隠蔽している。Azure Container Instancesをベースにしており、コンテナのスケールやネットワーキング、セキュリティなどの管理を自動化する。

### 主な機能
1. **コンテナのデプロイと実行**: Azure Container Appsは、独自のデプロイメントテンプレートを使用して、コンテナイメージを自動的にデプロイし、実行します。開発者は、ローカルで作成したコンテナイメージをAzure Container Registryにアップロー

元記事を表示

Goのテストコードを書く時パッケージ名に_testをつけるべきか?

Goでテストを書きたい時にテストコードには`_test`のsuffixをつける時と

同一パッケージでテストコードを書いている例があります。

どちらが正しい書き方なのか調べてみました。

## _testをつけている例

stringsパッケージでは`_test`のsuffixをつけてテストコードを書いています。
https://go.dev/src/strings/search_test.go

“` go
// Copyright 2012 The Go Authors. All rights reserved.
// Use of this source code is governed by a BSD-style
// license that can be found in the LICENSE file.

package strings_test
“`

## _testをつけていない例
bzip2パッケージでは`_test`をつけずにテストコードを書いています。

https://go.dev/src/compress/bzip2/bzip2_test.go

元記事を表示

VSCodeでGoの開発環境を簡単に作る

## はじめに

Go入門中の者です。
GoLandに課金するのはちょっと気が引けるので、VSCodeで簡単な実行環境を作ってみました。

色々な記事が出ているけど、結果Microsoftの記事が一番分かりやすく簡単でした。

https://learn.microsoft.com/en-us/azure/developer/go/configure-visual-studio-code

## 前提

VSCodeがインストールされている
記事に出てくるコマンドはMacを前提としております

## 手順

### 1. Goをインストールする

下記のサイトから、任意のバージョン/OSのGoをインストールする
(余談:私はasdfを使ってインストールしてます)

https://go.dev/doc/install

### 2. VSCodeの拡張機能「Go」をインストールする

これ↓です!
![スクリーンショット 2023-07-17 9.43.55.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0

元記事を表示

【GO言語】mysqlへの接続でやらかしたこと

# やろうとしたこと
GO言語の公式チュートリアルのコードを基に(ほぼコピペ)ローカルのmysqlサーバに接続して、DBのデータを参照したり、書き込んだりするプログラムを書こうとしました。

# 書いたコード(エラー解消前)
以下、エラーが発生するコードです。
“`main.go
package main

import (
“database/sql”
“fmt”
“log”

“github.com/go-sql-driver/mysql”
)

var db *sql.DB

type Album struct {
ID int64
Title string
Artist string
Price float32
}

func albumByArtist(name string) ([]Album, error) {
var albums []Album

rows, err := db.Query(“SELECT * FROM album WHERE artist = ?”, name)

if err != nil {
return

元記事を表示

【M1/M2】asdfでGoをインストールするとreturned status 404というエラーが発生する

## 概要
Macbook(M2)でasdfを用いてGo1.11.1をダウンロードしようとすると`returned status 404`が返却される

“`zsh
$ asdf install golang 1.11.1
Platform ‘darwin’ supported!
URL: https://dl.google.com/go/go1.11.1.darwin-arm64.tar.gz returned status 404
“`

## 前提

・macOS Monterey 12.5.1
・asdf: v0.11.3
・ダウンロードしたいGoのバージョン: 1.11.1

## 解決策

asdf installコマンドの先頭に`ASDF_GOLANG_OVERWRITE_ARCH=amd64`をつける

“`zsh
$ ASDF_GOLANG_OVERWRITE_ARCH=amd64 asdf install golang 1.11.1
“`

## 参考

https://github.com/asdf-community/asdf-golang#archit

元記事を表示

Golang 学習した外部ライブラリ まとめ 随時更新

“`
go get github.com/gin-gonic/gin
“`
Gin は、高速かつ軽量なWebアプリケーションフレームワークであり、Go 言語での Web 開発をシンプルにするための多くの機能を提供します。ルーティング、ミドルウェア、JSON レスポンスの生成などの機能を簡単に実装できるため、効率的で堅牢な Web アプリケーションを作成するのに役立ちます。

の例では、単純なAPIエンドポイントを作成し、リクエストを受けた際に “Hello, World!” というメッセージを返すものです。

“`
package main

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

func main() {
r := gin.Default()

// GETリクエストを処理するハンドラ
r.GET(“/hello”, func(c *gin.Context) {
c.JSON(200, gin.H{
“message”: “Hello, World!”,
})
})

r.Run(“:8080”)
}
“`

元記事を表示

Go × PostgreSQL × SQLBoiler (ORM) × golang-migrate (マイグレーション) の開発環境を構築する

毎回環境を作るときに何かしらド忘れしてしまい手こずってしまうので忘れないようにメモ。

# はじめに
– 下記の知識や経験があることを前提にしてます
– Go言語の基礎を理解している
– Dockerと docker-compose の基礎を理解している
– バックエンド開発やデータベースの基礎を理解している
– ORMの使い方や各種コマンドの詳しい説明はしません
– パスなどはご自身のプロジェクトの構成に合わせて適宜変更してください

作ったもののサンプルです。

https://github.com/Takenari-Yamamoto/golang-dev-env/tree/main

# 開発環境
– Go1.20
– PostgreSQL 15
– Docker
– docker-compose

# 使用するツール

### SQLBoler v3.7.1

https://github.com/volatiletech/sqlboiler

### golang-migrate v4.15.2

https://github.com/golang-migrat

元記事を表示

GoのORMの人気ランキングを年ごとにまとめてみた

# 概要
GoのO/R Mapperについてまとめてみました。
GoのO/R Mapperを選定する際に、gormは有名だけど他にないかな〜と思ったため興味本位で探してみました。

## 取得方法
取得方法として、GitHub-APIを使用しました。
理由として年単位でスターの上がり幅を比較し、流行りすたりを可視化したかったためです。
※取得対象はスターの数が1,000個以上リポジトリのみとなります。

実際のリポジトリは以下になります。
https://github.com/RyotaroSeto/star-golang-orms

## 年間隔スター数上限グラフ
[![orm_chart.jpeg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/843952/a4ae95b3-dca5-010a-db74-d2de46e8bd05.jpeg)](https://ryotaroseto.github.io/star-golang-orms/output/orm_chart.html)

## リポジトリごと

元記事を表示

【忙しい人のための】 Security Best Practices for Go Developers

あなたのGoで書かれたプロジェクトは[go.dev](https://go.dev/)が提唱するセキュリティベストプラクティスに従っていますか?
実は、GoのチームはGo開発者のためのセキュリティベストプラクティスを公開しています。

これ↓

https://go.dev/security/best-practices

一次情報を読むことをお勧めしますが、英語が苦手な人や、サクッと概要だけ見たい忙しい人も多いと思います。

そんなあなたのために、心優しい私が要約しましたので活用してください。

## ソースやバイナリに脆弱性スキャンをする

– [govulncheck](https://pkg.go.dev/golang.org/x/vuln/cmd/govulncheck)を使って脆弱性を検知する
– [チュートリアル](https://go.dev/doc/tutorial/govulncheck-ide)
– Govulncheck は CI/CD フローに組み込むこともできる
– GoチームはGitHubマーケットプレイスに[govulncheckのためのGi

元記事を表示

Go言語の並行処理: ゴルーチンとチャネルについて

この記事では、Go言語の並行処理について記載します。
Go言語は、複数のタスクを同時に実行するための強力な機能を持っています。
その実現には、ゴルーチン(Goroutines)とチャネル(Channels)という2つの主要な概念がキーとなります。

## ゴルーチンについて

ゴルーチンは、軽量なスレッドのようなもので、Goランタイムによって管理されます。ゴルーチンは非常に少ないメモリ(数KB)を使用し、必要に応じて成長・縮小します。これにより、数千から数百万のゴルーチンを同時に実行することが可能となります。

新しいゴルーチンは、`go`キーワードと関数呼び出しを組み合わせることで作成されます。

“`go
go doSomething()
“`

上記のコードは、新しいゴルーチンを作成し、その中で`doSomething`関数を非同期に実行します。

## チャネルについて

チャネルは、ゴルーチン間での通信と同期を可能にするデータ構造です。一つのゴルーチンはチャネルにデータを送信し、別のゴルーチンはそのチャネルからデータを受信することができます。

チャネルは、`make`関

元記事を表示

[GCP] Cloud Run 機能調査xHttpClientでリクエスト

[Cloud Run](https://cloud.google.com/run)は、Google Cloud Platform(GCP)のサーバーレスコンピューティングプラットフォームであり、コンテナ化されたアプリケーションを実行するための環境を提供している。以下にCloud Runの概要と主な機能について説明する。

## Cloud Runの概要
Cloud Runは、ステートレスなコンテナによって構成されるアプリケーションの実行を可能にします。Cloud Runでは、コンテナイメージを提供してアプリケーションをデプロイするだけでなく、自動スケーリング、リクエストトリガー、イベントの統合などの機能を利用することができる。また、Cloud RunはKnativeの上に構築されており、ノードレスなアプリケーション実行環境として機能する。

## Cloud Runの機能
### 1. ステートレスな実行環境
Cloud Runはステートレスなコンテナ実行環境であり、ステートフルなコンポーネントを含むアプリケーションを実行することはできない。ステートレスな実行環境のため、インスタンスの

元記事を表示

Go言語の例外処理がないってのは結局どういうこと?

# はじめに
はじめまして。インターンをしているイナです。
今回は初心者がGo言語の例外処理がないって本当なの?という部分について概念を中心に調べたものをまとめました。

# Q. 例外処理とは
まずは兎にも角にも、例外処理とはなんぞやってところからです。
いくつかのサイトで例外処理の定義について調べてみましたが、サイトによって言ってることはバラバラでした。
例外とエラーは一緒です or 違います!例外は想定外 or 想定内&想定外のエラーのことです!など人によって言ってることが違いました。

最初から壁が高すぎ…?と戦々恐々としていましたが、[IT用語辞典 e-Word](https://e-words.jp/w/%E4%BE%8B%E5%A4%96%E5%87%A6%E7%90%86.html)で気になる部分がありました。

> 例外は「エラー」(error)と同種の概念で、普遍的に成り立つ両者の明確な違いは無く、同義として扱われる場合が多い。ただし、プログラミング言語や処理系によっては両者に異なる意味合いが与えられている場合もある。

こちらの内容に関しては、まとめてくださっ

元記事を表示

バージョン切り替えのコマンド絶対いつも忘れるので一覧化しとく

https://github.com/anyenv/anyenv
最近存在を知ったanyenvであれこれxxenv化したいなぁと思いつつも、すでに汚れてしまった私の環境を整理していくのは腰が重いので、最近よく使う言語のバージョン切り替えをコマンド一覧化しとく

# goenv
“`bash
# バージョン確認
go version
# インストールできる一覧
goenv install -l
# インストール
goenv install {バージョン}
# 設定
goenv global {バージョン}
# 指定のディレクトリにのみ設定する場合はこちら
goenv local {バージョン}
# .zshrcは読み直そう
source ~/.zshrc
“`

# nodebrew
インストールしてあれば `ls-remote` やら `install-binary` のくだりはいらない
“`bash
# インストールした一覧
nodebrew ls
# インストールできる一覧
nodebrew ls-remote
# インストール
nodebrew install-bina

元記事を表示

【Go】【チートシート】Slice Tricksの重要なとこだけ 〜忙しい人へ〜

# はじめに

前回は、スライスマスターになりたいので、Slice Tricks(チートシート)を作って見ました?

しかし、図が大きかったり、長く読みにくい記事を書いてしまったので、

前回記事にした記事の重要なところだけ(記事を書いていて学びの多かったところ)を抜粋しました!?

特に、忙しい人向けに、自分が重要だと感じるところを共有する記事(チートシート)です!?

元ネタ

https://github.com/golang/go/wiki/SliceTricks

# ? スライスの要素追加, 結合

1. `for _, i := range b {
a = append(a, i)
}`

2. `a = append(a, b…)`

“`go
s1 := []int{1, 2, 3}
s2 := []int{4, 5, 6}
for _, i := range s2 {
s1 = append(s1, i)
}

fmt.Println(s1) // [1 2 3 4 5 6]

s3 := []int{1, 2, 3}
s4 := []int

元記事を表示

OTHERカテゴリの最新記事