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

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

Backlog GitのWebフックを利用して自動デプロイの真似事をしてみる

# 前書き
[株式会社ピーアールオー(あったらいいな!を作ります)Advent Calendar 2021](https://qiita.com/advent-calendar/2021/pro-japan1) の4日目になります。
今回は、Backlogの[Git Webフック](https://backlog.com/ja/enterprise-help/userguide/userguide1581/)を自作のAPIで処理する方法を紹介したいと思います。
~~ちなみに、依頼されて作ったはいいもののなぜか使用されなかった、なんならそもそもSTG(相当)サーバすら作られなかったらしいので、その供養も兼ねています。~~

# 目的
弊社の新人研修では、BacklogのGitを使用してコード管理をしています。
作った成果物については、各自のローカル環境で動かす他、STG(相当)サーバにデプロイすることもあるようです。
これに伴い、研修担当者から以下の依頼がありました。

“`
Gitに上がったらSTG(相当)サーバに自動デプロイする仕組みを作ってほしい
> ソース管理 Back

元記事を表示

Bitfield を使った json.Marshal/Unmarshal の例

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

`encoding/json` パッケージには Marshaler/Unmarshaler インターフェイスがあります。
インターフェイスの実装を満たす構造体であれば、jsonをGoのデータへマッピングすることや、jsonデータをシリアライズして出力することが出来ます。

“`go
type Unmarshaler interface {
UnmarshalJSON([]byte) error
}
“`

“`go
type Marshaler interface {
MarshalJSON() ([]byte, error)
}
“`

https://pkg.go.dev/encoding/json

`UnmarshalJSON` は、インプットの json データをハンドルして Go の型へ変換したい時、

`MarshalJSON` は、Goの構造体などを json データへシリアライズして出力する際などに利

元記事を表示

OSSのglTFライブラリにPull Requestを出した件について

この記事は[クラスター Advent Calendar 2021](https://qiita.com/advent-calendar/2021/cluster)の12/3の分です。
昨日は [hattori88](https://qiita.com/hattori88) さんの 「[clusterに暮らすキャラクターAIについて思うことと、つくり方 ( Living AI in cluster )](https://qiita.com/hattori88/items/29781a8361ab830cd9e7)」でした。メタバース上でのキャラクターAI…とても興味ぶかいですね。

今年の7月からクラスターに所属している[neguse](https://twitter.com/neguse)と申します。
この記事では以下のPull Requestを解説します。

https://github.com/qmuntal/gltf/pull/42

#背景

クラスターにはGoでglTFを扱う処理が存在しており、そのために[qmuntal/gltf](https://github.com/qm

元記事を表示

beegoとgormでチャットapiを作成する

flutterのチュートリアル?codelabs(https://codelabs.developers.google.com/codelabs/flutter)
でチャットアプリの作成をやっている中で、チャットのメッセージ情報を腹持ちしているのをapiから取得したいと思いbeegoでサクッとapiを作成しました。

コード(https://github.com/fu-yuta/go_friendly_chat/tree/create_chat_api)

# 環境
go: v1.17
beego: v1.12.1
gorm: v1.9.16
mysql: v8.0.27 for macos11.6

# フォルダ構成
“`shell
├── conf
│   └── app.conf
├── controllers
│   ├── chat.go
│   ├── requests
│   │   └── chat.go
│   └── responses
│   └── chat.go
├── go.mod
├── main.go
├── models
│   └── c

元記事を表示

[Golang, Gorm]単方向リストの実装

Ginを用いたAPIでGormで単方向リストを用いたい際に、要素の追加、ソート済みのリスト取得の実装を行ったのでメモとして残してみました。
## ディレクトリ構成

go-app/svc/
├── components
│   ├── models.go
│   ├── repository.go
│   └── urls.go
└── services
   ├── models.go
   ├── repository.go
   └── urls.go

## モデルの条件
Serviceが一対多の関係で単方向リストとしてComponentを持つ
![Untitled.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1678850/80681311-a333-a076-6fb6-0cabf77a65da.jpeg)

## 仕様
以下2つの実装を行いました。

1. service_idから単方向リストの条件でソートされたcomponentsを取得
2. service_id, comp

元記事を表示

Goのsync.Mutex

研究で[quic-go](https://github.com/lucas-clemente/quic-go)を使っていて、`sync.Mutex`というのが出てきて使い方を調べたのでメモ。

## そもそもmutexとは

> In computer science, a lock or mutex (from mutual exclusion) is a synchronization primitive: a mechanism that enforces limits on access to a resource when there are many threads of execution. A lock is designed to enforce a mutual exclusion concurrency control policy, and with a variety of possible methods there exists multiple unique implementations for different applications.

([L

元記事を表示

【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

元記事を表示

OTHERカテゴリの最新記事