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

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

YouTube好き集合。Go言語でLIVEコメントをリアルタイム取得する

# はじめに

こんにちは。サーバーサイドエンジニアです。アドベントカレンダーということでクリスマスカラーの赤色にちなんで
赤い動画配信サービスYouTubeのネタです。

YouTubeは言わずと知れた動画配信サービスですが、最近ではLIVE配信によるサービスの盛り上がりを見せています。LIVE配信は動画配信者に対して視聴者がコメントで意思を伝えたりする双方向のコミュニケーションが可能になっています。

そんなLIVE配信のコメントですがAPIを利用して取得することができます。

今回はGo言語を利用して、簡単にLIVE配信のコメントを取得する方法をご紹介します。

![christmas_santa_sori.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/540446/055944f6-479f-7202-6470-a7eb4cdaa7ff.png)

# 技術
言語: Go
フレームワーク: Gin
すぺしゃるさんくす: YouTube API

# 準備
YouTube APIのページから事前に

元記事を表示

Goでいいね機能を実装してみた。

この記事は Aizu Advent Calendar 2021 の5日目の記事です

夏休み中にgo言語でそんな感じのコードを書いていたので、自分の復習も込めて記事にしてみます。
全てのコードはこちら
=> https://github.com/wt128/dbapiBygo/
## フレームワーク等
gin/gorm/mysql

## ER図とモデル![ergo.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1504436/1a630627-5787-9e75-6315-5368ee7b959a.png)
– いいねのモデル

“`
type Like struct{
ID uint `json:”id”`
PostID uint `json:”postid” gorm:”index:idx_name,unique”`
UserID uint `json:”userid” gorm:”index:idx_name,unique”`
User User `gorm:”forei

元記事を表示

Goコードを生成するprotocプラグインに入門する

この記事は CyberAgent 22 新卒 Advent Calendar 6日目の記事です。

https://adventar.org/calendars/6671

# 概要
protoファイルのデータ定義を元に様々な言語のコードを生成できるのがすばらしい!
しかも、なにやらprotocプラグインなるものを使えばprotoファイルを元にコードを生成できるらしい!
というわけで、以前protocプラグインを調べたことがありまして、今回はその時のことをまとめてみました。

Go言語でprotoファイルからGoのコードを自動生成するprotocプラグインに入門してみましょう。
Goのコードを自動生成したいなと考えている方などに参考になればと思います。

# protocプラグインの仕組み
まずはprotocプラグインの仕組みについて学びましょう。
こちらに関しては、先駆者の方の記事がめちゃくちゃ参考になります。

– https://qiita.com/yugui/items/87d00d77dee159e74886
– https://speakerdeck.com/popon01

元記事を表示

Lambda + Go + terraformでAWSの料金をSlack通知してみた

## はじめに

この記事は[mixiアドベントカレンダー2021](https://qiita.com/advent-calendar/2021/mixi) 6日目の記事です。
みなさまはAWSで運用しているサービスに毎月どれくらいのコストがかかっているか、サービスのリソースごとにどれくらいの料金がかかっているかを確認していますでしょうか。
今回は、AWSの料金を毎日Slackに通知するシステムをLambda + Go + terraformで構築したのでそちらをご紹介させていただきます。

## おすすめな人

– AWSにかかる料金を定期的に通知したい
– GoでLambdaをどう開発するか知りたい
– terraformでLambdaを管理する方法を知りたい

## アーキテクチャー
![aws_billing_notification.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2334784/760f4f85-cfdb-8b57-bad4-8c4b0e4df04d.png)

– Even

元記事を表示

GraphQL Serverを実装してみた

# GraphQL Serverを実装してみた

次のプロジェクトで _GraphQL API_ を使おう!という話になったので、
GraphQL ServerをGolangで試しに作成してみました。

Githubにサンプル実装のソースをコミットしましたので、ご参考下さい。

[tochukaso/graphql-server-sample]

## GraphQLとは

[GraphQL]とは、一言でいうと、

**SQL感覚で書けるAPI** である

[graphql.org]によると、以下の通り

“` text
GraphQL is a query language for APIs and a runtime for fulfilling those queries with your existing data.
GraphQL provides a complete and understandable description of the data in your API,
gives clients the power to ask for exactly wh

元記事を表示

Go Linter – Staticcheckを使ってみる

この記事は[Wanoグループ Advent Calendar 2021 5日目](https://qiita.com/advent-calendar/2021/wano-group)の記事になります

Goには様々なlinterが存在しています。
元々Go公式のlinterはGolintですが、色々否定的な意見は少なく、今年ついにアーカイブされました。

代わりに使用するlinterとして GoやGoogleがサポートするStaticcheckが使ってみようかなと思います。

### 公式page (前身はGoSimple)

https://github.com/dominikh/go-tools

### Install

go 1.17なら、以下のcmdで実行 (過去versionの場合、go installじゃなくgo get使うかも)

“`
$ go install honnef.co/go/tools/cmd/staticcheck@latest
“`

### 実行

早速使ってみる

“`
$ staticcheck ./…

…(略)
xxxxxx

元記事を表示

Rubyやってた人間がGo始めて思ったこと

この記事は、[フラー株式会社 Advent Calendar 2021](https://qiita.com/advent-calendar/2021/fuller-inc)の6日目の記事です。

5日目の記事は [@m-coder](https://qiita.com/m-coder) さんによる [DroidKaigi2021に登壇した話](https://note.com/m_coder/n/n74901d195d83) でした。

私は元々Ruby on Railsで開発をしていたのですが、最近転職しまして、Goに入門しました。
Goやり始めて「へぇ〜」と思ったことを書いてみます。

## 型があるとうれしい

私は静的型付けの言語をこれまであまり触ったことがなかったのですが、型がちゃんと決まってるとありがたいですね。

エディタ(VSCodeを使っています)の補完機能がバリバリ効いて、

– この変数にどんな値が入っているのか
– この変数はどんなメソッドが使えるか
– このメソッドにどんな値を入れればいいか

などを教えてもらえるので、サクサクコードを書き進められ

元記事を表示

fmtパッケージをインポートするとファイルサイズがどかんと増えてしまう理由

[Goアドベントカレンダー3](https://qiita.com/advent-calendar/2021/go)が穴が空いていたので小ネタを投稿してみます。

@masa_itoさんがGoConで、[Contextを完全に理解する](https://future-architect.github.io/articles/20211119a/)という発表をしました。その発表資料のP44に次のような記述があります。

![スクリーンショット 2021-12-06 1.54.05.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/6105/bf47e197-d734-1381-1fa9-d6de91b8ed29.png)

会社のチャットで「fmtを使えば済みそうなところを、それを使わずに周りくどいことをしている」と発表資料を作っているときに@masa_itoさんが書いていて、僕が「fmtをインポートするだけでファイルサイズがかなり大きくなりますしね」と答えていたのですが、じゃあ何がでかくなるのかなってあたり

元記事を表示

[Go言語] Airを使って最短でホットリロードを実現する

## 環境

以下の実行環境で動作を確認しています。

“`bash
$ go version
go version go1.15.4 darwin/amd64
$ docker -v
Docker version 20.10.10, build b485636
$ docker-compose -v
docker-compose version 1.29.2, build 5becea4c
“`

## ホットリロードのライブラリといえば色々ありますが・・・

最近では[Air](https://github.com/cosmtrek/air)が1番流行っているようです。サクッと試してみます。

![スクリーンショット 2021-12-05 23.31.36.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/217116/470f3cd1-2226-a53b-b4d9-aa064b530fde.png)
[Star History](https://star-history.com/#cosmtrek

元記事を表示

Go の log.Fatal は気軽に使ったあかん!

## log.Fatalはアプリケーションの実行が終了されるので、気軽に使うのはやめましょう!

`log` pkgの中身は以下

“`go
// Fatal is equivalent to Print() followed by a call to os.Exit(1).
func Fatal(v …interface{}) {
std.Output(2, fmt.Sprint(v…))
os.Exit(1)
}
“`

`os.Exit(1)` されてるので、アプリケーションの実行が終了される。
なのでとりあえずログに吐きたい時は `log.Println` などにしましょう。
`log.Println` だとexitされないです。

`log.Println` のsrcは以下

“`go
// Println calls Output to print to the standard logger.
// Arguments are handled in the manner of fmt.Println.
func Println(v …in

元記事を表示

TDD+DDD実践:ゆめみさんの模試

こんにちは、HCB Advent Calendar 2021の5日目を担当する、take-2405です。
[HCB Advent Calendar 2021](https://qiita.com/advent-calendar/2021/hcb-2021)

ハッカソンの記事を書く予定でしたが、急遽変更してしまいました。ごめんなさい?

今回は、TDD、DDDを書籍で学んだのちに、実際にコードを書きながら理解を深めた過程を書きたいと思います。

# この記事について
この記事は、「TDDとDDDについて学んだから実践してみたい」ということでゆめみさんが公開している模試問題に取り組んでいます。
TDDの開発サイクルとオニオンアーキテクチャを意識して問題に解答しました。

# 取り組んだ問題
今回取り組んだ問題は、ゆめみさんが公開している模試問題です。
内容は、とあるゲームのスコアログをソートし、上位10位のスコアに概要するプレイヤー一覧を表示するという問題です。

詳細は下記ページをご確認ください。
https://www.yumemi.co.jp/serverside_recru

元記事を表示

Go言語でMentaの売上をfreeeに登録するCLI開発

この記事では教育プラットフォームであるMentaの売上情報をダウンロードし、売上情報として会計サービスfreeeのAPIを利用し登録する流れを解説したいと思います。まだ連携先として追加されていない他のECサービス・収益化が行える配信サイト等を利用している方の参考にもなるかと思います。

Mentaとはプログラミング技術などを教える人・学習する人をマッチングするサイトです。私も1年以上メンターを行っており、累計50人近くの方に学習のサポートを行っています。現在調べてみたところ、このサイトの収益情報を自動登録できる会計ソフトは存在しないようなので、APIを通じてfreeeへ取引を登録するための簡単なCLIを作成しました。

https://menta.work/user/13264

成果物はこちらに掲載しています。

https://github.com/kamijin-fanta/freee-menta-importer

## freeeでの収支の入力方法を理解する

Mentaは入金から30日以上経過した売上について出金の申請が行なえます。契約者毎に支払タイミングが異なり、毎月支

元記事を表示

独自KVSデータベースを作ってみた

# 初めに
オークファンの開発部に2021年新卒入社した@isodaです。
題名の通り、独自KVSデータベースの設計と開発(実装は途中)を行いました。

# 経緯
通信プロトコル、ファイルシステム、バイナリなどの理解。
Goを使用した開発や1から設計を行う経験の為、研修の一環として、今回の独自KVSデータベースの設計と開発を行わせて頂きました。

# 通信プロトコルの設計
通信はTCPを使用し、バイナリデータでのやり取りを行います。

– DBサーバーへのリクエスト
– KeyとValueを送る際に、どこまでがKeyでどこまでがValueなどを識別するために、識別文字を入れる方法もありますが、
今回はバイナリセーフにしたいためKeyとValueのサイズを通信に内包する方法にしました
– DBサーバーからのレスポンス
– Create/Update/Deleteの際は正常を示す値(0x00) or 異常ならエラーコード
– Readの際は正常系はリクエストのKeyに対応するValueの値 or 異常ならエラーコードが返ってくる

## Create/Upda

元記事を表示

GoならわかるWindows API

この記事は[Goアドベントカレンダー](https://qiita.com/advent-calendar/2021/go)の5記事目です。
WindowsのAPIを叩いて遊んでみた記事です、あまりGoっぽくないです。

## ターミナルに文字を吐く以外のことをやってみたい

何らかの処理を行い、その実行結果をターミナルに出力するのはどの言語でもprint系の関数を利用すれば簡単に行う事ができます。
ターミナルに依存せず、起動するとGUIのウインドウが立ち上がるアプリケーションはいったいどのような仕組みで動いているんだろう、と疑問に思いました。

### ウインドウを自力で生成する方法を探す

普通にGUIアプリケーションを作りたいときはフレームワークに頼るでしょう。
[gotron](https://github.com/Equanox/gotron)や[fyne](https://github.com/fyne-io/fyne)、[qt](https://github.com/therecipe/qt)など様々な選択肢があります。
しかし今回は仕組みを学ぶことに意義があります。

元記事を表示

【Go】VsCodeで環境構築をやってみた

## はじめに
ブロックチェーンの勉強を行っていると、結構Go言語の話が出たり求人とかもGo言語が求められているので、
今後必要になりそうだなーと思ったので早速Udemyで講座を購入し、勉強をはじめました!!
が、収録されている時からGoのバージョンが上がっていて`go get`が使えなかったりして地味に環境構築に時間が取られたので、他の方にも参考になればと思い投稿することにしました。

>Udemy 講座
[現役シリコンバレーエンジニアが教えるGo入門+応用でビットコインのシストレFintechアプリの開発](https://www.udemy.com/course/go-fintech/)

# 環境
“`
OS : Mac
エディタ : VScode
Go : 1.17.4
“`

注※本記事ではVscodeのインストール方法は記載しておりません。

# Goのインストール

[Downloads](https://go.dev/dl/)のサイトからパッケージをダウンロードして、インストールしました。

![スクリーンショット 2021-12-04 1

元記事を表示

Tour of Goのスライスの挙動で引っかかってたら、色々分かった話

#目次
– [はじめに](#はじめに)
– [対象の読者](#対象の読者)
– [この記事で伝えたいこと](#この記事で伝えたいこと)
– [スライスとは](#スライスとは)
– [スライスのスライシング](#スライスのスライシング)
– [どこで引っかかったか](#どこで引っかかったか)
– [スライスの代入は元の配列のポインタを渡す](#スライスの代入は元の配列のポインタを渡す)
– [スライシングの仕様](#スライシングの仕様)
– [まとめ](#まとめ)
– [参考](#参考)

#はじめに
この記事は [カオナビ Advent Calendar 2021](https://qiita.com/advent-calendar/2021/kaonavi) 5日目です。

初めまして!カオナビに新卒で入って現在2年目の@summer_shineです。

最近、自分が新しく所属することになったチームで、初めてGoを触ることになりました。
その際に、[A Tour of Go](https://go-tour-jp.appspot.com/list) (Goのチュートリアルができる場所

元記事を表示

マイクロサービスにひそむ複雑さに立ち向かう

# はじめに
はじめまして。Kyashでサーバサイドエンジニアを担当しているhirobeです。
[Kyash Advent Calendar 2021](https://adventar.org/calendars/6274)の12/5担当分です。

Kyashでは、約30ほどのマイクロサービスが動いてます。
マイクロサービスは難しいです。

私が入社して2年半ほどの間、マイクロサービスの複雑さに苦しめられ、あがいてきた実経験をもとに、マイクロサービスにひそむ難しさを紹介したいと思います。

ここでは、ケースとして、弊社の機能のひとつである[登録カードからのリンク](https://support.kyash.co/hc/ja/articles/360001524948)を実装する上で発生する問題を紹介したいと思います。もちろん弊社サービスを使ったことない人でもわかるように説明をしますのでご安心ください。

なお、最初に注意書きしておくと、本ブログではあくまで「マイクロサービスにひそむ複雑さとその対応法」を説明するためのわかりやすさを優先して説明していきます。事実とは異なるケースがあり

元記事を表示

Goのルーティングの設定の基本

備忘録です。

Goの基本的なルーティングの設定を記載します。

フレームワークである gin を使って説明を行っていきます。

## ファイルにルーティングを設定

“`go
package main

import (
“log”
“net/http”

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

func main() {
r := gin.Default() // ginのEngineインスタンスを生成
r.GET(“/”, sampleFunc) // ルーティング設定
r.Run() // サーバに接続。HTTPリクエストを受け付ける
}

func sampleFunc(c *gin.Context) {
log.Println(“I am sampleFunc”)
c.JSON(http.StatusOK, gin.H{“message”: “HELLO!”})
}
}
“`

コマンド実行

“`bash
go run main.go

[GIN-debug] [WARNING] Creati

元記事を表示

いいかんじにAWS上のネットワーク構成図を作りたいから手鍋した話

この記事は[ディップ株式会社 Advent Calendar 2021の](https://qiita.com/advent-calendar/2021/dip-dev) 5日目の記事ですっ

4日目は @bikun_bikunさんの [SendGridのDynamicTemplateでハマった話](https://tech-note.bikunbikun.com/entry/2021/12/04/162742) でした。
これはなかなか気づけない仕様ですね・・linterが欲しいレベルです・・

# やったこと

**ネットワーク構成図だけを描くシンプルなツールを書いた**。
~~やってみたかっただけのスカンクワーク~~

# 現状の課題

– **クラウドに移行したサーバーのネットワーク管理がぱっと見レベルの可視化ができていない**

簡略化した可視化が出来ていないので、セキュリティレベルを上げるための許可ポートのリファクタとか
何かあったときの侵入経路みたいなのがサクッとレベルで分からない。

# 実現したい事の分析

– **リスクがある通信の流れ**
– **リソース障害発

元記事を表示

【個人開発】大学生がTwitterと連携する掲示板サービス「AutoF2F」をリリースしました。

## はじめに

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2286935/c1b9144b-bcd0-8e17-7dd4-009787743cbf.png)

https://autof2f.herokuapp.com/

突然ですが、皆さんはこんな経験はないでしょうか?

**「Twitterで誰をフォローしたら良いのかわからない、なにかフォローをする基準が欲しい」**

今回は、↑のような問題を解決するために匿名掲示板サービスとTwitterを連携することで自動的にフォローマッチングを行うようなサービスを開発しました!!!

## どのようにしてフォローの基準を設けたのか?

内部パラメータに友達カウンタという、あるユーザがあるユーザに対して何回匿名掲示板の投稿にいいねをしたかを記録したものを用いました。その値をベースにフォローの基準を設けました。

![image.png](https://qiita-image-store.s3.ap-northeast-1.a

元記事を表示

OTHERカテゴリの最新記事