Go関連のことを調べてみた2022年06月18日

Go関連のことを調べてみた2022年06月18日
目次

もうタイムアウトまで待たない!gomockでゴルーチンをまたいでエラーを出す方法

# TL; DR

– gomockのモックをテストと別のゴルーチンで動かすと、モック未定義エラーが起きてもテストが終了しない
– テストが失敗した際、`go test` のタイムアウトまでフリーズしてつらみ
– そこで、 `*testing.T` をラップした独自のReporterを渡し即時終了するようにする

“`go
func TestHoge(t *testing.T) {
ctrl := gomock.NewController(NewConcurrentTestReporter(t))
defer ctrl.Finish()
}

type ConcurrentTestReporter struct {
*testing.T
}

func NewConcurrentTestReporter(t *testing.T) *ConcurrentTestReporter {
return &ConcurrentTestReporter{t}
}

func (r *ConcurrentTestReporter) Fatalf(format string, args .

元記事を表示

WebSocket Ping-Pong Frame実践

# WebSocket Ping-Pong Frame 実践

## inspire
mdnからWebSocketの規格を見ていたところ、Ping-Pong Frameの実装についてサーバー側からする必要があると記載を見たのでGoから実装しました。
[レファランス](https://websockets.spec.whatwg.org/#ping-and-pong-frames)

## 使うライブラリ
– [gorilla](https://github.com/gorilla/websocket) >= 1.5.0
– golang >= 1.18

## gorillaのAPIレファランス

Ping Frameは直接転送し、Pong Frameは[PongHandler](https://pkg.go.dev/github.com/gorilla/websocket#Conn.PongHandler)を設定することで、Ping-Pong Frameが実装できます。

## ソースコード

### サーバー側
– クライアントと接続が完了したところからのソースコードになりま

元記事を表示

【Go】BeegoでAPI構築してみる

# これはなに?

– Webフレームワーク[Beego](https://beego.vip/)を使ってAPIサーバを立ててみる記事
– 本記事では、BeegoインストールからbeeコマンドによるAPI構築まで試す

# 環境

– Go: 1.18.3
– Beego: 2.0.1
– Bee: 2.0.4

# 前準備

## Docker環境整備

“`:ディレクトリ構成
.
├── api
│ └── docker
│ └── Dockerfile
└── docker-compose.yml
“`

“`Dockerfile:Dockerfile
FROM golang:1.18.3-alpine3.16

ENV ROOT /go
ENV CGO_ENABLED 0

WORKDIR ${ROOT}

RUN apk update && apk add –no-cache git
“`

“`yml:docker-compose.yml
version: ‘3’
services:
api:
container_name: prac

元記事を表示

2021/06〜2022/05 GoタグLGTMランキングTOP30

|タイトル|投稿日|LGTM|コメント数|URL|
|—|—|—|—|—|
|ファイルパーミッションでスロットがしたい|2021-11-22T10:35:01+09:00|620|6|https://qiita.com/jiro4989/items/2530c4f789916521a47a|
|Magicodeという簡単に稼げるエンジニア向けブログサービスを作ったので使って欲しい|2022-04-16T22:05:05+09:00|441|5|https://qiita.com/Taiki92777/items/c53c51b3586078e2318c|
|マイクロサービスにひそむ複雑さに立ち向かう|2021-12-03T11:15:03+09:00|193|0|https://qiita.com/behiron/items/017b12ee7ffa6dfeb254|
|2022~2030年に学ぶべき未来のプログラミング言語3選|2021-09-27T18:06:48+09:00|89|1|https://qiita.com/baby-degu/items/f9e5

元記事を表示

Docker環境を構築し、Golang Echo v5-alphaでJWT Token認証 ホットリロード、リモートデバッグ、マイグレーション、GormのORMが入ったフルスタックフレームワークチックな環境の構築をした

docker環境を構築し、
Go言語のフレームワークのechoフレームワークに、
JWT Token認証 ホットリロード、リモートデバッグ、マイグレーション、
GormのORMと色々入ったフルスタックフレームワークチックな環境の構築をしてみました。

今回の記事は、この記事の作成の為に公開しました、gihubのソースの動かし方の説明になります。
※githubのソースは記事の一番下になります。

記事の評判がよければ、ライブラリーの比較や説明、ソースコードの説明等記事を更新するかもしれません。

※ validation、テストは入っておりません。
あと、errorハンドリングやlog出力等できていないです。

この記事は、golang初心者やechoフレームワークをこれから学ぶ人向けとなります。
自分は、golangの学習を初めて時間があまり経っていないので、少し説明やソースコードに粗がありますが、ご容赦ください

あと、元々echo v4で作っていたのを、echo v5-alphaに書き換えているので、
v5-alphaの作法に書き変わっていない部分があります。

今回詰まった点は

元記事を表示

【Go】Goで配列を爆速で処理してくれるライブラリが素敵だった【koazee】

## はじめに
Goで配列(SliceでもArrayでも)を操作したいと思っていたときに見つけた素敵ライブラリを、備忘録として記録。
JSとかSQLとか使っているとよく使うメソッド群をだいたい使えるようにしてくれる、とても素敵ライブラリ。
~~全部GoogleAdsQueryBuilderにgroup byが無いのが悪い。~~

koazeeの公式github のサンプルを元に、基本的な機能やキモについては
@nqdior様 https://qiita.com/nqdior/items/e225eae820d6157dc05b
に詳しいので、こちらもご一読いただけるといいかもしれないです。 **むしろ必読です。**

今回は、ポケモンの最新版仕様のデータをjsonでまとめられているgithubを見つけたので
初代151匹のポケモンのjsonを引っ張ってきて遊んでみることにします。

今回やってみるのは3つ。

タイプごとに並び替えたい
SQLとかでおなじみのgroup byをやってみます
特定のタイプのポケモンだけ抽出した

元記事を表示

Go言語のフレームワークEchoを使ってみた

# はじめに
Go言語で代表的なフレームワークEchoをチュートリアルを試してみました
環境:MacOS Monterey 12.3.1
   go v1.18.3

# Echoについて
Echoとは
高性能、拡張可能、ミニマリストのGoWebフレームワーク
です

https://echo.labstack.com/

・最適化されたルーター
・拡張性がある
・自動TLS
・HTTP/2
・ミドルウェア
・Data Binding
・Data Rendering
・Templates
・拡張可能

# インストール
最初に環境変数の$GOPATHを設定します
“`
export GOPATH=$HOME/.go
“`
※参考
https://qiita.com/yuku_t/items/c7ab1b1519825cc2c06f

下記を実行します
“`
mkdir myapp && cd myapp
go mod init myapp
go get github.com/labstack/echo/v4
“`

# サーバ起動
server.goというファイルを作成して下記

元記事を表示

【備忘録】Go(fiber)× Dockerでの環境構築を実施する。(Hot Reload対応)

Go×Dockerで環境構築しました。備忘録も兼ねて記載しておきます。
下記構成で、HelloWorldまでは出力することができます!!

“`shell:ディレクトリ構成
~/develop/gotenroku-server $ tree
.
├── Dockerfile
├── docker-compose.yml
├── go.mod
├── go.sum
└── main.go

0 directories, 5 files
“`

“`Dockerfile:Dockerfile
FROM golang:1.17-alpine

ENV TZ /usr/share/zoneinfo/Asia/Tokyo

ENV ROOT=/go/src/app
WORKDIR ${ROOT}

ENV GO111MODULE=on

COPY . .
EXPOSE 1323

RUN apk upgrade –update && \
apk –no-cache add git

RUN go get -u github.com/cosmtrek/air

元記事を表示

AmazonのURLをひたすらDynamoDBに登録するだけのAPIをLambda Function URLsでつくった

# はじめに
この記事はLambda(Function URLs)とDynamoDBと連携させる内容となっています。
前回の記事の続きとなっているため同様の手順は省略しています。

GoでLambda Function URLs ハンズオン
https://qiita.com/tkhs1121/items/b1e332acdbc50fad8c45

# 環境
MacBook Air M1
開発言語 Go

# 追加で必要なパッケージのインストール
“`
go get -u github.com/aws/aws-sdk-go
“`

# ソースコード
“`main.go
func HandleRequest(ctx context.Context, payload Payload) error {
url, err := parseRequest(payload)
if err != nil {
return err
}
isAmazonURL, err := checkAmazonURL(url)
if err != nil {
return err
}
i

元記事を表示

GolangでSymbolブロックチェーンのトランザクションを送信する

この記事は「自分の得意なプログラミング言語でSymbolブロックチェーンを動かす方法」をGolangで実践したものです。

https://qiita.com/nem_takanobu/items/09b6b687f3cbe10af945

### import
“`go
import (
“fmt”
“time”
“bytes”
“net/http”
“crypto/rand”
“crypto/ed25519”
“encoding/hex”
“encoding/json”
“encoding/base32”
“encoding/binary”
)
import “golang.org/x/crypto/sha3”
“`

### アカウント作成
“`go
pub, priv, _ := ed25519.GenerateKey(rand.Reader)
publicKey := hex.EncodeToString(pub)
privateKey := hex.EncodeToString(priv[:32])
fmt.Println(publicK

元記事を表示

Go中級者になるための個人的インプット集?‍?

# はじめに
## 概要
Goを書くようになりそこそこ経ちました?‍?
これまでに読んできたWeb上のリンクをまとめました。随時更新します。

# インプット集
## 入門〜初心者?

### プログラミング言語Go完全入門

https://engineering.mercari.com/blog/entry/goforbeginners/

大変お世話になった(なっている)スライドです。
今でも定期的に見返していますし、Goを始めたい方にはまず紹介しています。

### Goへのヘイトに対する考え方

https://zenn.dev/nobonobo/articles/74808a8d5e6f1e

Goに対する批判は定期的に起こるのですが、キャッチアップしている言語が批判に合うと悲しくなりますよね?
言語仕様のシンプルさに由来する批判が多いように思うのですが、それに対する回答をひとつ持っておくと糧になると思います。
[元JavaエンジニアがGoに感じた「表現力の低さ」と「開発生産性」の話](https://inside.dmm.com/entry/2021/12/10/ex-j

元記事を表示

【#0 エンジニア転職学習】学習ロードマップ

# はじめに
はじめまして、富山県に住んでいるChikaといいます。
現在は小売・製造のマーケティング部門で働いています。
自分でWEBサービスの開発をする仕事に転職したいと思い、現在バックエンドエンジニアになるべく勉強中です。

勉強自体はすでに途中まで進めている状況ですが、
勉強の過程やアウトプット学習をしたいと考え、Qiitaでの記事投稿をしていくことにしました。

投稿の目標として、毎日その日に学んだことをブログ記事として投稿していきます。

内容・記事の作りともに拙いですが、
とにかく投稿・アウトプットすることを第一目的としておりますのでご了承ください。
(学習教材のリンク等は後日追加修正をしていきます)

# 今回の内容
– 学習題材・選定理由
– 学習ロードマップ
– 現在の進捗

# 学習題材・選定理由
学習ロードマップの全体はブログ記事・Gitのロードマップ・Youtube等を見て必要な要素を選定しました。

開発言語としてGoを選択しました。
難易度・教材の豊富さから考えるとRubyやPHPを選ぶほうが無難と考えましたが、
今後もしくは現在の主流になっているであろ

元記事を表示

[ Golang ] Facebook / ent のER図をGitHub Actionsで自動更新する

# ER図とは
>ER図のEはエンティティ(Entity)の略で、Rはリレーションシップ(Relationship)の略です。つまりER図は「エンティティ=モノ」と「リレーションシップ=関係」の組み合わせでシステムのデータやデータ間の処理構造を設計します。例として「顧客が商品を注文する」という処理をER図で表すと以下のようになります。

https://products.sint.co.jp/ober/blog/create-er-diagram#:~:text=ER%E5%9B%B3%E3%81%AEE%E3%81%AF,%E6%A7%8B%E9%80%A0%E3%82%92%E8%A8%AD%E8%A8%88%E3%81%97%E3%81%BE%E3%81%99%E3%80%82

簡潔に説明をすると、ER図とはテーブル間の関係を表した図です。
RDBのようなデータベースを用いてシステムの開発および運用を行う際に、テーブル間の関係を直感的に理解できるようになります。

# なぜER図が必要か
実運用を行なっているシステムとなるとテーブル数が数十に及ぶことが多々ありますので、ER図

元記事を表示

【GO】外部ライブラリを自力で、モック化してみる

### 今回は、テストコードを簡単にするためにTestifyを使いますが、Testifyの機能で、モック化するわけではないので、Testifyを導入しなくてもモック化の実現が可能です。

# 今回利用する技術
– 言語:**GO**
– モック化する外部ライブラリ:**Agouti** Seleniumみたいなライブラリ
– テストライブラリ:**Testify** assertなどの検証関数を利用するため

# 実況開始
## まず初めは、GOのプロジェクトの初期化してみる
“`
go mod init go-testify-mock
“`
正直、go modのことをが詳しくないから、`npm init -y`と同じ感覚として、やっていいのかわからない….

## Testifyのインストール
“`
go get github.com/stretchr/testify
“`

## Agoutiのインストール
“`
go get github.com/sclevine/agouti
“`
~~ライブラリの公式が、メンテナンスしないことを発表して、3年立つらしい…~

元記事を表示

Golang echoフレームワークのv4からv5-alphaにアップデートした際の詰まった部分のメモ

golangフレームワークechoでV5-alphaがリリースされていたので
V4からV5-alphaにアップデートした際に少し詰まった箇所のメモ

※ alphaバージョンなので変更や修正があるかもしれないので注意してください
後、golangは個人で最近自己学習を始めたので間違っているかもしれません。

リポジトリや説明は下記の記事に記載しております。

https://qiita.com/shingo02/items/996be09834718432bafc

https://echo.labstack.com/v5/guide/upgrading-to-v5/

middlewareのCORS middleware
https://echo.labstack.com/middleware/cors/

echo.GETのようにアクセスできなくなった為、下記のように書き換え
ソースコードを見るとecho.GETは間接的にhttp.MethodGetを読んでいた為
どちらも同じ意味の様です。

“`
AllowMethods: []string{echo.GET, echo.HE

元記事を表示

Go言語の導入から基本まで

# なぜ本記事を書いたのか?
Goの仕様や使い方について自分の把握している範囲を整理するために書いています。
# 本記事の対象読者
– Goは使ったことがないけれども、他言語は使ったことがある。
– Goをとりあえず始めるための環境構築を知りたい。
– forやwhileなどはわかるが、Goでの書き方を知りたい。

などと考えているプログラミングライトユーザー向けのレベルの記事として仕上げるつもりです。
正直文法云々はGoの公式チュートリアルをやってもいいとは思いますが、僕が追加で気になって実験した多少の+αを残す意味で書いてます。チートシート+αくらいでみていってください。
**足りないところだらけだけど、間違い、補足等コメントください。**
# 筆者の環境
– CPU : Apple M1
– OS : macOS Monterey v12.3.1
– Goバージョン:1.18.3

# Goの環境構築
## Goのインストール
### 前提知識的なやつ
#### GOPATHとは
外部パッケージなどが保存される場所、実行バイナリもここに保存される。
“`
$ go env GO

元記事を表示

[2022年]オライリー書籍ランキング1(O’Reilly)

オライリー書籍ランキングを紹介します。
***
[データ指向アプリケーションデザイン[Amazon]](https://amzn.to/3aILwT3)
![c.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2702119/349ec1bc-3d51-3e16-0b35-39caf4146690.jpeg)
本書では、データの量や複雑さ、変化が課題となるアプリケーションを「データ指向」と名づけ、データ指向アプリケーションの設計を支える基本的な概念を解説します。
– 第I部データシステムの基礎
– 1章 信頼性、スケーラビリティ、メンテナンス性に優れたアプリケーション
– 2章 データモデルとクエリ言語
– 3章 ストレージと抽出
– 4章 エンコーディングと進化
– 第II部分散データ
– 5章 レプリケーション
– 6章 パーティショニング
– 7章 トランザクション
– 8章 分散システムの問題
– 9章 一貫性と合意
– 第III部導出データ
– 10章

元記事を表示

新しい言語で開発環境を作る時の目線ってこんな感じ(Go)

# 1. はじめに
開発環境を整える。初心者にとって一番高いハードルの一つです。でも、ある程度以上の経験を詰むと、言語を選ばずにスムーズに構築できるようになります。この記事は私の作業視点を整理して公開し、皆さんの苦手を克服する助けになればと記載しました。内容自体ではなく、「何をどうかんがえているのか」を見るための参考になったらうれしいです。

# 2. この記事の目的
私自身使ったことのない言語の開発環境の構築をなにをどう考えて、作っていくのかを整理していきます。あくまで一例として、作業のポイントなどをお伝えすることを目的としています。逆に「Go言語で効率よく開発する方法」などは全く含まれないのでご注意ください。

## 2-1 前提環境

導入OS先 Redhat Enterprise Linux 8

# 3. Go言語のコンパイル環境を作ってみよう

「開発環境」ってなんでしょうか。

1. プログラミング言語をコンパイルし実行できるようにする環境
1. コーディング、コンパイル、実行をシームレスに繋ぐための統合開発環境
1. システム全体のミニチュアを用意して、コーディング、コ

元記事を表示

go開発環境をDockerで作成する④ - realizeでホットリロード

# 最終目的
– go言語でWebアプリを構築するためのgo開発環境をDockerで作成する。

# 目標
– [Docker上にコンソール立ち上げ環境を作る。](https://qiita.com/eigetsu/items/555efb6f1fec0425d35f)
– [フレームワークginを使った簡単なREST APIサーバーを立ち上げる。](https://qiita.com/eigetsu/items/5482149b4f5cf7874698)
– [イメージビルド時にプログラムをコンパイルしコンテナ起動と同時にホストPCからAPIにアクセスできるようにする。](https://qiita.com/eigetsu/items/a3eeffa3df2bac413dde)
– realizeでホットリロードできるようにする。**←今ここ**

# やること
– realizeをイメージビルド時にインストール
– コンテナ立ち上げ時にrealizeでgo-blogをホットリロード

## 開発環境の構成

開発環境 go-env の構成は下記の通り。

~~~text: 開発環境

元記事を表示

Go言語初学者が勉強する過程で収集した情報まとめ

# Go言語を習得する過程で自分で学んだこと・参考情報サイトなどをまとめていきます
すなわち本内容は完成記事ではなく学習の過程で記事を加筆していくつもりです。
割と個人の覚書きの性質の強い記事ではありますが、ひょっとしたら他の「これからGoをやるぞ!」と思う人の助けになることがあるかもしれないので公開します。
各セクションについて、ボリュームが膨らんできてここに載せておくには文章量が多いな…と感じてきたらその部分は単独記事として独立化させていく予定です。

## 基礎:まずはこのあたりから勉強

### はじめてのGo

https://gihyo.jp/dev/feature/01/go_4beginners

このドキュメントが個人的に好み(日本語で読める。ある程度厳密な仕様がわかる)。デメリットは執筆時期が2015年とちょっと古めなことか。Goは割と活発にバージョンアップしている言語みたいなのでちょっと前の古いテキストだと最新仕様とズレが大きくなるのが心配かも。

### プログラミング言語Go完全入門
https://docs.google.com/presentation/d

元記事を表示

OTHERカテゴリの最新記事