- 0.0.1. IntellijでGolangやるときの設定Tips
- 0.0.2. スクリプト言語の比較しながらGoのお勉強 〜 環境構築編(MacOS)
- 0.0.3. インフラ構築あるあるをGoで解決する!
- 0.0.4. GoCVを用いてGoで集めた画像で壁紙を作ってみました
- 0.0.5. ClickHouseとは【2020年1月最新】【サンプルあり】
- 0.0.6. Goの環境構築
- 0.0.7. Go×CloudWatchでファイル取得状況をカスタムメトリクス化する
- 0.0.8. 【Golang wire】なんとなく理解した備忘録
- 0.0.9. Google App Engine に Go言語 1.13 の複数サービスを deploy する
- 0.0.10. 【Golang】mockgen で生成した *_mock.go のせいで Build がコケる場合の対処法
- 0.0.11. Goで超簡易版Twitterを作ってみました(初心者向け)
- 0.0.12. gRPCメモ
- 0.0.13. フロントエンジニア(仮)がGO言語で簡単なスクレイピング処理を実装するまで
- 1. 使用したフレームワーク
- 2. やりたかったこと
- 3. 構造体を定義
- 3.0.1. Goのgo-sql-driver/mysqlでMySQLとタイムゾーンがずれる
- 3.0.2. Google Cloud Functions上でログレベル付きのStackdriver Loggingを利用する
- 3.0.3. Go AWS Lambda の init, main, handler のライフサイクルについて
- 3.0.4. poiとfzf(peco)でプロジェクトに爆速で移動できるっぽい〜
- 3.0.5. Goでワーカープールを15分で実装する方法
- 3.0.6. 自作SORACOM InventoryのエージェントinventorydでIoTデバイスを簡単に遠隔操作する
- 3.0.7. インクリメント・デクリメントの書き方のまとめ(Scala、Java、Rust、C言語、C++、Go言語、PHP、Perl、Python、Ruby、JavaScript)
IntellijでGolangやるときの設定Tips
Gakuです。
Intellijで新規Golang PJを作成した際、いつも忘れるので、自分用の備忘録として残しておきます。# go rootの設定(必須)
Preference > Language & Frameworks > Go > GOROOT![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/47132/6337f61f-388f-ba16-4529-2601e9a59f64.png)
でGOROOTを設定する。# go modを有効にする
pj rootフォルダで“`
gakumbp:ddd-golang gaku$ go mod init
go: creating new go.mod: module github.com/gaku3601/ddd-golang
“`
上記を実行し、go.modを作成する。
Go Modulesの設定をしていないと、実行は可能だがコードがエラーの状態になってしまう。
![image.png](https://qiita-i
スクリプト言語の比較しながらGoのお勉強 〜 環境構築編(MacOS)
# ごあいさつ
はじめまして。@kuroseetsと申します。
2000年からフリーランスで仕事を始め開発12年、インフラ8年経験してきたオッサンです。
皆さんはどのプログラミング言語、スクリプト言語が好きですか?または仕事などで何をよく使っていますか?
開発をされている方だとJavaが多いのかな?またはC#?Ruby?PHP?
事務系でスクリプトを組む方などはVBScriptなども現役ですよね。
私は現在インフラ運用構築側にいますので、私を含めて周辺でよく使われているのが、Python, Ruby, Perl, Bash辺りが多く、最近ではさらにGolangが増えてきている印象です。(あくまで個人的主観で、ですよ
それぞれ好みはあるとは思いますが、環境や現場による制約で使えるもの使えないものがありまして、私もその都度現場でキャッチアップしてスキルを身に付けてきました。
現在では`Infrastructure as Code`と謳われるだけあって、構成管理の設定ファイル以外でも手を動かすことも増えてきたと身を以て感じています。
今回個人的にGolangを勉強しようと思っているのですが、
インフラ構築あるあるをGoで解決する!
Goにはまってるインフラエンジニアです。`インフラ構築あるある`をGoで解決したいと思ってます。
# 背景
その昔のワタシと後輩の電話
※後輩は現地のマシンルーム、ワタシは事務所にいました。後輩:コマンド間違えました!よくわからんコトになってます!
ワタシ:よくわからんって何や!ログ見て!
後輩:マシンルーム圏外やから外から電話してます!ログ見れないっす!
ワタシ:とりあえずSSHでログ見るか…
ワタシ:何やったのかさっぱりわからぬ\(^o^)/
ワタシ:現地行くか….ってことがよくありましたね。こういうときのミスない遠隔HELPって何かできないかな〜と思って、
chatサーバ作るぜ!って思いました。巷にはwebsocketを使ったchatはあったのですが、↑みたいな場面ってSSHしかできないようなケースあるんで、
普通のsocketで作りました。あまり先行事例がなくて、結構ムズかったです。ゴルーチンとチャネルが難しい….超絶参考にさせていただきました↓
https://blog.logicky.com/2017/06/16/go-%E3%83%81%E3
GoCVを用いてGoで集めた画像で壁紙を作ってみました
# 概要
集めた画像からGo言語を用いて集めた画像から壁紙を作ってみようと思います。ライブラリとしてはGoCVを利用してみました。
以前、同じことをPythonとJuliaで行いました。– [集めた画像からJuliaで壁紙を作る](https://qiita.com/reinsF82/items/560ce8bde2270ba7faef)
– [集めた画像からPythonとOpenCVで壁紙を作る](https://qiita.com/reinsF82/items/2ba347b1eaa941eb9d94)実際にコードを書いてみた私的な感想としては、PythonやJuliaで書いたほうが書きやすかったですね…( *´艸`)
# 実行環境
– Windows10 Pro
– go version go1.13.1 windows/amd64
– OpenCV 4.1.2
– GoCV# GoCVのインストール方法
画像を操作するためにGoCVを利用するために事前に準備する必要があります。以下の公式サイトのインストール手順に従っていけばインストールできると思います。–
ClickHouseとは【2020年1月最新】【サンプルあり】
[ClickHouse](https://clickhouse.yandex/)の使い方について、これを読めば運用できるはずです
ClickHouseは、主に集計などに最適化されたDBです。
容量削減と高速化が期待できます。
書く内容は、「dockercompose,migration,go-clientサンプル」「テーブルの作成テクニック」などを載せます。# 2020/01最新
ネットに上がってる記事では、ClickHouseはupdateできないと書いてありますが、updateできるようになってます。# ClickHouse概要
・集計など、大量のデータをreadする処理に最適化されたDBです。
・トランザクションなどを使う処理は苦手です
Goの環境構築
# Go 開発環境構築
最近Goの勉強をはじめました。
このあたりは、ググったら同じような記事が出てくるので、自分の備忘録も兼ねて記事にしています。
便利なパッケージ等があったら更新していくかもしれません。
ほんの少しでも、Goを始めようと思っている方への力になれたら幸いです。## 環境
– macOS Mojave (10.14.6)
– zsh
– Homebrew 2.2.1
– IntelliJ IDEA## Go のインストール
1. Homebrew でインストール
“`
% brew install go
“`2. バージョン確認
“`
# バージョンの確認
% go version
go version go1.13.5 darwin/amd64# GOROOTの確認
% go env GOROOT
/usr/local/Cellar/go/1.13.5/libexec# GOPATHの確認
% go env GOPATH
/path/to/gopath
“`## IntelliJ の設定
1. プラグインのインストール
Go×CloudWatchでファイル取得状況をカスタムメトリクス化する
今回はAWS-SDKを用いて、大量のデータを取得するEC2インスタンスの1時間当たりのファイル取得量をCloudWatchでカスタムメトリクス化して取得状況を監視するシステムを作成したので、一部をご紹介します。
AWS関連の部分以外はGoの標準パッケージのみで作るシンプルなものになっています。
# Goでファイル取得数を計算する
下記のプログラムで現在のファイル取得数と経過時間を計算します。
コード自体はとてもシンプルです。“`go
package calculator
import (
“fmt”
“io/ioutil”
“math”
“os”
“path/filepath”
“sort”
)func GetFetchSpeed() (float64, error) {
dir := `取得したいディレクトリ`
//ディレクトリからファイルを取得
files, err := ioutil.ReadDir(filepath.Dir(dir))
if err != nil {
【Golang wire】なんとなく理解した備忘録
# Git
https://github.com/google/wire/tree/master/_tutorial# 何をしているか
struct間の依存関係を記述するのを自動で生成してくれる。# 作るべきファイル
1. 依存関係を実装しているファイル(main.goとか)
2. 自動生成するにあたってヒントを与えるファイル(wire.go)↓を実行
“`bash
$ wire gen
“`
3. 同じディレクトリにwire_gen.goが出来上がっている。多分、実際の処理で利用していくファイルはwire_gen.goを使って処理をしてくはず。
`wire gen`を実行するまではmain.goのInitialEventが無いっておこられているから。
wire_gen.goが出来上がるとそのエラーはなくなる。4. 結果
“`
src
main.go
wire.go
wire_gen.go // wire getで生成されたファイル
“`“`main.go
package mainimport (
“fmt”
)type Event
Google App Engine に Go言語 1.13 の複数サービスを deploy する
# はじめに
ちょうど3日前に Google App Engine (GAE) と Go言語を初めて触ってみました。
Go言語がバージョン 11 以降、少し勝手が違ったことで、構築時に若干迷ったので記事にしてみました。いろんなドキュメントを見て判断はしていますが、なんせ経験が浅いので間違い等あれば指摘ください。
# はじめる前に…
Go言語と GAE について私が学んだサイト等まとめておきます。– 下記サイトで Go言語の学習
– [はじめてのGo言語](http://cuto.unirita.co.jp/gostudy/)
– [Quickstart](https://cloud.google.com/appengine/docs/standard/go/quickstart?hl=ja)
– [Building a Go App on App Engine](https://cloud.google.com/appengine/docs/standard/go/building-app/?hl=ja)# 環境
## OS
– Windows 10## 言語
【Golang】mockgen で生成した *_mock.go のせいで Build がコケる場合の対処法
# 対象読者
– Go の mockgen で生成した *_mock.go ファイルのせいで Build がコケている人
– 自分# 忙しい人のための結論
Build failed 時に、怒られているコード内の該当箇所を消せばよい。# 事例
REST API を golang で書いていた。
テストコードを書くべく、mockgen でモックを生成したところ、それらのファイルにいちゃもんをつけられて Build が通らなくなった。“`
# hoge/fuga
fuga | hoge/fuga_mock.go:**:*: m.ctrl.T undefined (type *gomock.Contr
oller has no field or method T)
“`m.ctrl.T で怒られるのは gomock の code generation が悪いからではないかと推測される。下記リンクによると gomock の version が関係していそう。
参考:https://github.com/openshift/openshift-azure/
Goで超簡易版Twitterを作ってみました(初心者向け)
#はじめまして
最近Goの勉強を始めたばかりで何か開発してみようと思い、簡単なアプリを開発しました。
twitterもやってます[@khm_itac](https://twitter.com/khm_itac)##見た目
![スクリーンショット 2020-01-16 11.57.40.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/492455/f2d51833-f551-2afb-4a29-6659fab5d413.png)
##出来る事
・フォームから投稿する事が出来ます
・投稿をデータベースに保存する事が出来ます
・保存されている投稿を表示してくれます
・投稿を消す事も出来ますはい、それだけです。
めちゃくちゃ低レベルですが、UIからサーバーにデータを送りDBへ保存、DBのデータをビューに表示するというのは全てのアプリの基本的な部分だと思いますので、これが出来るとようやくエンジニアレベル1達成です!
僕と同じようにこれからGoの勉強を始める方の少しでも役に立てればと思い記事を投稿しました。
gRPCメモ
自身のメモとしてgRPCをまとめてみました。
# gRPCとは
protocol buffersをMessage interchange format(メッセージのI/Oに使うための形式)として使えるリモートプロシージャコールシステムです。### protocol buffersとは
IDL:Interface Definition Language (インタフェース定義言語)を用いたファイルフォーマットです。### gRPCで何ができるのか
クライアントが別のマシンにあるメソッドをまるでローカルにあるかのように使えるようになります。
下の図のように様々なプログラミング言語に対して実装できる。![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/270964/7b45a2d4-117f-b81c-5b49-3a85cf1f50fa.png)
#### 雑に言うと
今までjsonなどを介してAPIを叩いていたようなところを、もっと確固たる定義をもった上でより高パフォーマンスでやりと
フロントエンジニア(仮)がGO言語で簡単なスクレイピング処理を実装するまで
はじめまして。kenalog210と申します。
ある事情によりGo言語でのスクレイピング処理方法を色々調べてたんですが、無事お流れとなりました。
もったいないのでQiitaに上げさせていただきます。
今回は下記のサイトをサンプルとして使用させて頂きました。
https://wiki.hackerspaces.org/使用したフレームワーク
Colly
http://go-colly.org/
https://github.com/gocolly/collyスターが1万近くついてるスゴイやつです。
リポジトリにサンプルがいっぱいあるので、基本的なケースなら自分の応用したいパターンに合わせて
サンプルをちょっといじくり回せば使えそうです。
この記事もサンプルをちょっと応用しただけのものです。やりたかったこと
・マッピング情報を渡したらうまいことインスタンス化してくれるようなものを組みたい
・インスタンス化出来たら、JSON文字列化してコンソールで出力
・構造体とのマッピング用スクリプトはめんどいので組みたくない構造体を定義
Goのgo-sql-driver/mysqlでMySQLとタイムゾーンがずれる
#
go-sql-driver/mysqlを使ってMySQLにSQLを投げて、その結果をあれこれするAPIを作成していたときにちょっとはまったことのメモ。## 問題の発覚
MySQLのタイムゾーンの確認。
“`
show variables like ‘%time_zone%’
=>
|Variable_name|Value|
|system_time_zone|UTC|
|time_zone|SYSTEM|
“`MySQLのタイムゾーンがUTCなのにgo-sql-driver/mysqlを使ったSQLの実行結果を見るとJSTで返ってきてしまっていた。
“`
MySQL: 2020-01-01 00:00:00 UTC
SQL実行結果のパース: 2020-01-01 00:00:00 JST
“`そこでmain.goに下記を書いて、Goアプリケーションでのタイムゾーンを確認。
“`main.go
fmt.Println(time.Now())
=> 2020-01-15 13:46:07.4988314 +0000 UTC m=+1.180576601
Google Cloud Functions上でログレベル付きのStackdriver Loggingを利用する
Google Cloud Functions(以下Cloud Functions)でログレベルを分けたいことあります。
よく Go (go111) で Cloud Functions を利用するのですが、標準のlogパッケージを利用しても、ログレベルを出し分けできません。
– https://cloud.google.com/functions/docs/monitoring/logging#functions-log-helloworld-go
– https://cloud.google.com/logging/docs/setup/go上記ドキュメントを参考にすると、 Cloud Functions では以下のような書き方になります:
“`go
func ExampleLogging(w http.ResponseWriter, r *http.Request) {
ctx := context.Background()projectID := os.Getenv(“GCP_PROJECT”)
client, er
Go AWS Lambda の init, main, handler のライフサイクルについて
# はじめに
Go AWS lambdaでRDSに接続する処理を書く必要が出てきた際
connectionを作るのは `init()` で良いのですが果たして `close` をいつどこで行えば良いのか悩み、[公式のリファレンス](https://docs.aws.amazon.com/ja_jp/lambda/latest/dg/go-programming-model-handler-types.html
)を参照しましたが肝心のライフサイクルについて具体的な記載が見当たらないため、実際に各func内の実行回数のcountを取って調査しました。# 検証
`init()` `main()` `Handler()` それぞれの実行countをグローバルに保持しその値を出力する検証コードを作成して実行してみます。
“`Go
package mainimport (
“fmt”
“github.com/aws/aws-lambda-go/lambda”
“log”
)var invokeCount = 0
var initCount = 0
var mainCoun
poiとfzf(peco)でプロジェクトに爆速で移動できるっぽい〜
## ことのはじまり
普段のお仕事でも趣味でも、僕は頻繁にプロジェクトを `cd` コマンドで移動します。Androidのプロジェクトは `~/AndroidProjects` に置いてますし、Goのプロジェクトは `~/go/src` に置いてあります。
業務はWindowsで、パスの長さ回避のためにCドライブ直下に顧客ごとにディレクトリを切ったりしてその中にプロジェクトがたくさんあったりします。OSSコードを読んだりプルリクエストを送るために別の人のプロジェクトをcloneすることもたくさんあります。そんなこんなでいろいろなディレクトリでソースコードを管理していると移動が大変面倒なわけです。
そこで[ghq](https://github.com/motemen/ghq)と言うツールがあります。
ghqはGo製のコマンドツールで、リモートリポジトリを一元管理するためのツールです(ネーミングセンスやばくない?
ghqを使うことによって所定のディレクトリでプロジェクトを管理するようになり、またfzfやpecoなどのツールと連携することで爆速で移動もできるようになると言うものです
Goでワーカープールを15分で実装する方法
> こちらの記事は、Joseph Livni氏により2018年10月に公開された『 [Write a Go Worker Pool in 15 minutes](https://medium.com/@j.d.livni/write-a-go-worker-pool-in-15-minutes-c9b42f640923) 』の和訳です。
> 本記事は原著者から許可を得た上で記事を公開しています。—
![1_ugshDOhXfC287WWhG4IfSA.jpeg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/89391/daa5a211-6311-b88d-cbef-ad63bf0c6b24.jpeg)
私は多くのユーザーリクエストを高速に処理するGoのサービスを構築していました。Goroutineのプールを使ってカプセル化することにより、パフォーマンスは20倍になりました。本記事では独自のワーカープールを作る方法を説明します。[^1]
[^1]: 訳注: ライブラリとして提供されているワーカープー
自作SORACOM InventoryのエージェントinventorydでIoTデバイスを簡単に遠隔操作する
# はじめに
IoTデバイスの遠隔操作したくないですか?
したいに決まってますよね!
ということで今回お勧めするのは[SORACOM Inventory](https://soracom.jp/services/inventory/)です。# 1分でラズパイを遠隔再起動するよ
**注意**
すでにSORACOM Inventoryを使用中の場合、以下を実行すると費用が発生します。(初期費用100円、利用料金50円)
未使用の場合は150円の無料枠に入ります。—
SORACOM Airで接続中のラズパイに入ってrootで以下のコマンドを実行しましょう。
“`bash
curl -L -O https://github.com/1stship/inventoryd/releases/download/v0.0.1/inventoryd_0.0.1_linux_arm.tar.gz
tar zxf inventoryd_0.0.1_linux_arm.tar.gz
./inventoryd –init # 質問にはEnterのみでよい(yで回答したことになる)
ech
インクリメント・デクリメントの書き方のまとめ(Scala、Java、Rust、C言語、C++、Go言語、PHP、Perl、Python、Ruby、JavaScript)
いろんな言語を触っていると、言語の細かい仕様がだんだんごっちゃになってきてしまいますので、メモです。
インクリメント・デクリメントの有無
あり: Java、C言語、C++、Go言語△、PHP、Perl、JavaScript
なし: Scala、Rust、Python、RubyGo言語は式を構成する演算子ではなく文(statement)という扱いにすることで、インクリメントの演算子としての問題を回避していて、個人的にはちょうどいい仕様に感じます。
ついでに代入演算子も確認しましたが、こちらはだいたいの言語にあるようです。
# Scala
– インクリメント・デクリメント演算子はない
– 代入演算子はある“`scala
i += 1
i -= 1
“``i += 1` などは `i = i + 1` などのシンタックスシュガー。
参考
[Assignment Operators – Expressions | Scala 2.13](https://scala-lang.org/files/archive/spec/2.13/06-expressions.ht