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

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

Treasure2022体験記【Matchong】

### はじめに

こんにちは!神奈川県の大学に通っている mayukorin と申します.本日は,今年の夏に参加した Treasure というインターンのことについて書きたいと思います!Treasure については他にも様々な方が記事にしているのでぜひ見てみてください!

– [Treasure2022に参加してきた](https://rio-1.hatenablog.com/entry/2022/08/31/182334)
– [Treasure2022に参加](https://note.com/akira4649/n/nf5d8aff0ecec)
– [「Treasure2022」企画への意気込みと概要について](https://techblog.cartaholdings.co.jp/entry/treasure2022-planning)
– [過去最大規模のTreasureへ!インターン裏側奮闘記](https://techblog.cartaholdings.co.jp/entry/treasure2022-report)
– [Treasure 2022で学生にFB

元記事を表示

OpenTelemetryからStackdriverにメトリクスを送る方法

# はじめに
本記事は[QualiArts Advent Calendar 2022](https://qiita.com/advent-calendar/2022/qualiarts) 15日目の記事です。
GolangでOpenTelemetryを使ってGCPのCompute(今回CloudRunでの検証)からTraceとMetricを転送する方法についての記事になります。
OpenTelemetryは、Trace機能はStableになったもののMetric機能に関してはまだAlpha段階( https://opentelemetry.io/docs/instrumentation/go/ )ですので、今後この記事の内容とは大きく変更される可能性があります。そのあたりはご了承ください。

# OpenTelemetryとOpenCensus
これに関してはググればおそらくたくさん出てくるので多くは書きませんが、Google社内で作られたCensusというライブラリが一般公開されたのがOpenCensusで、一方[CNCF](https://www.cncf.io/)でもOpenTr

元記事を表示

Casbinで学ぶアクセス制御モデルRBAC

このエントリーは [3-shake Advent Calendar 2022](https://qiita.com/advent-calendar/2022/3-shake) 15日目の記事です。

## 自己紹介
* サーバーサイドメイン(フロント、インフラチョットだけ)で18年くらいエンジニアやってます
* 2022年10月に面白そうということで株式会社スリーシェイクにJoin
* インフラ構築運用もバリバリできる**スーパーエンジニア**になりたい
* 趣味はスノボ・ビール・うさぎ
* Qiita初投稿、Advent Calendar初参加なので乱文ご容赦ください

## どんな記事?
プロダクトで利用しているCasbinというライブラリを使う中で、
アクセス制御モデルのRBACについて学んだのでそのご紹介です。
こんなことができるんだーという感じで気軽に読んでいただければ!

## Casbinとは
ACL、RBAC、ABACなどの様々なアクセス制御モデルでアクセス制御(≒リソース認可)を行えるライブラリです。
バックエンドAPIではリソースに対してのアクセスを制御するために使

元記事を表示

GoでDB接続からテーブル作成まで

# はじめに

Goの開発環境をDockerで構築していることを前提にすすめます
前日の記事でまとめているので、こちらを参考にしていただければと思います

https://qiita.com/does_not_exist/private/0f948f137a926928ae07

# やりかた

まずサーバーを立てます
今回はginの公式ドキュメントを参考にしました

https://gin-gonic.com/ja/docs/quickstart/

その後、Postmanからサーバー(localhost:8080/ping)にアクセスして結果が返ってくることを確認します

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2889192/107ed424-e783-ca7a-722e-b0b78407d6ee.png)

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2889192/5d2

元記事を表示

Go言語 + ElasticSearchで単体テストを実行する

:::note info
この記事は、Go Advent Calendar 2022 15日目の投稿です。
:::

https://qiita.com/advent-calendar/2022/go

# 1.はじめに
以前、Go言語+ElasticSearchを用いたプロジェクトに参画していたので、
その時に携わっていた「Go言語」+「ElasticSearch」で実施する単体テスト方法を2つ紹介します。
– ElasticSearchサーバーの動作をモックする方法
– TestContainersでElasticsearchのインスタンスを起動する方法

前提として、Elastic社がサポートしている公式の[Goクライアント]((https://github.com/elastic/go-elasticsearch))を利用します。
こちらのライブラリについては[この記事](https://qiita.com/shiei_kawa/items/d992f7fdd4c75906ea0b)をご参照ください。

今回の記事のソースコードは、[GitHub](https://gi

元記事を表示

迅速開発GoAdminでマスタ管理

### はじめに
これは 株式会社 RetailAI X Advent Calendar 2022 の 15 日目の記事です。

昨日は @Mikey さんの記事でした。[NFTはなぜ難しいのだろう?](https://qiita.com/esoul/items/f699b7e40766bba92e76)
本日は、[『迅速開発GoAdminでマスタ管理』](https://qiita.com/risei/private/499e357f8864e1dc71d2)について書いています。

### この記事の目的
go-adminの使い方法をまとめます:

サンプルコード:https://github.com/GoAdminGroup/example

### GoAdminのコマンドラインツールをインストールします。


GO111MODULE=on GOPROXY=https://goproxy.cn go install github.com/GoAdminGroup/go-admin/adm

### インストールした後、ver

元記事を表示

Goで平方根を求める、の一歩先

この記事は、[and factory.inc Advent Calendar 2022](https://qiita.com/advent-calendar/2022/andfactory)の **15日目** の記事です。
昨日は@cpp0302の[【IDEA】【GoLand】エラーハンドリングのライブテンプレートを作成する](https://qiita.com/cpp0302/items/311c9e8ed3ed03fd7e5b)でした。

この話は普段の業務とはほぼ関係のないちょっとしたパズルです。リラックスして読んでいただければと思います!

# 平方根を求めるのは簡単?

突然ですがGoで平方根を求めたいとします。正確には整数値を渡して平方根を超えない最大の整数を返す関数を作りたいとします。どうすれば良いでしょうか?

ちょっと慣れた方であればmathパッケージにあるのではないかと想像できるでしょうし、「Go 平方根」で検索すればmath.Sqrtという関数にはすぐに行き着くのではと思います。math.Sqrtはfloat64を受け取ってfloat64を返すなので変換をかけ

元記事を表示

Goのinternalパッケージを使いこなそう

## はじめに

どうも[ナレッジワーク](https://tenn.in/kw)の[tenntenn](https://tenn.in)です。

Goのinternalパッケージはご存知でしょうか?
本記事では、うまく使うととても便利なinternalパッケージについてご紹介します。

## internalパッケージとは

Goパッケージは、基本的には外部のモジュールに公開されます。
パッケージ内のどの識別子を公開するかは、先頭の文字を大文字にするかどうかで決まりますが、パッケージにはその機能はありません。

しかし、Goにはinternalパッケージ(内部パッケージ)という特別なパッケージがあります。internalパッケージは、モジュール外には公開されません。
また、internalパッケージの親パッケージおよびその子パッケージ以下からしか参照できません。

たとえば、以下のようなパッケージ構成があった場合を考えます。

“`
a
├── b
│   ├── d
│   └── internal
│   └── e
├── c
└── go.mod
“`

`a/b

元記事を表示

とっても便利なgoleakでゴールーチンリークを見つけよう

## はじめに

どうも[ナレッジワーク](https://tenn.in/kw)の[tenntenn](https://tenn.in)です。

本記事では、テストでゴールーチンリークを検出する便利なライブラリについて紹介し、その仕組について解説します。

## ゴールーチンリークとは

ゴールーチンリークとは、ゴールーチンが終了せず、ずっと残ってしまうことを指します。ゴールーチンが終了しないと、メモリも開放されないため、メモリリークが発生します。

たとえば、次のようなコードではゴールーチンリークが発生します。

“`go
package main

import (
“fmt”
“runtime”
)

func f() {
ch := make(chan int)
go func() {
for x := range ch {
fmt.Println(x)
}
}()
ch <- 10 ch <- 20 } func main() { fmt.Println(runtime.NumGoroutine()) // 1 f() fmt.Prin

元記事を表示

go toolが何をしてるのか知りたかったら-x -workを使うと良い

## はじめに

どうも[ナレッジワーク](https://tenn.in/kw)の[tenntenn](https://tenn.in)です。

この記事では、`go build`や`go run`、`go test`を実行する際のちょっとしたテクニックを紹介します。

## `-x`オプション

Goのツールチェインの内部では、コンパイラやリンカは`$GOROOT/pkg/tool/$GOOS_$GOARCH`にある別コマンドを実行しています。

“`
$ ls `go env GOROOT`/pkg/tool/`go env GOOS`_`go env GOARCH`
addr2line compile fix pack vet
asm cover link pprof
buildid dist nm test2json
cgo doc objdump trace
“`

これらのコマンドをどういう風に実行しているのか確かめたい場合は`-x`オプションを使うと良いでしょう。

たとえば、次のようなGoファイルをビルドして実行してみます。

“`go

元記事を表示

formatterの悩み

この記事は、[クラスター Advent Calendar 2022(2ページ目)](https://qiita.com/advent-calendar/2022/cluster)の14日目の記事です。
昨日は、@pocketberserker さんの、[会社に雑LTという文化があったので開催してみた](https://pocketberserker.hatenablog.com/entry/2022/12/13/232505)でした。

こんにちは、あるいはこんばんは。
Go歴3ヶ月の@homulerです。
クラスターではサーバーサイドエンジニアをやっています。

今回は、日々の開発でお世話になっている、Goのコードのformatterについての話をします。

### Gofmtとgoimports
Goは、公式が[Gofmt](https://pkg.go.dev/cmd/gofmt)というツールを提供していて、Gofmtを使っているかは別として、ほとんどのプロジェクトにおいて、コードはなんらかのツールを使って自動整形されていると思います。
空気のように存在していて、Go初心者が真っ

元記事を表示

【Go】chi の組み込み middleware にカスタムロガーを設定しようと思ってやめた話

# はじめに
– go の web フレームワークライブラリとして [chi](https://github.com/go-chi/chi) がある
– http リクエスト/レスポンスをインターセプトして共通処理をする middleware が差し込めるようになっている
– よく使われるものは chi が用意してくれており、自前で書かなくても使えるようになっている

# 経緯
– リクエスト処理中に panic した時用に、panic ハンドリングをする middleware を差し込みたかった
– chi が用意してくれているものがあるので、それを使おうとした
– これが内部的にエラーログを出力するが、デフォルトだと改行されてズラズラ出力されるので、それを構造化された形(json)で出力したかった
– アプリケーション内では [zap](https://github.com/uber-go/zap) を使っており、middleware 内でもそのカスタムロガーを使ってログを吐きたかった

# tl;dr
– ロガーをカスタムするのが面倒そうだったので、結局 chi の用意し

元記事を表示

【IDEA】【GoLand】エラーハンドリングのライブテンプレートを作成する

この記事は、[and factory.inc Advent Calendar 2022](https://qiita.com/advent-calendar/2022/andfactory)の **14日目** の記事です。
昨日は@doiheiの[【Swift】Encodableで可変パラメータを追加してみる](https://qiita.com/doihei/items/9abe1fd19555cfb4d352) でした。

# はじめに

Go言語は例外が存在しないため、エラーハンドリングを毎回する必要があります。メソッドを呼び出すたびにエラー判定をする必要があります。極端な例だと下記の状況も有り得ます。

“`go
func process() (int, error) {
aaa, err := funcAAA()
if err != nil {
return 0, err
}

bbb, err := funcBBB()
if err != nil {
return 0, err
}

元記事を表示

DockerでGo+MySQLの開発環境をつくりたい

# はじめに
Dockerで開発環境を作るアウトプットとして簡単にまとめてみます
goの始め方もまとめていますが、公式ドキュメントを参考にしてください

https://go.dev/doc/tutorial/getting-started

## ファイル構成
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2889192/b840244d-3860-e641-6d69-f52f94f25799.png)

.envはdbの環境変数、my.cnfはdbの設定項目に関するファイルになります

# やりかた
以下のファイルを作成して、上画像のファイル構成にします

“`Dockerfile
FROM golang:1.18.0
RUN apt-get update && apt-get install -y build-essential make

# vscodeの拡張機能のためにインストール
RUN go install golang.org/x/tools/gopls@lates

元記事を表示

TinyGo で自作キーボードを作ってみた

これは [モダン言語によるベアメタル組込み開発 Advent Calendar 2022](https://qiita.com/advent-calendar/2022/baremetal_embedded_modern_lang) 14日目の記事です。

この記事では、 TinyGo で作った自作キーボードを紹介していきます。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/63649/7cad64c5-c0cd-874d-b8f3-751426b85831.png)

## TinyGo とは

マイコンや WASM などの Small Places 向けの Go Compiler です。ここでは Go の文法でマイコン開発ができるもの、という程度の認識でよいです。

https://tinygo.org/

TinyGo + Wio Terminal という題材で TinyGo の使い方を解説した書籍「基礎から学ぶ TinyGoの組込み開発」も好評発売中です。
書籍の中でも、ごく

元記事を表示

GoでWebサーバーを作成する4 jwt認証 TESTについて

# はじめに
Goでjwt、TESTを実装するさいにしらべたことをまとめます。

## jwt

### jwtの基本 実装

以下2つの記事を参考にした。

https://iketechblog.com/go-jwt/#index_id3

https://qiita.com/yoheimuta/items/b17bfbac17c02d410f54

jwt-goパッケージの公式

https://github.com/dgrijalva/jwt-go

## ミドルウェア
https://qiita.com/tobita0000/items/d2309cc3f0dd32006ead

ミドルウェアでエラーがでたときの対策

https://qiita.com/tobita0000/items/d2309cc3f0dd32006ead

# TEST
### GoのTEST 基本
簡単にまとめられた記事
[[Go] テストを実行する(go testの利用)](https://www.yoheim.net/blog.php?q=20170903&fbclid=IwAR3tb_IJ

元記事を表示

GoでWebサーバーを作成する3

# はじめに
Golangをもちいてapiサーバーを作成するさいに調べたことをまとめます。

## Golangの基礎
### ポインタについて
ポインタは変数の値ではなく、変数が格納されてるアドレスをわたす。
引数やレシーバを関数内で書き換える必要がある場合や、大きな構造体や配列を扱う場合に使用するとよい。

https://zenn.dev/uji/articles/f6ab9a06320294146733

&は、変数からそのポインタを抽出するのに使用する。
*はポインタが指し示す変数の実体を抽出する。
*はポインタ型の宣言をするときに使用する。

https://qiita.com/tmzkysk/items/1b73eaf415fee91aaad3

### 変数の初期値
golangでは、明示的な初期値なしで宣言された変数にはゼロ値が与えられます。

https://go.dev/tour/basics/12
https://qiita.com/tenntenn/items/c55095585af64ca28ab5

### 委譲 embedded
GOでは継承は使えない 

元記事を表示

ClickCaptchaの突破方法

1 CAPTCHA画像をダウンロードします。

2 画像を [API](/api-docs#solving_clickcaptcha) に送信します。

## SDKを使用する場合 (推奨):

PHP

“`php
// https://github.com/2captchacom/2captcha-php

require(__DIR__ . ‘/../src/autoloader.php’);

$solver = new \TwoCaptcha\TwoCaptcha(‘YOUR_API_KEY’);

try {
$result = $solver->coordinates([
‘file’ => ‘path/to/captcha.jpg’,
‘lang’ => ‘en’,
]);
} catch (\Exception $e) {
die($e->getMessage());

元記事を表示

Goでベンチマークテスト

# 概要
この記事は、[CyberAgent PTA Advent Calendar 2022](https://adventar.org/calendars/7539)の12日目の記事です。
広告プロダクトチームでサーバーサイドエンジニアをやっています。
Golangの広告プロダクト実装において、システムパフォーマンスも意識しながら実装をしていたため、今回はGoにベンチマークテストについて書きます。

# Go Benchmark
Goのtestingパッケージには、ベンチマークを行う機能が提供されています。
“`go
func BenchmarkXxx(*testing.B)
“`
のように、関数の接頭辞に`Benchmark`を付けることで、ベンチマークテスト用の関数として見なされます。
`go test`に`-bench`フラグを付けることで実行可能です。

ベンチマーク用関数のサンプルは下記で、
“`go
func BenchmarkRandInt(b *testing.B) {
for i := 0; i < b.N; i++ { rand.I

元記事を表示

GoアプリのGoバージョンを1.11から1.19まで段階的かつ一気に上げた話

**\\\ みんせつ Advent Calendar 2022の第3日目の記事です ///**

[みんせつ Advent Calendar 2022](https://qiita.com/advent-calendar/2022/msetsu)

昨日の記事はHerokuについて(仮)ですが、一昨日の記事は「[みんせつエンジニアリングブログを開始するわけ](https://qiita.com/msetsu/items/cdab9c841d96cd4aa4c1)」でした。

Goが大好きなT郎です。

みんせつでは[創業当初](https://qiita.com/msetsu/items/cdab9c841d96cd4aa4c1)よりRuby on RailsでWebサービスを開発しておりましたが、一部のサービスにおいてGoのアプリを実装・運用しています。

## 作業の大変さの見積もり

着手する前に工数の見積もりをしました。Goのminor versionのアップデートは過去に定期的にやっていたこともあるので、1アップデートを9-10回繰り返すというサブタスクを頭に描き、

元記事を表示

OTHERカテゴリの最新記事