Go関連のことを調べてみた2020年10月06日

Go関連のことを調べてみた2020年10月06日

【Go】DBへのRead/Writeでエンドポイントを分けたい

# はじめに

レプリケーションに対応するため、DBのエンドポイントをRead/Writeで分けることにしました。
Go/Gorm2でどのように対応するか検討しました。

## 利用環境
– Go: 1.15.2
– Gorm2: v1.20.1
– Echo: v4.1.17

# 結論から

Endpoint別に複数のConnectionを持ったTypeに、Gormの各Methodをラップした。
こうすることで、connectionを利用する側はendpointを意識せずにDBへの操作を可能にしています。

“`db/connect.go
package db

import (
“os”

“gorm.io/driver/mysql”
“gorm.io/gorm”
)

type SqlHandler struct {
ReadConn *gorm.DB
WriteConn *gorm.DB
}

func Connect() *SqlHandler {
readConn, err := gorm.Open(GetDBConfig(“read”))
if err

元記事を表示

【Go】関数の書き方とか呼び出し方とか

# 内容
Go言語における関数の色々を忘れないように書いておきます。

## 関数の定義の仕方
“`
func 関数名() {
// まとめたい処理を書く
}
“`

## 関数の呼び出し方
“`
関数名()
“`

## 関数に値を渡す
“`
関数名(値)
“`

## 引数を受け取って使う

“`
funk main() {
// catを引数として変数animalに渡している
ask(“cat”)
}

funk ask(animal string) {
fmt.Printf(“%s/n”, animal)
}
“`

元記事を表示

GoサーバとDartクライアントではじめるgRPC

# はじめに
Go製のAPIサーバとDartクライアント(Flutterを想定)間の通信をgRPCで行う方法について書きます

[日比谷音楽祭おさんぽアプリ2020 開発の裏側を語る / サーバー編](https://engineer.dena.com/posts/2020.06/2020-hibiya-festival-server/)というDeNAの20新卒、21卒内定者の方の記事を参考にしたので共有しておきます。

また、なぜgRPCを使うと嬉しいのかは、Cloud Native Days Tokyo 2020の南 直さんのセッション [“Real World Migration from HTTP to gRPC”](https://event.cloudnativedays.jp/cndt2020/talks/14)を聞くとわかりやすいのでこちらも共有しておきます。リンクからアーカイブ動画に飛べます。

# 準備
.protoファイルから自動生成するにはprotocコマンドと周辺プラグインを使用する必要がありますがローカルにいろいろインストールするのは嫌なので、Dockerコ

元記事を表示

openTelemetryでGCPのtraceを使う方法

本記事ではopenTelemetryというオープンソースを利用して、GoogleCloudPlatform(GCP)のTrace機能で計測をする方法を記載します。今回のTrace対象はCloudRun上で実行します。

# openTelemetryとは
openTelemetryは、複雑化していくシステムの動作を分析するためのオープンソースです。実行された処理の時間計測をおこなう事で、ボトルネックや障害に繋がる原因を探す事ができます。openCensusという分散トレーシングのオープンソースがあり、openTelemetryはその後継になります。
[openTelemetry](https://opentelemetry.io/)

# Traceの構造
Traceを始める時に、まずはTraceIDという識別用のIDを作成します。このIDによりTraceの対象を一意にしたりSpanという計測区間との紐付けを行います。Spanは親子関係を持ち、計測の細分化をする事が出来ます。下の図は、1番上の親Spanを3分割して中央の子Span2をさらに詳細にトレースする構造になっています。

![

元記事を表示

Goの変数定義の仕方

# 変数定義の仕方

Bo☆Be☆Ro☆Ku
n番煎じ

“`Go:sample.go
// 宣言、代入
var s string
s = “string”

// 型宣言と代入を一緒に
var s string = “string”

// 型省略
var s = “string”

// var省略
s := “string”

// 同じ型で複数宣言
var s1, s2 string
s1, s2 = “s1”, “s2”
// 同じ値を代入はNG
s1, s2 = “s”

// 同じ型で複数代入
s1, s2 := “s1”, “s2”

// 別々の型複数宣言
var (
i int
s string
)

// 別々の型複数代入
var (
i = 1
s = “s”
)

“`

元記事を表示

Service Bus Queueを Azure SDK for Go で学んでみる (1)

Keda へのコントリビュートに際して、あまり触ってこなかった Service Bus の挙動について知る必要があったので、簡単に調査してみた。
ライブラリは下記のものを使用している。
* [Microsoft Azure Service Bus Client for Golang](https://github.com/Azure/azure-service-bus-go)
* [GodDoc servicebus](https://godoc.org/github.com/Azure/azure-service-bus-go#pkg-examples)

# Queue Client

Queueのオペレーションができるように認証を行う。ServiceBus と Queue は事前に作っている。接続のためには、ServiceBus namespaceの`ConnectionString` が必要なので、取得して、環境変数から渡すようにしている。`NameSpace`のインスタンスを`ConnectionString` を渡して作成し、`NameSpace` から `NewQueu

元記事を表示

Goでサウンドプログラミング(超入門レべル)

Nim言語でやったのを、Go言語でもやってみようと思います。
https://qiita.com/mk2/items/bc41f9dfee6669083dbb

# 「ド」の音を再生する

cgo経由でmmsystem.hを利用します。Goのコードですが、ほとんどCのような感じですね。

“`go
package main

// #cgo LDFLAGS: -lwinmm
// #include
// #include
// #include
import “C”
import (
“bufio”
“fmt”
“math”
“os”
“unsafe”
)

const (
SRATE = 44410
PI = 3.14159286
B_TIME = 1.0
F0 = 440.0
AMP = 40.0
DATA_LEN = int(SRATE * B_TIME)
)

func main() {
var (
hWave C.HWAVEOUT

元記事を表示

Join Azure Using Go 〜GoでAzureを始めたい&知りたい方々へ〜

2020年9月30日(水)にオンラインで「[★祝★Japan Azure User Group 10周年](https://jazug.connpass.com/event/186235/)」が開催されました。3年前の7周年の時にLTでチャレンジしたのですが失敗しており、また、Azure SDK for Goの学習を始めた今年が記念の10周年にあたるのも何かのGo縁だと思い、再度、祝辞(LT)枠にて申し込みさせて頂きました。

今回は事前に動画を投稿し、公開された物から順に各自で閲覧するという、私も初めて体験する形式でした。

– [Japan Azure User Group 10周年 – YouTube](https://www.youtube.com/playlist?list=PLqVktDzfvX5D0PE7Tok5OsudQzZ-qD6Mu)

今夏の私の「Microsoft/Azure x Go」活動の集大成として、力一杯作成したところ少々長めの動画となってしまいました。ダメ元で [JAZUG](https://www.facebook.com/jazug.jp) のコミ

元記事を表示

第2第3のプログラム言語を学び始める際に役立つ「とほほのWWW入門」というサイト

# とほほのWWW入門

http://www.tohoho-web.com/www.htm

第2第3の言語を本格的に勉強を始める前にさらっと学習したい際にかなりおすすめのサイトです。

入門書でよくみる「条件分岐とは」みたいな、多くの言語に共通している部分は省略してあったり、言語の特徴がまとめられている欄とかもあって、控えめに言って最高です。しかも広告もないです(むしろつけて)

言語の解説は、現在(投稿時)`JavaScript` `TypeScript` `Java` `perl` `PHP` `Ruby` `Python` `Go` `C#` `Rust` `shell` `FORTRAN 77` `C言語` が存在します。

知る人ぞ知る老舗のサイトみたいですが、是非多くの人にみてもらいたいということで共有させていただきます!
他にも多種多様の技術についての解説があるので、是非目を通してみてください。

元記事を表示

golang利用slack编写C2

最近在学golang,恰好看到demon分析的golang slack c2,便想着自己也来写一写。

# 配置slack
注册账号什么的就不说了。访问 https://api.slack.com/ 点击 `Start Building`
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/593424/dc3e5b61-4384-6b3c-0bf6-3c850bcd4716.png)

创建一个app
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/593424/ea267bba-e73e-0625-3680-b40a02c7c70f.png)

左侧`OAuth & Permissions` -> `Scopes` 配置token权限,暂时先配置两个,之后用哪个再加。

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

元記事を表示

ISUCON10予選に参加して学んだこと

## ISUCON10参加しました
Isucon10に同僚の[ToshihitoKon](https://github.com/ToshihitoKon)と一緒に開運パワーインチームとして参加しました。
名前の由来は社内で一時期流行した内輪ネタですw

去年の新卒1年目では仕事が忙しすぎて参加出来なかったので、2年目で少し余裕出来たし今年は参加するぞ!ということで参戦してみました。
初のISUCON!

弊社は何度かISUCONで優勝したり出題しているレジェンドがいるんですが、できれば同じくらいのレベルのメンバーと組んで自分の立ち位置を知りたいなということで、チームメンバーとして同期のToshihitoKonを誘いました。
一緒に仕事する機会も結構あったのでそういう意味でもコミュニケーション取りやすくて楽しかったですね。

ToshihitoKonはインフラが強かったのでインフラ方面をお願いし、僕はアプリケーションに専念する役割分担で進めました。
使用言語はGoです。

## 当日まで
ISUCON9の予選をMacのローカルのdockerで動かしてチューニングしてました。
http:/

元記事を表示

Golangで対話型CLIツールの作り方

golangで対話型のCLIツールを作成する。

コマンドを叩くと入力待ちの状態となり、
適切な値を入力するまで無限ループする。

## 必要なパッケージ
– bufio
– os

## サンプルコード
“`go
package main

import (
“fmt”
“bufio”
“os”
)

func main() {
fmt.Println(“stop と入力して下さい。”)
scanner := bufio.NewScanner(os.Stdin)
for scanner.Scan() {
if scanner.Text() == “stop” {
break
}
fmt.Println(“stop と入力されるまでループします。”)
}
fmt.Println(“終了します。”)
}
“`
“`go
// このメソッドで入力待ちとなる
scanner.Scan()
“`
“`go
// 正常に入力値を受け取ると true を返す
val := scanner.Scan()
fmt.Println(val)
// => tr

元記事を表示

Ruby微経験者がGo言語の基本的な文法を学んでみた

# 概要

Rubyを学習して半年たちたまには別言語を学びたいなと思いGoを少し触ってみました。

# RubyとGoの違い(FizzBuzz)

RubyでFizzBuzz問題をとく場合for,whileなど色々書き方がありますが今回はtimesメソッドで書きました。

“`fizzbuzz.rb
1..100.times do |i|
if i%15==0
puts “FizzBuzz”
elsif i%3==0
puts “Fizz”
elsif i%5==0
puts “Buzz”
else
puts i
end
end
“`

Goで書いた場合は下記のようになりました。

“`fizzbuzz.go
package main

import (
“fmt”
)

func main() {
for i := 0; i < 100; i++ { if i%5 == 0 && i%3 == 0 { fmt.Println("Fizz Buzz")

元記事を表示

KEDA ScaledJob の Podが自動削除されなかった理由と対策

KEDA の ScaledJobで、`successfulJobsHistoryLimit` で指定した個数以上になると、完了した Jobが削除されるようになるのだが、なぜか、Job で作成されたPodが削除されない。

“`go
func (e *scaleExecutor) deleteJobsWithHistoryLimit(logger logr.Logger, jobs []batchv1.Job, historyLimit int32) error {
if len(jobs) <= int(historyLimit) { return nil } deleteJobLength := len(jobs) - int(historyLimit) for _, j := range (jobs)[0:deleteJobLength] { err := e.client.Delete(context.TODO(), j.DeepCopyObject()) if err != nil { return err } logger.Info("R

元記事を表示

apollo federationをgqlgenで使う際にunable to bind to interfaceエラーが発生する

マイクロサービス化のためにApollo Federationを使おうと思ってgqlgenで試していたところ、`go run github.com/99designs/gqlgen`で`unable to bind to interface`エラーが発生。

自分はgoの構造体をschemaにマッピングしていたのだが、そこでエラーが発生していました。
gqlgenのコードを見るとgoのstructにはやさないとinterfaceを満たせないようなので、以下のようにIsEntity()メソッドを追加したところ、エラーが出なくなった。

“`
type User struct {
ID: int
Name: string
}

func (m User) IsEntity() {}
“`

元記事を表示

GoとDockerでLet’s try gRPC

**※ この記事は2019年11月7日に作成した [GoとDockerでLet’s try gRPC – LiBz Tech Blog](https://tech.libinc.co.jp/entry/2019/11/07/111548) と同じ内容です**

# はじめに
こんにちは!エンジニアの渡邊です。早いもので、11月でLiBに入社して丸1年がたちました。
このブログへの投稿も4回目になります。

前回の「[とってもRailsライクなサーバーレスフレームワーク「Ruby on Jets」を本番環境に導入した話](https://tech.libinc.co.jp/entry/2019/07/12/113215)」では、jetsの開発者である**[tongueroo氏](https://twitter.com/tongueroo)**や、Rubyの生みの親**[まつもとゆきひろ氏](https://twitter.com/yukihiro_matz)**をはじめ、多くの方にシェアをしていただき大変励みになりました!
みなさんありがとうございました。

今回はGoogleが開発した

元記事を表示

【Golang】 Go言語 ProducerとConsumerについて

今日はGoのProducerとConsumerというものについて学習したのでそれについてアウトプットしていきます。

##前提知識
– Goの基礎文法
– チャネル
– Goroutine

このあたりの知識があると今回の記事は理解しやすいと思います。
分からない方はチャネルとGoroutineについては僕の方でも記事を書いているので良ければ参考にしてください!
[【Golang】Go言語 channel(チャネル)について](https://qiita.com/Kiyo_Karl2/items/94a269632725eb100cd0)
[【Golang】Go言語基礎 Goroutineとは?](https://qiita.com/Kiyo_Karl2/items/626502fa116881933aad)

##Producer、Consumerとは?
まずは、以下の図をご覧下さい。
![スクリーンショット 2020-09-30 223000.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/6326

元記事を表示

apiにgo言語、フロントをreactの最小構成作った

よくフロントをreact、apiをgo言語でアプリケーションを書くので最小構成のリポジトリ作った

https://github.com/kosukeKK/simple-react-golang-app

構成

“`
├docker-compose.yml
├Web/
│ ├Dockerfile
│ └app/
└api/
├Dockerfile
└main.go
“`

“`
$ docker-compose up
“`

元記事を表示

Go×Qiita API×LambdaでTwitter Bot作った

# はじめに
Goを勉強しているのですが、自分から情報を探しにいくと当たり前ですが自分が欲しい情報しか得られません。全体的な知識を広げていくには様々な記事を読んだりする必要があると思うのですが、なかなか腰が重い。
ということで、QiitaのGoタグがついた記事をツイートしてくれるTwitter Botを作成しました!

[@BotQiita](https://twitter.com/BotQiita)
↑フォローしてね。

# アーキテクチャ
文章で説明してもわかるくらいの構成なのですが、アーキテクチャ図作ってみました。
![architecture.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/631794/f1a9c70e-9e61-fcb4-a3d8-228d77793753.png)

– Qiita APIでGoタグがついた記事を取得
– Twitter APIで認証&ツイート
– lambdaはGoで書かれており、cloudwatchで1時間毎に定期実行

といった感じになってます。

#

元記事を表示

【Go言語】mux + cors + alice でサーバーを作成する時に注意すること。特にCORS周りでハマったことについて。

## はじめに

[gorilla/mux](https://github.com/gorilla/mux)、[rs/cors](https://github.com/rs/cors)、[justinas/alice](https://github.com/justinas/alice)を組み合わせてサーバーを作る方法を紹介します。特に、パスによって適用するミドルウェアを分けようとした時に、CORSでハマったので、そこに関わる部分を重点的に説明します。掲載するコード中では、基本的にエラーを無視する書き方なので、適宜書き換えてください。また、コード中の `…` は単純に省略を意味し、文法的な意味はありませんのでコピペする際は注意してください。

## tl;dr

プリフライトリクエストの `OPTIONS` メソッドに気をつけましょう。

## mux、cors、aliceの簡単な概要

いくつかの例を示しますが、それぞれのREADMEに書かれているような基本的な内容ですので、分かっている方は[実装本題](#実装本題)まで飛ばしてください。

### gorilla/mux

mu

元記事を表示

OTHERカテゴリの最新記事