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

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

terraform-provider-awsへ初コントリビュートできた話

# はじめに
こんにちは![Wano株式会社] (https://wano.co.jp/)の[nari](https://twitter.com/fukubaka0825)と申します。
こちらは、[terraform Advent Calendar 2019](https://qiita.com/advent-calendar/2019/terraform) 20日目の記事として書いております。

この記事では、先月 [terraform-jp](https://terraformjp.github.io/)の有識者の方々のおかげで、[terraform-provider-aws](https://github.com/terraform-providers/terraform-provider-aws)へ初コントリビュートすることができたので、**その際のプロセスとこれからコントリビュートしていきたい皆様へ一点注意事項を共有していきたい**と思います。

元記事を表示

OpenTelemetryを使ったGoのアプリケーションのトレーシング

この記事は [Go5 Advent Calendar 2019](https://qiita.com/advent-calendar/2019/go5) 20日目の記事です。

## はじめに
以前[Kubernetes環境でのGoのアプリケーションのトレーシング](https://qiita.com/yuuyamad/items/b6078c08cca46163ce64)という記事を書きました。
この記事を書いた際には[OpenCensus](https://opencensus.io/)の[Jaeger](https://www.jaegertracing.io/)用のexpoterを使って[Jaeger](https://www.jaegertracing.io/)にデータを送信してアプリケーションのトレーシングをするということを試しました。

今回は[OpenCensus](https://opencensus.io/)と[OpenTracing](https://opentracing.io/)の2つのプロジェクトが統合された[OpenTelemetry](https://

元記事を表示

Pythonistaが伝える「ここがヘンだよGo言語」

[VISITS Advent Calendar](https://qiita.com/advent-calendar/2019/visits)も残りついに一週間を切ってしまいました。

見返してみると、とても幅広い分野の記事が書かれていて、社内の人間であっても「この人、こんな技術を持ってたんだ」のように驚かされることが多い毎日でした。

私にとっては2019年Advent Calendarの締めの記事となります!

# TL; DR

弊社のいくつかのプロダクトで **Go言語** でAPIサーバが実装されています。

昔からPythonばかり触ってきた筆者が、Go言語を一ヶ月半ほどですが業務でみっちり書いてわかった **Go言語とPythonの違い**について記事にしてみることにします。

題して、

**Pythonistaが伝える「ここがヘンだよGo言語」**

とりあえず某番組のタイトルを~~パクt(ry~~ リスペクトしてキャッチーなタイトルにしてみました(何

対象読者は次のように設定しています。

– **Pythonはよく使うけど、Go言語を書いたことがない人**

元記事を表示

golang.org/x/text 配下のパッケージをいくつか紹介する

## はじめに
今回は準標準の golang.org/x/text 配下のパッケージを紹介します。
ここではは主に多言語、多locale対応の際の文字列操作をサポートするパッケージが管理されています。
アジア圏などの文字管理に考慮事項が多いlocaleに関してはそれ向けに特化したパッケージなども提供されています。

今日はその中からいくつかのパッケージを紹介したいと思います。
これは [Go6 Advent Calendar 2019](https://qiita.com/advent-calendar/2019/go6) の投稿です(ちょっと遅刻しました)

## golang.org/x/text/number
doc: https://golang.org/x/text/number

このパッケージは、言語による数値表現の差分を吸収してくれます。
出力の際は同じく準標準のパッケージである https://golang.org/x/text/message をつかって出力できます。

例えば英語圏では数字3桁ごとにカンマを入れますが、そのようなケースでこのパッケージが利用できます

元記事を表示

これさえ見ればGoのポインタがわかる!というリンク集

[Go7 Advent Calendar 2019](https://qiita.com/advent-calendar/2019/go7) の 20 日目の記事です。
昨日見たらぽっかり空いていたので埋めます。

皆さんは値とポインタを適切に使い分けることができているでしょうか?
基礎的なところなのでちゃんと理解しておきたいものですね。

私はたまに使うと細かなところを時々忘れていて、毎回資料探しからやり直すことになって面倒でした。
そこで、わかりやすかったページのリンクをここにまとめておくことにしました。

公式ドキュメントの翻訳も載せていますので、よろしければブックマークしてお使いください。

# そもそもポインタがわからない方

まずは基礎全般を理解するのが良いと思います。

入門用のサイトや書籍で学びましょう。
(クリックで折り畳みを開閉)

* [A Tour of Go](https://go-tour-jp.appspot.com/list)
* 特に関連するのは「[M

元記事を表示

Goでmarkdown内のhclソースコードをfmtするCLIツール「tffmtmd」を作る過程で学んだことをまとめていく

# はじめに
こちらは[Go4 Advent Calendar 2019](https://qiita.com/advent-calendar/2019/go4)の19日目として書いております。
ギリギリ間に合った!!!

# 何を作ったか
**[gofmtmd](https://github.com/po3rin/gofmtmd) というcliツールにinspireされて、[tffmtmd](https://github.com/fukubaka0825/tffmtmd)というmarkdown内のhclソースコードをfmtするツールを作りました。**

スクリーンショット 2019-12-19 22.12.15.png

[gofmtmd](https://github.com/po3rin/gofmtmd) で

元記事を表示

GoでUFOを引っ捕らえる

いいっすよね。UFO。
あの愛らしいフォルムとか、中から何でてくるかわかんないミステリアス感とか…最高やん?

でも、皆さん実際に見たことあります?
もしかしたら………ないんじゃないですか?

「言われてみれば一度も見たことがない…?」
「小さい頃に見たあれは僕らの妄想なのか…?」
「UFOなんて本当はいないんだ…!!!」

と、不安な夜をお過ごしの方も多いと思います。

![pose_zetsubou_man.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/203944/2a7dd2b5-1e5f-d7d7-8d0b-4c0754fb2c18.png)

でも安心してください。

いるんです。

そう。アメリカならね。

![hakken_ufo.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/203944/e3b064f1-1d40-5a22-14c0-cdca8ee09ebc.png)

※これは [FOSS4G Ad

元記事を表示

眺めて覚えるGo言語

#眺めながら学習する超簡単言語!
## いきなりGOLANG
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/274715/8b26feee-97c6-4b1e-f4a4-5f2745dceb81.png)

“`ex1.go
package main
import (
“fmt”
)
func main() {
fmt.Println(“hello world”)
}
C:\Users\hirat\go-work\web\hello>go run ex1.go
hello world
“`
#お決まりのコンソール出力

“`ex2.go
package main
import (
“fmt”
)
func main(){
a:=10
b:=20
c:=a+b
fmt.Println(a,b,c)
}
C:\Users\hirat\go-work\web\hello>go run ex2.go
10 20 30
“`
#単純整数計算でした。
“`ex3.go
pac

元記事を表示

Go言語の crypto/xxx は New して Sum するより直接 Sum する方が速い

穴埋めで小さい Tips を紹介します。

ところでGoを書いてる皆さん、こんなコード良く見ますよね。

“`go
hash := md5.New()
r := hash.Sum(input)
“`

hash に対して繰り返し `Write` して、最後に Sum する様な処理だとこれで良いのですが `crypto` の下にあるパッケージの多くは `md5.Sum(input)` の様に直接、合計ハッシュ値を得られる様になっています。

“`go
package sum

import (
“crypto/md5”
“testing”
)

var input = []byte(“あめんぼあかいなあいうえお”)

func BenchmarkHashNewSum(b *testing.B) {
for i := 0; i < b.N; i++ { hash := md5.New() _ = hash.Sum(input) } } func BenchmarkHashSum(b *testing.B) { for i := 0; i < b.N; i++ {

元記事を表示

GKE中のGolangアプリケーションからCloud Pub/Subを使ってデータ連携を行う

GKEの中に稼働されるアプリケーションからどうやってGCPサービスにアクセスしたり、データ連携したりするか?という疑問がある方々に回答する記事をまとめました。
Pub/Subサービスを使って、サンプルとして作成しました。

手順まとめ

1. サービスアカウント作成&アクセス用のaccount.jsonファイル発行
– Pub/SubのTopic&Subscription作成
– Pub/SubをSubscriptionアプリケーションの準備
– ローカルで稼働確認
– Cloudbuildでアプリケーションのイメージビルド
– GKEのCluster準備
– GKEにアプリケーションをデプロイ
– 稼働検証

フォルダ構成

“`sh
accesspubsub
├── README.md
├── app
│ ├── handler
│ │ └── sample_handler.go
│ └── sample_app.go
├── cloudbuild.sampleapp.yaml
├── deployment.sampleapp.yaml
├── go.mod
├─

元記事を表示

GoでインストールからHello Golang!!

# 概要
MacにGoをインストールして、「Hello Golang!!」を表示させるところまでを解説していきます。
また、僕はシェルにfishを使っているので、fish向けの環境構築についても記載します。

# 環境
macOS Catalina 10.15.1
Homebrew 2.1.15
fish 3.0.2

# Goインストール
“`
$ brew install go
“`

“`
$ go version
go version go1.13.3 darwin/amd64
“`

Homebrew使うとコマンド一つでインストールできるので、とても便利です。

# GOPATHの設定
GOPATHとは、Goのソースをまとめているディレクトリを指定している環境変数のことであり、
GOPATHを利用することで、外部ライブラリの導入やビルド作業を非常に簡単に行うことができます。

bashでGOPATHを指定するには、

“`
$ vim ~/.bash_profile
“`

で設定ファイルに以下追記をします。

“`
export GOPATH=$HOME/g

元記事を表示

Go x Clean Architecture の話

[Ateam Hikkoshi Samurai Inc. & Ateam Connect Inc. Advent Calendar 2019](https://qiita.com/advent-calendar/2019/hikkoshi) 19日目は真のGopherになりたいルーキーGopher @lostfindがお送りします。

## はじめに
“`go
println(“みなさん、こんにちは!”)
“`
[12日目の記事](https://qiita.com/andmorefine/items/06f509c717fbd3b7bcd2)にも少しお話がありましたが, はい!そうです!

エイチーム引越し侍では言語は`Go`, 設計思想は`Clean Architecture`, 開発方法は`TDD`でバックエンド側のリプレイスに取り組んでいます!

この記事では`Go x Clean Architecture`でリプレイスしながら迎えた壁やまとまった考えについて, 少し共有ができたらなと思います!

## まず, 結論から ?
### Goとクリーンアーキテクチャの相性は?

元記事を表示

MySQLのToo many connectionsの対処法の補足 ~バルクインサートを添えて~

# はじめに
CA Tech Dojo/Challenge/JOB Advent Calendar 2019の19日目はhmarfが書かせていただきます。私のアドベントカレンダーの担当日の前後に優秀swiftエンジニアの [@ostk0069](https://qiita.com/ostk0069)さんと[@misakiagata](https://qiita.com/misakiagata)さんがいるのでプレッシャーがすごいです。
この記事は@kenjiszkさんの[MySQLでToo many connectionsが出た時の対応](https://qiita.com/kenjiszk/items/c3d46ac837845281e62b)についての私なりの補足です。

# MySQLで too many connectionsがでたら確認すべきこと
– @kenjiszkさんの記事にもありますが、“`too many connection“`がでたら、MySQLの“`max connections“`, “`processlist“`, “`wait_timeout

元記事を表示

これで俺モ ゲンシジン

# はじめに
こんにちはRIN1208です。この記事は[ITRCアドベントカレンダー](https://adventar.org/calendars/4759)の19日目の記事になります。

# 経緯
まず初めにこの記事を書いた経緯の説明をしたいと思います。
この記事で作った物こちらの記事、[オレ プログラム ウゴカス オマエ ゲンシジン ナル](https://qiita.com/Harusugi/items/f499e8707b36d0f570c4)を読み自分でも作ってみたくなったので作成した物です。
内容は似ていますが作成した言語やパッケージは異なります。
こちらの記事は個人的にとても好きなので是非見てみて下さい。

# 開発環境
– Mac
– goの実行環境
– MeCabの環境

# MeCabのインストール(Mac)

“`
$ brew install mecab
$ brew install mecab-ipadic
$ brew install git curl xz
$ git clone –depth 1 git@github.com:neologd/

元記事を表示

GoのTest学習

箇条書きで健忘録としてメモします。
・Goでテストを書くときはtestingパッケージを使う。
・テストはxxx_test.goというファイル名で作成する。
・テストメソッドはTestXxxという命名規則にする。
・テストはgo testコマンドで実行する。

“`go
// sum_test.go
package main

import (
“testing”
)

func Sum(a, b int) int {
return a + b
}

func TestSum(t *testing.T) {
if Sum(1, 1) != 2 {
t.Error(“miss”)
}
}
“`

元記事を表示

GoのSpannerクライアントについて ReadOnlyTransaction編

[QualiArts Advent Calendar 2019](https://qiita.com/advent-calendar/2019/qualiarts)、20日目担当のs9iです。

弊社の新規タイトルでは、バックエンドのプログラミング言語にGo、データベースにCloud Spannerを採用しています。今回はGoでSpannerを使用する際に使う、公式クライアントライブラリの使い方について書いていきます。

# Cloud Spannerとは
2017年にGoogleから公開されたフルマネージドのデータベースです。
詳細な説明はここでは割愛しますが、

– リージョンを跨いだ水平スケール
– RDBとしての特性(スキーマ、トランザクション、SQL …)
– ノード数を増やすほどスループット向上

といった特徴があります。弊社でも、RDBの特性と自動で行われる水平スケールに特に魅力を感じ、採用に至りました。

# Spannerのトランザクション
Spannerには2種類のトランザクションがあります。

– ReadOnlyTransaction
– ReadWrite

元記事を表示

エラーハンドリングについて考えてみた

# はじめに
今回は、外部APIからデータを取得して表示する際のエラーハンドリングについて考えてみます。

# 方法1
[ERROR HANDLING WITH ANGULAR`S ASYNC PIPE](https://sebastian-holstein.de/post/error-handling-angular-async-pipe/) でも紹介されている方法です。
エラーを通知する先としてSubjectを用意してそれをビューテンプレートで表示します。

## Service
テスト用のモックを作成します。(実際に外部APIと通信は行いません。)

“`typescript
get(id: number): Observable {
return new Observable((subscriber) => {
setTimeout(() => {
if (!id) {
subscriber.error(‘id is required’);
return
}
subscriber.ne

元記事を表示

Goのミドルウェアのテスト

# 概要
GoでWebアプリケーションを作るにあたり、gRPCとgrpc-gatewayを利用して作っています。
ここで何か全APIに共通の処理を書きたい場合、grpc-gatewayにミドルウェアを作成し、そこで処理をしてしまうことが多いです。今回はそのミドルウェアのテストを書くやり方をまとめます。
なおミドルウェアはgrpc-gatewayやgRPCに依存しているものではなく、net/httpを使っているミドルウェアであれば同様にテストが書けるはずです。

業務のロジックが含まれていて割愛している所も多く、また同様の事をしている例も多々あるかと思いますが、
実際に使われているものに近いミドルウェアとそのテストとして、何かしら参考になれば幸いです。

# テストするミドルウェア

以下はアプリバージョンを渡してもらい、最低アプリバージョン以下だとエラーを返すというミドルウェアです。
実際のアプリケーションでは強制アップデートをかけるために利用しています。

“`appVersion.go
package gateway

import (
“fmt”
“net/http”

元記事を表示

Go言語でつくるインタプリタをやってみた

# tl;dr

ただの[『Go言語でつくるインタプリタ』](https://www.oreilly.co.jp/books/9784873118222/)紹介記事です。

## 動機

私はいつも自分の開発や日々の細かい作業をツールとしてより効率化をすることを考えています。
その結果としていくつかのCLIコマンドやVimプラグインを書いたりしているわけなのですが。
その中で今まで知らないことを盛り込むことで都度新しい知識を仕入れることを心がけています。

最近Language Server Protocol(LSP)周りにご執心なのですが、
ふと自分でLanguage Server(LS)をつくりたいなと思ったのですが、そのための知識が足りないことに気が付きました。
そうLSをつくる上で対象となる言語の解析への理解は欠かせないのです。

そこで私は一回インタプリタを作ったら一通りの流れを理解できるのでは?
と考えて以前から気になっていた『Go言語でつくるインタプリタ』を注文したのです。

似たような話でDQNEOさんの[Goコンパイラをゼロから作った話](https://qiita.

元記事を表示

Go Lang Hello world 超簡単言語(GOlang)

# ちっとお試しあれ
### <<みんなでGO>>
“`main.go
package main
import (
“net/http”
“fmt”
)
func world(w http.ResponseWriter, r *http.Request) {
fmt.Fprintf(w, “

Hello World

“)
}
func japan(w http.ResponseWriter, r *http.Request) {
fmt.Fprintf(w, “

Hello Japan

“)
}
func main() {
http.HandleFunc(“/”, world)
http.HandleFunc(“/japan”, japan)
http.ListenAndServe(“192.168.1.10:8080”, nil)
}
“`

![image.png](

元記事を表示

OTHERカテゴリの最新記事