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

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

GoでAtCoderをやる話

この記事は、[and factory.inc Advent Calendar 2021](https://qiita.com/advent-calendar/2021/andfactory)の 15日目 の記事です。
昨日は、@hagmonさんの「[【Flutter】アプリ起動時に未処理トランザクションを処理する方法](https://qiita.com/hagmon/items/18fa26307123de793d41)」でした。

# 概要
この記事では業務とは離れてますが、趣味で取り組んでいるAtCoderの話についてまとめてみたいと思います。始めてから半年ほどで、最近やっと水色になれました!この記事ではどんな感じでやっているか、水色になるまで、やって良かったことなどを雑多にまとめていきます。

https://atcoder.jp/users/GoSagawa
![Screen Shot 2021-12-14 at 22.20.19.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/145904/2

元記事を表示

AutifyのWeb APIクライアントを作成しました

この記事は[Autify Advent Calendar 2021](https://qiita.com/advent-calendar/2021/autify)15日目です。

AutifyのWeb API用のクライアントライブラリを作成したの少しまとめます。
https://github.com/trknhr/autify-go

# Autifyとは
自動E2Eテスト支援ツールです。私の所属している会社で採用されているため私も業務の時間で触ることが多いです。

# このライブラリはなにをするか
Autify Web APIを直接叩く部分をラップします。ユーザーにとってはGoでAPIを呼び出してそのデータを取得するのではなく関数を呼ぶだけで該当のAPIを操作できることになります。
https://autifyhq.github.io/autify-api/#/schedule/post_schedules__schedule_id_

# なぜ作ったか

Autifyのシナリオの中身まで検索したい時がありその時に即興でWeb APIのラッパー的なのを作っていたのでそれをライブラリと

元記事を表示

gonum.org/v1/plot が良かった話

# はじめに

この記事は Go Advent Calendar 2021 の 14 日目の記事です。(執筆時点で 15 日になりそうなのは内緒)
今回は以前簡易的なグラフを作る際に良かった `gonum.org/v1/plot` の紹介をしたいと思います。

# 背景

普段は Go を使ってバックエンドの開発を行っているのですが、たまにグラフをプロットするときがあります。
この辺のプロット周りのライブラリはどの言語にもあると思いますが、Go でも簡単にできないかなと思い探したところ、この plot に出会いました。
細かいグラフを出すのは結構たいへんですが、自分が思っているような簡単なグラフはすぐ生成できました。

# gonum.org/v1/plot で作ったグラフ

まず最初にこの plot で作成したグラフを紹介します。

### 近似数値微分法 を使った 3・5・7・9 点近似数値微分の誤差

![image_08-02.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/216929/c02

元記事を表示

Goで使用しない戻り値、引数は無視しよう

### 戻り値を無視する
この方法は結構使いますね。
関数から受け取った戻り値を使用せず放置すると、コンパイルエラーになってしまいます。

“`go
func main() {
s, ok := plus(1, 2)
println(s)
}
“`
ビルドしてみると

“`go
./main.go:4:5: ok declared but not used
“`

このような時に、使用しない戻り値を無視すると、問題なくビルドが通るようになります。

“`go
func main() {
s, _ := plus(1, 2)
println(s) // => 3
}
“`

## パラメータを無視する
戻り値を「\_」を使って無視するのと同様に、関数の引数も「\_」を使って無視することができます。

“`go
func doSome(_ int, _ int) int {
return 100
}
doSome(1, 2) // => 100
“`

では、一見無駄なように見えるこの機能は、どのようなケースで使われるのでしょうか。

実は、Goには「インターフェ

元記事を表示

Terraform Provider AWSのテストの書き方

[terraform provider aws](https://github.com/hashicorp/terraform-provider-aws)におけるテストの書き方について調べたのですが、Terraform自体のテストの書き方じゃなくてproviderの開発の話はあまりみつからなかったのでまとめました。

# 参考ドキュメントについて
公式の[Acceptance Tests](https://www.terraform.io/docs/extend/testing/acceptance-tests/index.html)
を読んで理解を深めました。

## そもそもどういうテストが行われているのか?
プルリクエストを作成するときにはAcceptanceTestがパスしていないといけないのでAcceptanceTestの書き方を主に記載します。
このAcceptanceテストではterraformのコマンドを実際に実行してAWS providerならAWS上にリソースの作成を行っていました。
なので内部ではterraformのスクリプトを用意してリソースの作成を行います。

元記事を表示

Go言語にジェネリクスが入りそうなのでモナドを作って遊んでみた

この記事は [Applibot Advent Calendar 2021](https://qiita.com/advent-calendar/2021/applibot) 14日目の記事です。
前日は @naotoritty さんの「[Goでのベンチマークツールを作ろうとした話](https://qiita.com/naotoritty/items/3766d2d1aeef7fd17904)」という記事でした。

# はじめに

こんにちは。 (株)Applibotに勤める**型理論信者**エンジニアです。
現在、Goにジェネリクスを導入する動きが進んでいます。
ジェネリクスが入ることでGoは**「ダックタイピングなインタフェース」と「ジェネリクス」を持つ言語**になります。
静的型付けの言語としてはなかなか面白い特徴だと思ったので、モナドを題材にしてこれらがどのように機能するか試してみることにしました。

※この記事は「モナド」と「ジェネリクス(パラメータ多相)」を理解している方向けです

## Goのジェネリクス

はじめに、Goに導入されるであろうジェネリクスについてざっくりと

元記事を表示

GoシングルバイナリDockerイメージビルドでハマったこと

こんにちは、株式会社medibaでバックエンドエンジニアをしている @mdbr92 です。
この記事は [mediba Advent Calendar 2021](https://qiita.com/advent-calendar/2021/mediba) の14日目です。
※記事の内容はあくまで個人の発信であり、会社を代表する意見や見解ではありません。

この記事では
Go 言語で記述した HTTP サーバプログラムを AWS ECS などで動かすために
シングルバイナリ Docker イメージを作成しようとした際に
ハマってしまったことを書きたいと思います。

# なぜシングルバイナリイメージにしたいのか?

Go言語で記述したプログラムはシングルバイナリ
(ランタイムを必要とせず単体で実行できるファイル)にビルドできます。

この実行ファイルのみを scratch(Docker の予約済みの最小限のイメージ)に乗せて
ビルドすると 10MB 前後の小さな Docker イメージを生成することができます。

イメージのサイズが小さいことで、
AWS ECR のようなレジストリへの保

元記事を表示

Goのソースコードのファイル名の末尾が_ios.goだとビルド対象にならない

# 問題
Goで以下のファイル名を使うと多くの場合に問題が生じます。
なぜでしょうか?

“`
hoge_ios.go
“`

# 解答
ファイル末尾の `_ios.go` がbuild constraintだとみなされるため。
Goにはビルド対象の環境毎にソースコードを変えることができるbuild constraintという仕組みがあります。

https://pkg.go.dev/go/build#hdr-Build_Constraints

そのため、Windows環境でのみ利用できる機能とLinux環境でのみ利用できる機能を混在させることもできます。
この指定はファイルの先頭に以下のように書くことができますが、ファイル名で指定することもできます。

“`go
// +build windows
“`

ファイル名で指定する場合は、ファイル名の末尾を `_windows.go` とすると、上記と同じ効果が得られます。

windowsやlinuxなどは良く知られたものなので、目にする機会も多いかと思います
しかし、このbuild constraintに指定できる対象は意

元記事を表示

エラーハンドリングをミスって大事故に

# はじめに
アドベントカレンダー初参加です!
とある企業でサーバーサイドエンジニアとして働いており、主にGoでAPIを実装しています。

今年に入って新規事業の開発を任され、色々やらかしを経験させていただきました。

その中でも一番のやらかしを自戒の念も込めて投稿したいと思います。

*特定を避けるために敢えて分かりづらく表現している箇所があります。その点ご了承くださいmm*

# 惨劇発覚前夜
とある会員制サイトのリリースを控えており、それに備えて色々準備を整えてました。
リリース当日はそれなりにアクセス急増が見込まれるので

– ALBの暖気申請
– フロントエンドサーバーのスケールアウト

等の対応を行いました。

今までも似たようなサイトをいくつかリリースしており、上記の対応でアクセスは捌けていたので今回も同様の対応で問題ないと思ってました。

リリース当日PM20:00 にサイトのURLを公開。

今までをはるかに上回るアクセスが来ましたが、特にサイトの表示につまることはなく、当日のリリース作業を終えることができました。

# 惨劇発覚
次の日、朝起きるとサポート用メアドに

元記事を表示

[Hands-On Serverless Applications with Go] やってみた感想

この記事は [Goのカレンダー | Advent Calendar 2021 – Qiita](https://qiita.com/advent-calendar/2021/go) の3つ目のカレンダーの14日目です。

## はじめに
表題通り、**Hands-On Serverless Applications with Go**という書籍を一通り読んだ感想を書きます。

初めて英語の技術書を読みながら手を動かしましたが、英語で書かれていること自体はいいのですが、**約400P**となると数日で読み終えるのは難しいですね。
この書籍は夏の夏季休暇中に読破したので、2週間ちょっとかけて私は読み終えました。

最近は、[Udemy](https://www.udemy.com/)を筆頭に自分で勉強しようと思ったときにセール中なら書籍を購入するよりも安く学習できるサービスも増えてきています。
しかし、実際の業務レベルのハンズオンになるとweb上のサービスだけでは難しいとも思います。
この書籍は初心者向けでは決し

元記事を表示

誕生日CTFにてコードゴルフを裏開催した話

本記事は[23卒のエンジニア職志望向けAdvent Calendar Advent Calendar 2021](https://qiita.com/advent-calendar/2021/23grads) の10日目の枠が空いていたので、登録された記事です。
11日目の記事は、@yamamoto-yuta さんの [SlackをTweetDeckぽく使えるChrome拡張機能を作った話](https://qiita.com/yamamoto-yuta/items/c9c5ea0912b02aa14e23) です。中々イケてるので、ぜひ読んでみてください!

# はじめに
今年も、誕生日なので初心者から中級者向けに、taskCTFを開催させていただきました。
開催はこれで3回目です([過去の開催レポート](https://qiita.com/task4233/items/09f112076eb5855eeed3))

正の得点を獲得した参加者は36人で、そのうち全完した参加者は8人(22.2%)でした。
ご参加いただいた方々、ありがとうございました :bow:
おかげさまで、今年も楽

元記事を表示

ターミナル上でポーカーのヘッズアップがしたい

こんにちは!株式会社アトラエで「転職サイトGreen」のエンジニアをしている浅水です。

この記事では、僕がポーカーのヘッズアップを愛用のターミナル上でやってみたい!!と夢見そして、
半分成功、半分夢半ばで挫折した話を書いていきたいと思います。

## 作ったもの
![gamen_test1.gif](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1743458/565d7d24-7ac5-4f35-e828-29ab4d80ea2e.gif)

こんな感じで、**[go_poker](https://github.com/klein-mask/go_poker)**というTUIで起動するポーカーゲーム(と言えるほどのクオリティではない)を作ってみました。

### 使用したもの
– **Go 1.17**
– **[tview](https://github.com/rivo/tview)**
– TUI作成のライブラリ的な

### できること
– ターミナルでテキサスホールデムのヘッズアップがなんと

元記事を表示

GoでDDDっぽいコードを書く方法をGo初心者が考えてみる

こちらは [ラクス Advent Calendar 2021](https://qiita.com/advent-calendar/2021/rakus) の13日目の記事です。

初めまして。今年の10月にラクスに入社した@Imamottyです。
入社して2ヶ月余りが経過しました。日々覚えることが多く大変ですが、成長を感じる毎日です。
新参者ですが、よろしくお願いします。

# テーマ:「アドベントカレンダー」のドメインモデルを考えて、GoでDDDっぽいコードを書いてみる

さて、本題ですが、チームで開発を担当するアプリケーションのバックエンドにGoを採用することになり、
せっかくなのでGoのコーディングの練習にもなりそうな形でアドベントカレンダーのテーマを考えました。

今回は **「アドベントカレンダー」** をテーマにドメインモデルを考えて、
DDDっぽくコーディングすることを目指していきたいと思います。

ちなみに[A Tour of Go](https://go-tour-jp.appspot.com/)をなんとか完走した感じのGo初心者なので、実装の稚拙さはお許しください

元記事を表示

【Golang】JSON を Unmarshal すると struct field tag `json: “ほげ”` not compatible with reflect.StructTag.Get 【bad syntax】

> Go 言語で JSON データを Unmarshal(Go オブジェクトにパース)する際に、JSON オブジェクトのキー名に日本語が使えないか試したら `bad syntax` エラーが出る。
>
> “`bash:エラー内容
> struct field tag `json: “ほげ”` not compatible with reflect.StructTag.Get: bad syntax for struct tag value
> “`

[「`”golang” json unmarshal struct field tag not compatible with reflect.StructTag.Get`」でググって](https://www.google.com/search?q=%22golang%22+json+unmarshal+struct+field+tag++not+compatible+with+reflect.StructTag.Get)も、日本語の情報がなかったので、自分のググラビリティとして。

## TL; DR

元記事を表示

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)です。

「人」を使って「荷」を「★」まで運ぶゲームを想定しています。
![aps24-l8ndd.gif](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/427090/5f7fba20-5f43-3047-3d25-beece8f5a57d.gif)

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

元記事を表示

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がマネージドサービスとして提供が開始されるようになるなど、今後も様々なミドルウェアの技術選定、メジャーバージョンの更新などで既存の技術を大きく入れ替える機会が増えるのではないかと思ってい

元記事を表示

OTHERカテゴリの最新記事