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

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

Goのmodules を使い始めたばかりでbuild出来ずに困った話

# Go moduleを使い始めたばかりで`build`が通らず困った話
Hello Worldを終えて、少しすると、`main.go`で定義していた関数を別のディレクトリに切り出したくなる時がくると思います。
その時に`build`通らず、解決するのに時間がかかりました。
`go module`を使わず、`GOPATH`配下にプロジェクトのディレクトリを作る際と、`goのmodules`を使う時で外部パッケージの呼び出し方のパスの指定方法に違いがあります。現状、Web上の情報も古い情報の方が多く、
結構、盲点であると思いましたので、覚書として残します。

“`bash:Goのバージョン
$ go version
>> go version go1.13.4 darwin/amd64
“`

## 何が困ったか?

“`bash
piyo
├── go.mod
├── go.sum
└── main.go
“`

“`go:main.go
package main
import “fmt”

main(){
hoge()
fuga()
return

元記事を表示

Goでシンプルに単体テストを書く

`Go`の標準ライブラリである`testing`を使ってテストを書くお話です。

いわゆる**単体テスト**と呼ばれるレベルでのテストを書いていきます。

## テストするコード

テストコードを書くお題には次のような関数を使いました。

“` color.go
package main

import (
“fmt”
)

func showColor(fruit string) (string, error) {
fruitBasket := map[string]string{
“banana”: “yellow”,
“apple”: “red”,
“melon”: “green”,
}

if color, ok := fruitBasket[fruit]; ok {
return color, nil
} else {
return color, fmt.Errorf(“%s does not exist in Fruit Basket”, fruit)
}
}
“`

果物の名前を放り込むと何色かを返してくれる関数ですね。(フルーツ

元記事を表示

OpenID Connectを使ったアプリケーションのテストのためにKeycloakを使ってみる

ユーザーの認証と認可を行う方法としてはOpenID Connectがメジャーですよね。ローカルで簡単にテストするために、ローカルで[Keycloak](https://www.keycloak.org/)をDockerで起動してテストしてみます。外部システムはモックを使う、というのがセオリーですが、気軽に使える本物のサービスを使った方が楽ですよね、ということで。

なお、認証周りのGoのアプリケーションコードは超簡易実装なので、本番実装に入れちゃダメですよ。

# Keycloakとは

KeycloakはIBM傘下のRedHat傘下のJBossが作成している認証のすごいソフトウェアです。

* 自分自身でユーザーIDとパスワードを管理するID Provider機能を持つ
* OpenID Connect、OAuth2、SAML経由でユーザー認証ができる(OIDCなどのサーバーになれる)
* LDAPやActive Directoryで管理しているユーザー情報を取り込める
* GoogleやTwitterなどの外部のSNSを使った認証ができる(OIDCなどのクライアントになれる)

元記事を表示

CLI の愚痴投稿ツールを作ってみた

# 愚痴投稿 CLI ツール guchi を作成しました
CLI から愚痴を吐くツールを作りました。ここ最近ストレス溜まってたのでね。。なお、愚痴は私が用意している以下ページ (というかただのテキスト) に吐かれます。
https://guchis.site/guchis

リポジトリは以下です。舐め腐ったツールですがよかったら使ってみてください。
https://github.com/daiching/guchi

動作確認は WSL (Ubuntu) と CentOS7 で実施しています。残念ながら Mac はわかりません (もし試した方がいて、動作報告していただけたら大変有り難いです!)

取得方法としては、以下でイケるはずです。

“`bash
# 実行バイナリのみ
$ wget https://github.com/daiching/guchi/raw/master/guchi
$ sudo chmod +x ./guchi
$ ./guchi

# go get する場合
$ go get github.com/daiching/guchi
$ guchi
“`

なお

元記事を表示

はじめてのGolang Webアプリケーション ~ テスト, Dockerコンテナ化まで

#

# 概要

こんにちは。kwashiです。最近、コンテナ関連の技術にハマリ気味で、Golangの勉強を始めました。いままで、Pythonばかり使っていたのですが、すっかり、Golangにハマってしまいました。そこで、復習も兼ねて、GolangのインストールからWebアプリケーションの作成、テスト、Dockerコンテナ化までを対象に記事にしてみました。Golangの構文はわかったけど、次どうしようと思っている方にはちょうどいいかもしれません。

Golangのメリットは、以下のようなことが挙げられます。

+ Dockerイメージが軽量
例えば、本記事で作成したアプリケーションは、以下のように22.6MBとかなり軽量です。

“`bash
REPOSITORY TAG IMAGE ID CREATED SIZE
kwashizaki/example-golang-rest-api v1.0.0

元記事を表示

【Hyperledger Fabric】GetHistoryForKeyを使って、StateDBのKeyに紐づくHistoryをGetしよう!!

## はじめに
みなさま、お久しぶりです。
どーも、のぶこふです。

プロキシという足枷に行く手を阻まれながらも、
どーにかこーにか、生きながらえております。

今回は、Hyperledger Fabricで履歴(History)を取得するやり方です。

諸事情により、Golangでの記述となりますが、Node.jsやJavaでも同様の方法で取得できるかと思います(未確認)。

なお、環境構築やその他チェーンコード箇所等については記載しませんのであしからず。

## 環境
* Windows10 Behind Proxy(ホストOS)
* VirtualBox
* CentOS7(ゲストOS)
* Hyperledger Fabric(HLF)1.4.3
* Golang

## 登場人物
`Fabric-Shim`の`GetHistoryForKey(key string)`
▼GoDoc
https://godoc.org/github.com/hyperledger/fabric/core/chaincode/shim#ChaincodeStub.GetHistoryForKey

元記事を表示

GitLab Private Host環境におけるgoreleaserを利用したCI設定の留意事項

# はじめに

独自にホストしているGitLab環境化における[goreleaser](https://goreleaser.com/)の設定手順についてです。
下記のような人向けの内容となります。

– GitLabを独自のサーバーとして運用している。
– Golangで開発しており、 goreleaserを利用してビルドモジュールとタグでバージョン管理したい。

いつもはコンテナのimageとしてビルド結果を残していますが、ツールとして各環境向けの実行可能ファイルを残す必要がありました。
その際、ハマった点等記載しています。

# 前提

– GitLabのバージョンとしては、11.11.Xを利用していること。
– GitLab Runnerとして[Docker Executor](https://docs.gitlab.com/runner/executors/docker.html)を利用すること。
– GitLab RunnerのDocker Executorの[セットアップ](https://docs.gitlab.com/runner/install/)が既に行われている

元記事を表示

autodoc to swagger

誰かいいライブラリをください。
自作中
https://github.com/kajirikajiri/parse
リクエスト、レスポンスが表示されるくらいの完成度を目指す
rspec実行したら、swaggerが出力されるみたいな、、探したけど見つけれない

元記事を表示

20代エンジニア格付けチェックCODING ~定時後の勉強会スペシャル~ 開いてみた【社内勉強会・Paiza編】

前提

自分の現在の所属はシステム開発部、既存パッケージの改修・保守を行っている部署です。
かなり息の長い自社パッケージ(LAMP構成)を2か月に一度改修しリリースするサイクルで活動しています。
開発部メンバーは、エンジニアとしての経験が深い方から、新卒入社の社員まで様々です。

そんな中でPaizaを使って格付けチェックしてみたので、その報告と感想です。

なぜ勉強会をやろうと思ったか?

* 自社パッケージの改修・保守に傾注しているため、スクラッチでコードを書く機会がない
* 中途社員はともかく、新卒社員が自社パッケージの言語以外に触れる機会がない
* メンバー間で各人の得意なスキルを知る機会がない

やったこと

20代の開発メンバー5~6人に声をかけて、だいたい週2回のペースで[Paiza](https://paiza.jp/)の問題を解きました。
Paizaとは、出された問題をオンライン実行環境でコーディングし、コーディング速度と実行速度を計測できるサイトです。
オンライン実行環境が準備されており、ソフトのインストール不要でだれでもすぐ参加できるため、

元記事を表示

Go x Gin x GORMでToDoアプリを作成してみる

# はじめに
今年(2019年)の5月からチーム内の勉強会が週1〜2ペースで開催されるようになり、
モダンな言語を新たに習得したかったため積極的に参加して学習を進めてきました。
基本的なコードを読めるようになり、更なる理解を深めようと次のステップとして、
お決まりですがToDoアプリを作成したので手順などをまとめておきます。

今回GinとGORMを採用した理由は参考にできる記事や公式のドキュメントが充実しているからです。

# 勉強会について
半年で進めていた内容は以下の通りです。
– [A Tour of Go](https://go-tour-jp.appspot.com/welcome/1)
→読書会形式で皆で内容を読み進め、playgrond上でコードをし挙動を確認し進めました。
– [Writing Web Applications](https://golang.org/doc/articles/wiki/)
→ 講義形式(ハンズオン)で実装を進めました。
– [GCPのチュートリアル](https://cloud.google.com/appengine/docs/st

元記事を表示

Goで画像処理アプリを作る

# はじめに
Goを勉強し始めて2週間ほどたったので何かアプリ作ってみることにしました。フロントエンドの知識がない筆者が、見て楽しいアプリを作るには画像がでかでかと表示するしかないと思い画像処理アプリの作成を決めました。

実際のアプリ:imageProcessor

2019-11-04 (2).png

勉強のためになるべく自分で考えるようにしたのでおかしなところなどたくさんあると思いますがご了承ください、、、

# アプリの機能
主な機能は以下の2つです。
・モザイク加工
・グレースケール
JPEG、PNGの両方を加工できます。

※知人にこのアプリで遊んでもらった

元記事を表示

Golangで始めるgRPC

# 概要

gRPCはあらゆる環境で実行できるモダンで高性能なオープンソースRPC(Remoto Protocol Call)フレームワークです。Protocol Buffersを使ってデータをシリアライズし、高速な通信を実現できるという利点がある。様々な言語やプラットフォームに対応しており、http/2を活かした双方向ストリーミングなどが可能である。Protocol Buffersを使用してシンプルにサービス(通信するデータや関数)を定義でき、APIの仕様を明文化できる。

※この章は[gRPC](https://grpc.io/)を参考にしています。

git: [k-washi/example-golang-gRPC](https://github.com/k-washi/example-golang-gRPC)

# スタートプロジェクト

## VSCodeの設定

+ vscode-proto3 & Clang-Format extensions をインストール

もし、自動でファイルをフォーマットしたいならば、以下も設定する。

+ Clang-Formatをインストー

元記事を表示

Go言語のゴルーチンとWaitGroupを使った並行処理

# 概要
Go言語で並行処理を実装する機会があり、勉強していたため、知識の整理もかねて記事を書きたいと思います。Go言語の特徴の1つとして、ゴルーチンを利用して並行処理が簡単に実装できることがあげられます。この特徴はGo言語が人気を集めている1つの要因かと思います。

今回はWaitGroupを利用したGo言語の並行処理について書きます。

# ゴルーチンについて
ゴルーチンはGo言語の実行の単位です。Go言語において並行処理を実装する際には、このゴルーチンを複数起動して関数を実行していきます。すべてのGo言語で記載されたコードはゴルーチンを利用して実行されます。例えば、main関数も1つのゴルーチンで実行されますので、意識していなくてもGo言語で書かれたコードを実行する場合にはゴルーチンが利用されています。

コードの中でゴルーチンを起動する場合は、下記のように実行する関数の前に`go`をつけることで実現できます。非常に簡単ですね。

“`
go dosomething()
“`

# ゴルーチンの実行順序
ゴルーチンによる並行処理を実装する際の注意点として実行順序があります。

元記事を表示

App Engine を布教したくて Go + Datastore の開発環境を Docker Compose でシュッと立ち上げた話

最新[^1]の Google App Engine Goランタイムの開発環境を Docker Compose で簡単に構築してみた話。
あるいはリーズナブルにサーバーを運用できる App Engine を布教する話。

[^1]: 2019/11/05現在
# TR;DR;

* 環境構築
* https://github.com/pistatium/appgengine-go112-datastore-docker-compose
* 動くサンプルはこちら。
* `docker-compose up -d` で開発環境が立ち上がります。
* プロジェクトのテンプレートにするなりご自由に。
* App Engine + Datastore の構成
* 非常に安価でのサーバー運用が可能。
* 第一世代から第二世代の移行はちょっとつらい。
* 今からやるなら第二世代の `Go 1.12` を使うと良さそう。

## App Engine よもやま話
最初にちょっとだけ脱線を。ローカルの開発環境のことだけ気になる方は次章ま

元記事を表示

Go言語でiOS開発ツールを作成する:Localizable.stringsファイルからenumを生成する

# はじめに
 `Go言語でiOS開発ツールを作成する` というモチベーションは、まずGo言語が自分にとってとても興味深い言語であるいうところから始まっています。もともとLinux上でC言語を使って組込製品などを作ってきた人間にとっては、Go言語はすごく分かりやすくて便利な言語だという感触がありました。しかも高速(らしい)です。
 実は以前にSwiftでMacで動くiOS開発ツールは作った経験があるのですが、今回Go言語でチャレンジした感想は、Swiftに比べてもGo言語はとても優れているということです。(特にMacOSやLinuxで動くツールを作成する場合)

# 目標

“`:Localizable.strings

“clode_window” = “閉じる”;
“delete something” = “削除する”;
“cancel” = “キャンセル”;
“OK” = “OK”;
“_Only_this_” = “Only this”;
“`

例えば上記のような `Localizable.strings` から下記のようなswiftファイルを生成します。

“`swi

元記事を表示

VSCode + goenv + depでGo開発環境を整える

# はじめに
Go言語の開発環境を新規で構築するに当たり、自分用の備忘録とチーム展開するためにまとめました。
対象の環境はMacです。

Homebrewでgo自体をインストールしてしまうと最新バージョンになってしまい、
GCPで使えなかったりしたのでgoenvを導入しました。

## goenvの設定
### goenvのインストール
Go言語のコンパイラのバージョン管理を行ってくれるgoenv。Homebrewでインストールする。

“`
$ brew install goenv
“`

以下をシェルの設定ファイルに書き込む。

“`
export PATH=”$HOME/.goenv/bin:$PATH”
eval “$(goenv init -)”
“`

### goコンパイラのインストール
goenvでインストール可能なバイナリを確認する。

“`
$ goenv install -l
1.2.2
1.3.0
.
.
1.11.4
“`

任意のバージョンのバイナリをインストールする。

“`
$ goenv install 1.11.4
“`

元記事を表示

golangを試せる環境を気軽に作れるリポジトリを作りました

golangを試しにやってみたい人や今の環境を汚したくない人とか向けに気軽にgolangを試せる環境作成のリポジトリを作りました。

https://github.com/rspepe/docker-compose-go

docker-composeが動作する環境であれば動くと思います。
※Windowsは知らない。

READMEにあるとおりですが

“`
docker-compose up
“`

だけでライブリロードされる環境が立ち上がります。

main.goファイルを編集保存すると自動で再ビルドが走り、実行結果が標準出力でコンソールに表示されます。

お試しあれ

元記事を表示

deferが呼ばれるのはreturn前

“`golang
package main

import (
crand “crypto/rand”
“fmt”
“github.com/seehuhn/mt19937”
“math”
“math/big”
“math/rand”
“os”
)

func main() {
os.Exit(realMain())
}

func realMain() int {
seed, _ := crand.Int(crand.Reader, big.NewInt(math.MaxInt64))
rng := rand.New(mt19937.New())
rng.Seed(seed.Int64())
r := rng.Intn(2)
defer fmt.Printf(“1\n”)
if r == 0 {
return 1

元記事を表示

Go言語における文字列の「長さ」と「文字数」を取得する処理の違い

##Go言語で文字列の長さを取得する場合

Go言語の文字列の特徴として、**UTF-8エンコードされた「byte」配列**のように振る舞うことが出来る。

このため、配列と同様に**「len」組み込み関数**を使用して長さを取得し、インデックスを使ったアクセスなどが可能になる。

ちなみに「len」組み込み関数が返すのは**「文字数」ではなく「バイト長」**。
なので今回の例では、「len」組み込み関数を使ったパターンになる。

*なおここでは「配列」と表記しているが、実際にはスライス

“`go:string_len.go
package main

import “fmt”

func main() {
//string型の変数を宣言
var en string = “golang”
var ja string = “Go言語”

//文字列の長さ(バイト長)を出力
fmt.Println(en, “len:”, len(en))
fmt.Println(ja, “len:”, len(ja))
}
“`

実行結果

“`
user$ go run strin

元記事を表示

Golang によるfirebase AuthenticationにおけるJWT解析

# 概要

Firebase Authenticationの機能を使用した際、フロントエンドでJWTを取得できる。このJWTは、改ざんがされていないことを検知可能なので、バックエンドでは、このJWTを用いてユーザ情報を取得できる。

今回紹介するライブラリは、サーバーに送られてきた、以下の形式のJWTを分解し、そして、デコードすることでFirebaseにおけるユーザー情報を取得する処理をGolangで実装した。

“`bash
{base64エンコードしたhead1er}.{base64エンコードしたclaims}.{署名}
“`

発行者(今回は、Firebase)が鍵を使用して、JSONに署名することでトークンとして扱うことができる。また、鍵を使用して検証することで改善を検知できる。
claims部には、ユーザー名などの任意の情報を含めることができる。

git: [k-washi/jwt-decode](https://github.com/k-washi/jwt-decode)

# インストール

“`bash
go get -u github.com/k-washi/

元記事を表示

OTHERカテゴリの最新記事