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

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

【Vonage】最新CPaaSのユーザ認証APIをSDKを独自実装しながら理解する【Go】

この記事は[最新CPaaSコミュニケーションAPIを比べる or 使ってみよう! 【PR】Vonage Japan](https://qiita.com/advent-calendar/2021/vonage2021)の3日目の記事です。

## この記事の内容
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1553191/66e883d9-4f15-1cad-8c2b-3ed46072277a.png)

– Communication Platform as a Serviceの**Vonage**さんのVerify APIを触ってみて得た開発知見を共有します。**Verify APIは簡単にSMSやTELを使ったユーザ認証を実現できるAPIです。**
– **ただAPIを触るだけじゃつまらない! & 私はGoで使いたいんや!**という個人的な思いから、公式さんから正式提供されていない**Go版のSDK**を作るところまでやりました。その実装についての紹介です。

作成したSDKは下

元記事を表示

これから始めるなら気にしたいGoの作法

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

# これはなに?
– あくまで筆者の主観で、Golangを使ったアプリケーションはこういった書き方が多い/こういう風にすると良さそう、を書き連ねる記事
– 「主観で」とはいえど、なるべく有名どころのライブラリなどを参考に持ち出して執筆します
– Golangの基本文法が分かる人向け

# インデントはタブが主流
– Golangのデフォルトがタブ
– 標準ライブラリやPlayground、有名なライブラリなどを見るとタブ採用が多い
– 参考: [timeパッケージのSleepメソッド](https://cs.opensource.google/go/go/+/refs/tags/go1.17.3:src/time/sleep.go)
– 参考: [Go Playground](https://go.dev/play/)

元記事を表示

Go APIでのAuth0 JWT認証ハンズオン

こちらは [GAOGAO Advent Calendar 2021 ことしもGAOGAOまつりです ](https://qiita.com/advent-calendar/2021/gaogao) の2日目の記事です。昨日の記事は [ますみんさん](https://qiita.com/mass-min) の [リバースプロキシをDocker Compose環境で実現する](https://zenn.dev/masumi_sugae/articles/84c40d20c82cdd) でした。

こんにちは、[GAOGAO](https://gaogao.asia) の案件に携わらさせていただいている [こうりん](https://github.com/Kourin1996) と申します。 よろしくお願いいたします。

この記事では、GoのAPIでAuth0のJWT認証をする方法をハンズオン形式で説明します。今回実装するコードは以下のリポジトリに公開します。

https://github.com/Kourin1996/go-auth0-example

## 実行環境
maxOS Big

元記事を表示

2021年,Go言語でお世話になったライブラリ/検討したけど導入しなかったライブラリ

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

今年、Go言語で新たにお世話になったライブラリや使用頻度が上がったライブラリを振り返ります。
けっこう今年は個人的にはGo周りは小ネタが多かったですね。。

# 2021年、お世話になったライブラリ
### [github.com/deepmap/oapi-codegen](https://github.com/deepmap/oapi-codegen)
Open API 定義からGo言語のサーバーとかRequest/Response/構造体やモデル定義とかをGenerateするやつです。
今年は一部プロジェクトで新たにOpenAPIでのスキーマ駆動開発をとりいれましたので、その際に導入しました。
選定の理由は Open Api 3.0- に対応していた中で当時の言及数が多かったからです。

基本的にはモデル生成のみ使っています。

“`bash
oapi-codeg

元記事を表示

generic な golang gRPC サーバをつくる

# まえふり
gRPC サーバを実装するには protobuf ファイルから各言語のコードを自動生成し、各 RPC ごとの処理を実装することが一般的と思われる。一方で、どんな RPC に対しても同様な処理を行いたい generic な gRPC サーバを実現したい場合、もう少し簡単に RPC の追加を行いたい。

C++ の場合、このような generic な gRPC サーバを構築する方法はよく知られているように思う。[ここ](https://groups.google.com/g/grpc-io/c/NVtCvwiwIcE)のフォーラムで言及されているし、 一例を挙げると envoy の [json_grpc_transcoder](https://github.com/envoyproxy/envoy/blob/main/source/extensions/filters/http/grpc_json_transcoder/json_transcoder_filter.cc) で似たようなことは実装されている。
また、 Java でも[同様なことができる](https://gro

元記事を表示

「IDOLY PRIDE」でGo、gRPC、Cloud Spannerに挑戦してみた

[QualiArts AdventCalendar](https://qiita.com/advent-calendar/2021/qualiarts) 2日目の記事は、「[IDOLY PRIDE](https://idolypride.jp/game/)」のバックエンドエンジニアをしている朝倉が担当します。

# はじめに

2021年6月にリリースした「[IDOLY PRIDE](https://idolypride.jp/game/)」では、QualiArtsのゲームバックエンドとしては初めてGo、gRPC、Cloud Spannerを採用しました。本記事では、それらの技術に挑戦した理由やリリース・運用を経験してそれぞれの技術の良かった点・苦労した点をまとめたいと思います。

それぞれの技術に対してバックエンドメンバーにアンケートを記入してもらい、そのアンケートをもとに(ゲームバックエンドでのユースケースにおける)良かった点・苦労した点を振り返りしました。次章から振り返りで話し合った良かった点・苦労した点を品質特性の軸で紹介していきます。

**アンケートの内容**
それぞれの

元記事を表示

1つのKubernetesクラスタで複数のシングルテナント向けの証明書を取り扱う

# 背景
あるところに、[Azure Kubernetes Service](https://azure.microsoft.com/ja-jp/services/kubernetes-service/)を用いたWebサービス公開に携わる一人のエンジニアがおりました。
ある日彼はこんなことを考えました。

(-“-)「今開発中の機能はサーバー負荷がかなり大きい…」
(-“-)「利用が集中すると他のユーザーに影響する恐れがある…」
(-“-)「でもユーザーによってはそういった形での業務影響が許されない…」
(・_・)!「よし、シングルテナント構成を取れるようにしよう」

そこで彼はハイパフォーマンスを要求するユーザー向けに個別のクラスタ構成を定義し、それぞれを別のnamespaceで動かすことを考えました。また各ユーザー向けには専用のサブドメインを切り、[Azure DNS](https://azure.microsoft.com/ja-jp/services/dns/)を用いてドメイン毎に別のクラスタが利用されるよう振り分けを行うことにしました。

めちゃ雑に図にするとこんな感じです。

元記事を表示

Go の image/color パッケージの color.RGBA に透明度を正しく指定する&過ちの共有

# まえがき
これは[株式会社ピーアールオー(あったらいいな!を作ります) Advent Calendar 2021](https://qiita.com/advent-calendar/2021/pro-japan1) 2日目の記事です。
初日は [pro_matuzaki](https://qiita.com/pro_matuzaki) さんの「[周回遅れで試すNotion API](https://qiita.com/pro_matuzaki/items/43d492f6491410e68e5d)」でした。
また本記事の内容は[個人ブログの記事](https://blog.84b9cb.info/posts/go-colorcode-to-rgba/)の再編です。

**開発環境**
go version go1.16.5 linux/amd64
# 要約
Go の image/color パッケージの color.RGBA に設定する RGB 値は、透明度を 0 ~ 1 に正規化した値を RGB 値に掛け合わせた値を用います。
つまり R: 162, G: 173, B: 5,

元記事を表示

【AWS SAM Go】Go*SAM で環境変数を導入するには

## 前提
AWS SAM を用いてAWSのリソースをコードで管理できるようにしています。(Infrastructure as Code)
今回はSAMでAWS lambdaを作成し、その上でGoで書かれた関数を実行できるようにしております。
また、今回利用するSAMはAWS SAM [テンプレート](https://docs.aws.amazon.com/ja_jp/serverless-application-model/latest/developerguide/sam-cli-command-reference-sam-init.html)を使用してサーバーレスアプリケーションを作って作成しました。
環境は“default“環境のみで動作させてます。

## 結論
ローカル起動時(sam local start-api / sam local invoke)とデプロイ時(sam deploy)とで、環境変数の読み込み方法には違いがあります.

### ローカル起動時に環境変数を読み込むには
#### 1. env.jsonを利用する方法
1. ルートディレクトリに“en

元記事を表示

Fake Time

# Overview
Fake Time for test. not best way.

# Detail
“`golang

var now = Time.Now

// if you want to use specify time, you call it. then replace time to argument valuen.
// then, you receive function is for revert original time module. for finish test, recommend call by defer
func switchFakeTime(t time.Time) (revertFakeTime func()) {
now = func() time.Time {
return t
}

return func() {
now = time.Now
}
}

fmt.Println(now())

revertFunc := switchFakeTime.(Time.Now())

fmt.Println(now(

元記事を表示

golangはじめました

# 概要
素人としてこの1ヶ月間Golangでアプリケーション作ることになりましたので、所感や実際調べたことについて共有し、少しでも参考になれれば幸いです。

# とりあえず現時点でのディレクトリ構成を貼ります

左が`root`ディレクトリで右が`src`ディレクトリ配下です。
`src`というディレクトリを切るかどうかで結構悩んでいましたが、とりあえず切ることにしました。

# IDE、開発環境、実行環境
**IDEは下記の理由でVSCodeにしました。**

元記事を表示

【Go言語】はじめてのGraphQLサーバ実装 | gqlgen

# この記事について

この記事は、Go言語でGraphQLサーバの開発をする方法を書きます。

### この記事で書くこと

– GraphQLのスキーマ定義
– Go言語でGraphQLサーバの開発方法
– フレームワークとして[gqlgen](https://gqlgen.com)を利用
– エラー処理
– 負荷対策
– N+1問題
– クエリの大きさ判定

### この記事で書かないこと

– Go言語の説明
– GraphQLの概要について
– バックエンドのデータベース(MySQL等)への接続方法

### ソースコード

この記事で紹介するコードはGithubに置いております。
https://github.com/hiroyky/go_graphql_server_sample

# 前提条件

– Go言語の基本的な知識があり、お使いのマシンでGo言語のビルドや実行ができる。
– GraphQLの概要について知識がある。

GraphQLの概要は[公式](https://graphql.org)が詳しく説明をしています。
また、2021年11月

元記事を表示

ファイルパーミッションでスロットがしたい

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

ファイルパーミッションでスロットするコマンドラインツールを作りました。

# 経緯

ある日、サーバ上のとあるファイルの実行権限を変更する事がありました。

“`bash
$ ls -lah sample_cmd
-rwxr–r– 1 jiro4989 jiro4989 0 Nov 21 15:14 sample_cmd*

$ chmod 0777 ./sample_cmd

$ ls -lah sample_cmd
-rwxrwxrwx 1 jiro4989 jiro4989 0 Nov 21 15:14 sample_cmd*
“`

この `chmod 0777`って数字が3つ並んでるからパチスロみたいだなーーーと唐突に思いました。[^1]
(パチスロやったことないですが)

[^1]: `chmod` は8進数モード以外にも `chmod +x` で実行権限をつけたり、`chmod u+rwx,o-x,g=r`など

元記事を表示

引越し業界初の新サービスを支えるバックエンドの技術

この記事はエイチーム引越し侍/エイチームコネクトの社員による、[Ateam Hikkoshi samurai Inc.× Ateam Connect Inc. Advent Calendar 2021](https://qiita.com/advent-calendar/2021/hikkoshizamurai-connect)一日目の記事です。

2021年も終わりが近づいて来ましたね〜!
初日は、エイチーム引越し侍でバックエンドを主に担当している**新卒2年目・完全感覚programmer**の@sho-hataが担当します!!

## はじめに
**「引越し侍 ネット見積もりサービス」**

https://hikkoshizamurai.jp/moving

というサービスを11月1日にリリースしました(β版)?
![Screenshot 2021-11-30 22.50.52.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/261575/72885172-7ed5-8591-50e1-99d88

元記事を表示

Go言語で整数を5バイトに押し込む簡単なお仕事

[![Github](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1646184/0e201e0c-e21f-a715-4353-142b23059ccd.png)](https://github.com/Soliton-Analytics-Team/GoUint40/) [![Open In Colab](https://colab.research.google.com/assets/colab-badge.svg)](https://colab.research.google.com/github/Soliton-Analytics-Team/GoUint40/blob/main/GoUint40.ipynb)

ご覧いただきありがとうございます。[ソリトンシステムズのセキュリティ分析チーム](https://www.soliton-cyber.com/)です。

Google Colaboratoryにアカウントをお持ちの方は、上の「Open in Colab」という青いボタンを押せば直接noteboo

元記事を表示

ghzでgRPCの負荷試験(Benchmark Test)を行います hz

## はじめに
gRPCの負荷試験の為に[ghz](https://github.com/bojand/ghz)というツールを使おうと思うのですが、「hz」の意味がわからず読み方がわかりません。?
ちょっと洋式トイレにも見えます。

## 基本的な使い方

### インストール方法

githubのどトップに書いてあるので説明するまでも感がありますが、一応。
MACerなのでbrewでインストールしております。

“` sh
brew install ghz
“`

### 実行コマンド

“` sh
ghz –config=./config.json
“`

### configファイルの中身

“` json:config.json
{
“name”: “Otsuka Test”,
“call”: “akame.Linebot.ReplyMessage”,
“host”: “0.0.0.0:50051”,
“total”: 15000,
“concurrency”: 300,
“connections”: 300,
“rps”: 3000,

元記事を表示

Cloud FunctionsをGo言語で動かす

# 概要

firebase で Cloud Functions を使ったときに、JavaScript と golang で作った function とで性能に差がでるかを簡単に確認したのでそのメモ

## firebase の Cloud Functions で Go言語使える?

らしい。のでやってみました。
やり方としては、以下参考の「[go言語でCloud Functions + FireStoreをhttpで使ってみた](https://www.wheatandcat.me/entry/2019/01/29/001032)」を参照しつつ、ざっくりとは次の手順で環境を構築しました

– firebase のコンソールでプロジェクトを作成
– firebase に javascript 版の Cloud Functions の関数をデプロイする
– golang で Cloud Functions の関数を作成し、GCP にデプロイする
– firebase のプロジェクトを使いまわして、GCP の Cloud Functions を作成するのがミソ

### 参考

元記事を表示

【os.FileInfo】ファイルの属性情報【Golang】

# はじめに
Golangでファイルに関するインターフェースの一つ、os.FileInfoを簡単に調べたのでメモ

# 定義

“`go
type FileInfo interface {
Name() string // base name of the file
Size() int64 // length in bytes for regular files; system-dependent for others
Mode() FileMode // file mode bits
ModTime() time.Time // modification time
IsDir() bool // abbreviation for Mode().IsDir()
Sys() interface{} // underlying data source (can return nil)
}
“`
その名の通り、ファイルの情報に関するインターフェース
FileInfoはファイル情報を取得するメソッドが使用できる

FileI

元記事を表示

【Golang/ goenv】goenv install -lで古いバージョンしか表示されないときの解消法

## 原因

goenvのバージョンが古い

## 解消方法

アンインストールしてから新しいバージョンをインストール

“`
brew uninstall goenv && brew install –HEAD goenv
“`

で解消しました!

元記事を表示

AWSLambda(Golang)×DynamoDBのローカル開発環境を整える

# 目的
AWS LambdaでバックエンドAPIを構築しているとき、関数の挙動を確認したいときは都度devにデプロイしていました。流石にローカルでの開発環境を整えたいと思ったのですがGoでの使い方の情報が少なかったので個人メモとしてまとめてみました。
今回はAPI GatewayがトリガーのLambda関数になります。
APIトリガー以外は
→[`serverless invoke local -f ` で十分らしいです](https://blog.70-10.net/2018/08/29/serverless-typescript/#4-code-classlanguage-textserverless-offlinecode%E3%82%92%E4%BD%BF%E3%81%A3%E3%81%A6%E3%83%AD%E3%83%BC%E3%82%AB%E3%83%AB%E3%81%A7%E5%AE%9F%E8%A1%8C%E3%81%99%E3%82%8B)

# 全体の流れ

以下のJavascript filesのところを今回はGolangにしてやってみます

元記事を表示

OTHERカテゴリの最新記事