Go関連のことを調べてみた2021年12月13日

Go関連のことを調べてみた2021年12月13日
目次

Docker + Vue.js + Go言語で映画館の空席状況を取得する

[ディップ Advent Calendar 2021](https://qiita.com/advent-calendar/2021/dip-dev)の13日目の記事です。

## はじめに
ディップ株式会社でPHP(Laravel)を使って求人系サービスの開発や社内向けツールの開発を行なっている@taku-0728です。
今回はタイトル通り`Docker + Vue.js + Go言語`を使って映画の上映状況を取得してみます。
Vue.jsとGo言語を使った記事を書くのは初めてでお作法的な部分もまだ理解が浅いため、
有識者の方からみると違和感を感じる部分もあると思いますが、こう書いた方がいい等あればコメントにてご指摘いただければ幸いです。

前置きがながいので、実装方法について詳しく知りたい方は[実装](#実装)からお読みください。

## こんなこと経験ありませんか?

:grin::話題のあの映画がついに公開だって!今度の週末見に行きたい!近くの映画館で空いてる時間ないかなー

:movie_camera::「「「全時間帯満席です」」」

:angry::1日予定がないから何時で

元記事を表示

[初心者向け] ゼロから始めるGo + Nuxt.js + Terraform + AWS + DockerでWebアプリ開発

# はじめに
はじめまして、大学院(非情報系)卒業後、Web系企業でインフラ業務を担当している新卒1年目です!
これまでWebアプリ開発の経験があまり無かったので、スキル向上のためGo (Echo)とNuxt.jsを使用し、1ヶ月程かけてアプリ開発を行いました。
GoとNuxt.jsに関しては完全に未経験の状態からのスタートでしたが、なんとか形にすることができたので、アプリケーションを完成させるまでの進め方や学習方法をまとめていきたいと思います。
皆様のご参考になれば幸いです!

# 開発したアプリケーション
![スクリーンショット 2021-12-12 14.28.22.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/302831/93a519fa-fc5b-5ee3-319c-45e80a7c5875.png)

GitHubのissueやrepositoryを豊富なフィルタ機能を利用して検索できるサービス([gitnavi](https://gitnavi.dev/ja))を開発しました。
(今後も

元記事を表示

Go Fyneで遊んでみた

# はじめに
こんにちは。@af-2784です。
入社してから1年半、バッチやAPIなど、Goでバックエンド中心の開発をしてきましたが、
たまにはGUIの開発をしてみたい、オシャンな画面を作ってみたい…!
調べてみたら、Goには[Fyne](https://pkg.go.dev/fyne.io/fyne/v2)というGUIライブラリがあると知り、今回はこちらを少し触ってみたいと思います。

# 準備
Fyneをインストールします。

“`shell
$ go get fyne.io/fyne/v2/app
$ go get fyne.io/fyne/v2/widget
$ go get fyne.io/fyne/v2/container
$ go get fyne.io/fyne/v2/canvas
“`

# Hello World
何事もまずはHello Worldから。
`hello := widget.NewLabel(“Hello World!”)`のようにウィンドウに表示したいオブジェクトを定義し、SetContentの中に定義したオブジェクトを入れれば、GUIの画面に

元記事を表示

CDK for Terraform をニフクラ provider で試してみた

この記事は [富士通クラウドテクノロジーズ Advent Calendar 2021](https://qiita.com/advent-calendar/2021/fjct) の13日目です。
12日目は @kzmake さんの [daprのActorをつかってみる](https://qiita.com/kzmake/items/ca0791350d941ce9d29a) でした。
dapr は数多くの機能があるので、ぜひ学習して使っていきたいですね。

# はじめに

我々、富士通クラウドテクノロジーズ株式会社が提供しているニフクラは現在 [Terraform NIFCLOUD Provider](https://registry.terraform.io/providers/nifcloud/nifcloud/latest) を提供しています。
こちらを用いることで、Terraformからニフクラのインフラストラクチャ(以降インフラ)を操作することができます。

今回はこの Terraform NIFCLOUD Provider と CDK for Terraform を使用

元記事を表示

Functional Options Patternで、「元に戻す」機能を実装してみた

# はじめに

この記事は、[Goアドベントカレンダー(カレンダー3)](https://qiita.com/advent-calendar/2021/go)の13日目になります!

[今年初めに書いた記事] (https://qiita.com/uh-zz/items/3a38f9ca0e195ed6e908)を振りかえってみて色々と思うところがあり、この1年の学びをもとに自分のコードをリファクタリングしてみました!

# 前提
元ネタは、[「元に戻す」のしくみ 【ゲーム・プログラミング】【JavaScriptサンプル】](https://youtu.be/XmS9NNX_59I)です。

「人」を使って「荷」を「★」まで運ぶゲームを想定しています。
![anim.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/427090/739fdb29-cdd1-2309-a4ab-04d482e1bccd.png)

マップ全体の初期位置[^1]をx、右に1つ進む関数をf()、下に1つ進む関数をg()とすると

元記事を表示

Goでのベンチマークツールを作ろうとした話

この記事は [Applibot Advent Calendar 2021](https://qiita.com/advent-calendar/2021/applibot) 13日目の記事です。
前日は@dears31さんの「[Zoomコメントから自由回答のクイズを集計してみた](https://qiita.com/dears31/items/62685ae0369276aa38fe)」という記事でした。

## はじめに

はじめまして。アプリボットでサーバサイドエンジニアをしているものです。
最近普段の業務で、サービスの性能を計測して、結果まとめ技術選定の材料にするといったことが少しずつですが、増えてきました。
最近で言うと、Elasticache Redisの性能を計測することがありました。

最近あったAurora3の登場や、TiDBやSpannerなどの分散DBの採用事例の増加、KeyDBがマネージドサービスとして提供が開始されるようになるなど、今後も様々なミドルウェアの技術選定、メジャーバージョンの更新などで既存の技術を大きく入れ替える機会が増えるのではないかと思ってい

元記事を表示

授業のために早押しクイズサイトを作った話

# 授業のために早押しクイズサイトを作った話

## 初めに

この記事は、[Aizu Advent Calendar 2021](https://adventar.org/calendars/6636)の12日目の記事です。
あと、誕生日です。

## 早押しクイズサイトとは

質問者が自由に、問題と解答を用意し、複数の解答者たちが早く答えるといったものです。

質問者用画面
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/467463/2ba7b475-26d8-50a8-49b2-8d0bd948c438.png)

解答者用画面(左が名前を入れるところ、右が解答を書くところ)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/467463/89681a6d-65b8-2c5f-1e9c-03e38430261e.png)

## なぜ作ったの?

授業でチームで動画を撮ることになった

元記事を表示

Go製のCGIからSlackに投稿する

## はじめに

やったことはタイトルの通りですが、ひさびさにGoを触ってみようと思ったので軽く試してみました。
参考にあげてる記事を適当にそのままくっつけただけです。

## 環境

– go: 1.17.5
– Apache: 2.4

## Slack投稿準備

[Slack API を使用してメッセージを投稿する](https://zenn.dev/kou_pg_0131/articles/slack-api-post-message) を参考に、ボット用トークンを取得する。

– workspaceにアプリを作成
– `Bot Token Scopes`に`chat:write`を設定(ユーザーは今回使わないのでパス)
– ワークスペースにインストール
– `Bot User OAuth Token`取得

## コーディング準備

標準パッケージ以外に`slack-go`パッケージも利用するので準備する。

“`bash
cd your-dir
go mod init example.com/m
go get -u github.com/slack-go/slack

元記事を表示

Zoomコメントから自由回答のクイズを集計してみた

この記事は
[Applibot Advent Calendar 2021](https://qiita.com/advent-calendar/2021/applibot) の記事になります。
前日は[@yuucu](https://qiita.com/yuucu)さんの「[テキストファイルに対してSQLを発行できるツール「q」& vimから使う「vimq.vim」の紹介](https://zenn.dev/yuucu/articles/vim-plugin-vimq)」という記事でした。

# はじめに

こんにちは、(株)Applibotでバックエンドエンジニアを担当している小川です。
昨年のアドカレでは[社内勉強会についての記事](https://qiita.com/dears31/items/eb9b612507ab9df3cd46)を書きましたが、
社内でエンジニア間での交流を推進する横軸組織の一員としても活動しています。

年末年始といえば忘年会や新年会…
コミュニケーション上大人数で開催したいが昨今のコロナ禍によって直接集まることは減り、
Zoomなどでのオンラインでのコ

元記事を表示

Goの乱数生成について調べてみた(ベンチマーク)

# 初めに
オークファンの開発部に2021年に新卒入社した@isodaです。
業務でGoの乱数生成を使用する機会があったので、いろいろ調べてみました。

# Goの乱数生成について

GOの乱数生成には標準パッケージで、math/randとcrypto/randの2通りの方法が存在しています。

## math/rand
https://pkg.go.dev/math/rand

– 特徴
– 乱数の元になる、シード値が必要
– セキュリティ性が低い

## crypto/rand
https://pkg.go.dev/crypto/rand

– 特徴
– 乱数の元になる、シード値が必要ない
– 暗号的に安全な乱数ジェネレーター
– LinuxおよびFreeBSDでは、Readerは利用可能な場合はgetrandomを使用し、それ以外の場合は/dev/urandomを使用します

# ベンチマーク用のプログラム作成
Goでは標準パッケージでベンチマーク用の機能があるらしく、そちらを使用しました

https://pkg.go.dev/test

元記事を表示

Go 構造体はポインター型にするべき?

この記事はエイチーム引越し侍/エイチームコネクトの社員による、[Ateam Hikkoshi samurai Inc.× Ateam Connect Inc. Advent Calendar 2021](https://qiita.com/advent-calendar/2021/hikkoshizamurai-connect) 12日目の記事です。
本日は**1歳児の育児でちょくちょく離席が多いパパエンジニア**@lostfindが担当します。

:::note info
誤った内容や日本語の指摘は大歓迎です。とても助かります。
:::

## はじめに?
11月に**「引越し侍 ネット見積もりサービス」**をリリースしました。
こちらのBackend ビジネスロジックは`Go`による`Clean Architecture`の概念をベースで開発しました。

( 当サービスの詳細な技術の構成については[1日目の記事](https://qiita.com/sho-hata/items/054c77392cc61bc2f3ac)と、[2日目の記事](https://qiita.com/an

元記事を表示

GitHub ActionsのパブリックIPアドレスをAWS WAFのIP Setに登録し、制限のかかったサービス(Amazon CloudFront)につなぐ

この記事は、[ニフティグループ Advent Calendar 2021](https://qiita.com/advent-calendar/2021/nifty)の12日目の記事です。

# はじめに
今年も早いものでもう3週間を切ってしまい、寒い日も多くなってきましたが、皆さんいかがお過ごしでしょうか。

私は、[映画「五等分の花嫁」](https://www.tbs.co.jp/anime/5hanayome/)や[アニメ「かぐや様は告らせたい」3期](https://kaguya.love/)が待ち遠しいなと思っています。

ちなみに「五等分の花嫁」の推しキャラは変わらず中野三玖です。そして、[ニフティグループ Advent Calendar 2020](https://qiita.com/advent-calendar/2020/nifty)に投稿した記事を読み返すと同じようなことを書いていますね。

https://qiita.com/shotaws/items/20b5fd64bebcaa0e9627

# 背景
現在、弊社ではいくつかのサービスでシステム基盤の刷新を進

元記事を表示

go doc コマンドを知る

この記事はCraft Egg Advent Calendar 2021の12日目の記事です。
昨日は[@kawase_ikuta](https://qiita.com/kawase_ikuta)さんの「スクラムっぽいことをやって感じたこと」でした。

## はじめに
チャットボットや社内ツールとして細々と導入し始めていたGo言語ですが、現在は新規プロジェクトのメイン言語となるなど、社内で使われる機会が少しずつ増えつつあります。
本記事では、そんな社内ツールを作成する際にちょうど最近気になって実装を読んだ`go doc`コマンドの仕組みについて解説していこうと思います。

ちなみに今回実装を読んだGo 1.17.3時点で`go doc`に関するコードはテストコードを除くと1500行弱です。
年末年始のお供としてもちょうどよいボリューム感なのでぜひみなさんも読んでみてください。

## `go doc`コマンドの使い方
まずは`go doc`コマンドの使い方について軽くおさらいしておきます。
ヘルプを見てみましょう。

“`sh
$ go doc -h
Usage of [go] doc

元記事を表示

【Go/TUI】使徒に侵食される気分になれるツール作ってみた

# 作ってみた

https://github.com/kuredev/ireul

![ireul.gif](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/50690/ed2a0ea5-2ae6-d60a-074e-4123a6278b13.gif)

### 感謝

以下ガイドラインを参照しています。

『エヴァンゲリオン』シリーズのファン創作物の公開に関するガイドライン

# 背景・動機

– Goの勉強
– TUIツールの作り方の勉強
– 楽しいことをしたかった

# 使い方

Linux/amd64の場合は[こちら](https://github.com/kuredev/ireul/releases)からバイナリをDLして、実行

“`zsh
wget [ireul_vxxx_amd64_linux.zipのURL]
unzip [zipファイル名]
chmodu u+x ireul
./ireul
“`

それ以外の環境ではGoの動作する環境で以下のように実施

“`sh
git clone g

元記事を表示

Goでmapをキー順にソートする

## mapは順序を持たない
Goでmapの値は順序を持ちません。
実際下記のようなプログラムを実行してみると、実行するたびに出力順序が変わることがわかります。

“`go
package main

func main() {
m := map[int]string{3: “c”, 5: “e”, 2: “b”, 1: “a”, 4: “d”}
for _, e := range m {
println(e) // この順番は実行するたびに変わる
}
}

“`
Go Playgroundでコードの実行ができます。
https://go.dev/play/p/jqXOpZiGafd

## 順序を保証するには
mapが保持しているデータの順序を保証するには、配列かスライスに入れ直してソートするしかありません。
ただ、何も考えずにループで回しながら入れ直してソートすると効率が悪くなるので、そこはシンプルに行きたいところですね。
所要時間計測のために、1000万個のデータを格納しているmapを用意し、その値をソートしてみました。
そして、所要時間比較のためにイマイチの実装と

元記事を表示

[Go] gorpを使っていい感じにDBアクセスを分離したい

本記事は [Go Advent Calendar 2021](https://qiita.com/advent-calendar/2021/go) – カレンダー1 11日目の記事になります。

Advent Calendar参加2年目です。
今年も超絶ギリギリで準備していました。
(そういう運命なのか?)

# はじめに
私事ではございますが、最近転職をいたしました。
入社して最初にDB操作研修とAngular研修があったのですが、私はインフラ要員として入社したので、Angular研修はありませんでした。

Angular研修用の資料等を覗き見して、だいたいのことは今ある知識だけできそうだなと思いました。
ですのでAdvent Calendarに合わせてAngularでアプリを作って、勝手に一人研修を実施することにしました。
作成したアプリの話が気になる方は以下の記事をお読みください(読んでくださると嬉しいです:bow_tone1:)。

https://qiita.com/okkn/items/d30ea92b6c7ddbd257e8

そこで、バックエンドは例のごとくGo言語を採

元記事を表示

【PV】『Twitterと連携する掲示板サービス「AutoF2F」』の使い方が分かりづらいので,チュートリアルビデオを作ってみた.

先日公開したアプリケーションについての記事は下のリンクから飛べます.

https://qiita.com/Rezol/items/229d04cc243677962c48

アプリケーションのリンクはこちらです.

https://autof2f.herokuapp.com/

とりあえず,ビデオを見れば大まかな使い方がわかるはずです.
誰も書き込んでもらえなくて悲しいですが,個人開発なんてこんなもんなのかと痛感しました.

以上です.

元記事を表示

ラップ?、ラッパー?、サランラップ?となっていた僕がラッパー関数に惚れた瞬間

この記事は ITRC Advent Calendar 2021 の11日目の記事です.

前の記事は @teapod418 の 最近の`AWS CDKを使用してECSを手軽に構築する` です。

# はじめに
– 今年の自分は1年通してコツコツとGolangを触ってきました。WebServerを立ててchannelを使用したwebsocket通信をしたり、TwitterAPIを使用して擬似投票機能を作ったり、GoolgeMapAPIを使用してデートプランを提示したりと、、、。こんなに作ってもまだGolangという言語に対しては苦手意識があります。が、この1年でわからなかったことがわかるようになったということもありました。Websocket、channel、ラッパー関数,etc…

ということで今回はラッパー関数について少し紹介していこうと思います。

# ラッパー関数とは
– ラッパー関数。。。自分も以前どこかで聞いたことはありましたがどんな関数なのか全く分かりませんでした。ラップという言葉を聞いて一番最初に思い浮かぶんだのがサランラップでした。ラッパー関数はサランラップのように何

元記事を表示

【Go言語】gockで外部WebサービスAPI テストを書く

この記事は、弁護士ドットコム Advent Calendar 11日目の記事です。
前日は[akahiro Hayashi(ぴーや)](https://note.com/taka_piya)さんの「[スプレッドシートでプロトタイピングしたら、良いことしかなかった](https://note.com/taka_piya/n/n439c8835f5a7)」でした?

https://qiita.com/advent-calendar/2021/bengo4com

クラウドサイン事業本部プロダクト部でバックエンドのエンジニアをしているmoritamorieです。

ユーザーの方々により便利にサービスを使って頂けるように近年外部サービスとの連携が増えており、連携性を担保するための自動テストの重要度が高まっていると感じています。

日々の開発の中で感じているWeb APIテストのメリットであったり、外部APIをモックするGo言語のサードパーティライブラリ([gock](https://github.com/h2non/gock))の使い方を書いてみたいと思います。

2021年12月時点での

元記事を表示

実戦で役立つ4つの無名関数(Anonymous function) 利用パターン

この記事は [2021年Goアドベントカレンダー2](https://qiita.com/advent-calendar/2021/go) の11日目の記事です。

# はじめに
今年はGoでのWebアプリケーション開発をがっつりしてきました。
今回はそんな実開発で使って/見て学んだ無名関数の利用パターンを書いておこうと思います。

# 無名関数(Anonymous function)とは
関数を変数として扱うものです。
こんな感じで使えます。

“`go:hello_anonymous_function.go
func main() {
// 引数なし
sayWorld := func() {
fmt.Println(“world”)
}

fmt.Println(“hello”)
sayWorld()

// 引数あり
say := func(str string) {
fmt.Println(str)
}
say(“hoo”)
say(“bar”)

// 即時実行
func(str string) {
fmt.Println(str)
}

元記事を表示

OTHERカテゴリの最新記事