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

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

ぼくのかんがえたさいきょうのシングルバイナリ生成ツール

皆さん、シングルバイナリ サイコーですかー!(挨拶)

この記事は [Go4 Advent Calendar 2019](https://qiita.com/advent-calendar/2019/go4) の3日目の記事です。
今日は「ぼくのかんがえたさいきょうのシングルバイナリ生成ツール」を紹介したいと思います。

# ことの発端

[毎回言ってる](https://qiita.com/Maki-Daisuke/items/e0381ae50d95d1a18295)のでもうご存知かもしれませんが、自分はシングルバイナリ大好きな人です。そして、[コマンドをパイプでつなげるのが大好き](https://qiita.com/Maki-Daisuke/items/79146b1c447a36ccf306)な人でもあります。

そんな私が、あいも変わらずアクセスログの分析をしていました。
全体の処理はこの↓シェルスクリプトのようなかんじです:

“`bash:pipeline.bash
#!/usr/bin/env bash

xz -cd “$@”

元記事を表示

FIDO2でパスワードレス認証のサーバサイド実装(Golang)

# はじめに
[CA Tech Dojo/Challenge/JOB Advent Calendar 2019]の3日目はハゲが書かせていただきます。私は今年の夏に「CA Tech Dojo (Go)」に参加させていただきました。自走力が鍛えられる内容で、その後の学習の生産性が向上するのでおススメです。その時の[「参加レポート」](https://note.com/maron0917/n/n8cee6e3d5a57)があるので、興味のある人はぜひ見てください。

# 本題
今日はFIDOと呼ばれる新しい認証の仕組みについて紹介します。**時間が無くて実装まで手が付けれなかったので、後日更新します。**

# IDとパスワードを用いた認証の問題点
– **リスト攻撃に弱いこと**
あらかじめ入手してリスト化したID・パスワードを利用して、アクセスされてしまう。

– **フィッシング攻撃に弱いこと**
ユーザが正規のサイトによく似たサイトにIDとパスワードを入力してしまい、盗まれる。

– **利用しているサービスの数だけパスワードを記憶しておかなければならないこと**
紙媒体に書

元記事を表示

Twistのchatbotを拡張してみた

昨日作ったchatbotがあのままだと全く実用性がないので、もうちょっとサンプルっぽくしました

昨日作ったもの
https://qiita.com/usk81/items/bfd15ec3c5ecc23d0b8f

Twistに関しては昨日作ったものの記事を参考にしてください

# 成果物

コメントしたものをそのまま返すようにしました

スクリーンショット 2019-12-02 23.46.22.png

Page: https://github.com/usk81/twistbot
Release: https://github.com/usk81/twistbot/releases/tag/v0.0.1-alpha2

## Request Body

Request Bodyは`x-www-form-url

元記事を表示

Go言語でユニットテスト, テストしやすいコードとモックを書く

# Go言語でテストしやすいコードを書く

Go言語でテスタブル(テストしやすい)コードを書いてユニットテストを実践しましょう.
この記事では以下について書きます.ユニットテストの概要については書きません.

– Go言語でのユニットテストの書き方
– テストアサーション
– Go言語でのユニットテストの実行方法
– テストしやすいコードの書き方
– Go言語でのモックの作成とモックの使い方

# Go言語でのユニットテストの書き方

## テストコードのファイル(xxxx_test.go)
Go言語では本体コードと同じパッケージ内(同じディレクトリ内)にテストファイルを作成するのが一般的のようです. ファイル名は“xxx_test.go“にするのがルールです.

“`
├── calc.go
└── calc_test.go
“`

## テストコードの基本

テストコードでは以下のパッケージを使います.

– testing (必須)
– [github.com/stretchr/testify/assert](https://godoc.org/github.com/st

元記事を表示

TwistのchatbotをGoで作ってみた

Advent Calendarの間、毎日なんか作ってます。
https://qiita.com/advent-calendar/2019/project25

今回はTwistのchatbotを作ってみました。
Slackbotは作ったことあるし、いっぱい転がってるので

# What is Twist?

Todoistで有名なdoistが作った、SlackやMS Teamsなどのようなチャットツールです。
フルリモートな会社が自分たちのために作ったサービスを商用化しただけあって、メッセージが流れて負えないとか一般的にチャットツールで聞かれる不満は一通り解決されています。
Integrationはまだ、Slackに分がありますが、ただのチャットツールとして使っているのであれば乗り換えたほうがハッピーになれそうです。

(ファンですが、中の人ではありませんよ)

https://twist.com/
title.pngGoでsliceをappendすると予想と違う動作をするらしい

# はじめに
こんにちはRIN1208です。今回は[ITRCアドベントカレンダー](https://adventar.org/calendars/4759)の二日目の記事です。
今回書くのは本日12月2日に六本木ヒルズで行われたStep up Go で初めて知って今後もハマりそうなことを勉強しましたので忘れないように書いていきたいと思います。

実行環境は[play.golang](https://play.golang.org/)を使用します(なぜかmacだと問題を再現できませんでした)

#今回の問題
“`go

package main

func main() {
a := []int{1, 2, 3}
b := append(a, 4, 5)
a[0] = 10
c := append(b, 6, 7)
b[1] = 20
println(c[0] + c[1])
}
“`

こちらのコードです。
実行すると….

“`
21
“`

**は??????**

なんで???3じゃないの?と思いました。普

元記事を表示

Go 1.13時代のエラー実装者のお作法

[Goアドベントカレンダーその2](https://qiita.com/advent-calendar/2019/go2)の3日目のエントリーです。

Goではエラー処理の方法としてはプリミティブな方法しか提供しておらず、他の言語のユーザーからやいのやいの言われてきました。Go2でそれを改善するぞからプロポーザル募集でいろいろ意見を募っては二転三転みたいな感じで、Go 1.13ではだいぶおとなしい感じに機能拡張されました。基本的な方向性としてはgithub.com/pkg/errorsから少し機能を取り込んだ感じです。

すでに、数多くのエントリーやらプレゼンテーションやらでGo 1.13の利用者視点でのerrorsの変更点については触れられてきましたので詳しくはそちらをご覧ください。サマリーとしては下請けのパッケージで出てきた詳細なエラーをラップして扱うための便利な機構がいろいろ追加された感じです。

これらでは主にアプリケーションコードの実装者というかライブラリの利用者向けの説明が多く、Go 1.13以降のerrorsを活用するためにエラーを定義する一番底レイヤーな開発者がどのよう

元記事を表示

ぼくのさいきょうのslack bot

この記事は[東京理科大学 Advent Calendar 2019](https://qiita.com/advent-calendar/2019/tokyo_university_of_science)の12/2の記事です。
昨日は[@piffett](https://qiita.com/piffett)による[apt-getとaptの使い分け](https://qiita.com/piffett/items/a8e3ea4cd6b7bd14f0f0)でした。

こんにちは。[にっし〜](https://twitter.com/nishinishi172)です。
ここではGoでslack botを作る話を書きます。

## はじめに
ここでは主にgoでの実装についてだけ書いて、slackへの導入だったり諸々は前提として話を進めます。
また、AWS Lambdaでの実装はここに追記するか別途記事にする予定です。

## 経緯
バイト先で勉強会を運営しているのですが、参加登録だったり、終了後のアンケートを全てGoogle formを使って集計していました。
Google App Scri

元記事を表示

絵文字だけプログラミング!!を作ってみた&得られた知見

## Kaomojy
スクリーンショット 2019-12-02 21.12.25.png
上はfizzbuzzです
### 内容
[Kaomojy](https://kaomojy.ryomak.info)は
**顔文字だけでプログラム書くことができます!!!**
ただのそれだけ。。。

### モチベーション
Brainfxxkを出会った時に衝撃がすごすぎて、GoでBrainfxxk用のコマンド作ったりしていたのですが、今回はJavascript(vue)版を作ってみました!

絵文字だけで文字のやり取りできるの、暗号ぽくって面白い!!!
とか思って絵文字にしました

### 得られた知見
#### 絵文字のsplit
絵文字を分割して、配列として保持して置くという処理を実現するときに
当初

“`js
co

元記事を表示

Goa v3 のテストをシュッとする

これは Go アドベントカレンダー 3日目の記事です。

# はじめに

[Goa](http://goa.design) というのは、Go で API を書くためのフレームワークで、APIデザインを Go のコードとして DSL を使って書けて、デザインからコードの生成、ビジネスロジックを実装というサイクルと上手に回していくことを目的にしています。

統一的なバリデーション、エラー処理、OpenAPIドキュメントの生成など API 開発で必要なあれこれが用意されています。

Goa v3 は今年の5月にリリースされました。v3 では、HTTP だけでなく、gRPC もサポートし、HTTP と gRPC の2つのトランスポートに対して共通のデザインを書くことが出来るようになっています。

Goa v3 では v1 で生成されていたようなテスト用ヘルパー関数を生成しなくなりました。また、v3 のサービスは、サービス毎にパッケージが切られてしまうので、interface での取り回しの自由も少なく、テスト用の環境を整えるのが少し面倒でした。Goa v3 用の(HTTP トランスポートの)テ

元記事を表示

Goで簡単な関数を実装しながらgo testを理解する

この記事は[tomowarkar ひとりAdvent Calendar 2019](https://qiita.com/advent-calendar/2019/tomowarkar)の3日目の記事です。

今日はgo testを理解していきます。

# 今回実装する関数
整数配列から最小値を求める関数をそれぞれ実装していきます。
pythonでいう`min`関数ですね。

“`bash

$ python
>>> min([1,2,3])
1
“`
# testingパッケージについて
– Goでのテストはtestingパッケージを使う。
– テストは`{filename}_test.go`というファイルで作成。
– テストのメソッドは命名則があるので注意(以下引用)。

>func TestXxx(* testing.T)
ここで、Xxxは小文字で始まっていません。関数名は、テストルーチンを識別するのに役立ちます。
[Package testing](https://golang.org/pkg/testing/)

### テストファイルを同時に作成する
テストを書く場合は同

元記事を表示

PHP案件に配属されたGopherはどうGo言語と向き合うべきか

今いるチームのメインリポジトリはPHPで書かれているのでそれに接する機会が多い。
インフラはガチガチのAWSだ。
普段の個人開発で使う言語はGo一択だしインフラは google app engine にのせてきた。
全然違うじゃん、と思われるかもしれないが雇用されて働く上で技術スタックを気にしてネガティブになる必要はあまりない。
新しい技術に対して前向きな意思決定ができるチームを作れるか、一緒に働きたいと思えるメンバーに恵まれているか、プロダクトは利益を上げているか、そういったことの方がボディに効きやすい。
まぁPHPでお仕事できますか?と聞かれたら当然YESだ。
PHPなんてものは特にその存在を意識しなくても読めるし書けるので勉強するに値しない言語だ。
それがLL言語の唯一の利点であるがどうにもお行儀が悪くて治安が乱れやすい。
PHPとGoどちらが優れていますかとGopherには尋ねない方が身のためだ、お前は朝食に和食と肥溜めどちらにするか聞くのか?という顔になってしまい声に出すのも億劫だとため息をつかれるだろう。

若干言葉が荒れてしまっているがややワイルドな環境で育ったのと実は今

元記事を表示

【Hyperledger Fabric】PrivateDataを使ってみよう

## 1.はじめに
12月になりましたね。寒いです。
AdventCalendarとは無縁の、どーも、のぶこふです。

今回は、Hyperledger Fabric(HLF)のPrivate Data Collections(プライベート データ コレクション:PrivateData)の使用方法について書きます。
「PrivateData?」という方は、公式ドキュメントをご参照ください。
▼公式ドキュメント
https://hyperledger-fabric.readthedocs.io/en/release-1.4/private-data/private-data.html

ざっくり説明すると「許可したPeer間でTxを共有するので、許可されていないPeerはTxの内容を見ることができませんよ」というものです。

* 「チャネルでも同じようにTxの中身が見れないけど、違いはなんやねん?」
* 「どこに保存されんねん?」
* などなど、疑問が湧くかもしれませんが、公式ドキュメントや他の方が説明してくださっているので、私からは割愛させていただきます。
oO(ここで、少し興

元記事を表示

golangでAzureDevOps

最近Goを勉強する機会があった為、まとめの意味も込めて書いてみます。
色々やり方はあると思いますが、この方法が作り易いと感じました。
まずはDevOpsプロジェクト作成まで。

# 作り方

## テンプレートからDevOpsのプロジェクトを作成
まずはテンプレートからDevOpsのプロジェクトを作成します。
[Azure Portal](https://portal.azure.com/#home)へログインします。

※最初にハマったんですが「Azure Portal」と「Azure DevOps」は別のサイトになってます。
これを理解するまで結構苦戦しました。
Azure DevOpsは元々Visual Studio Team Servicesという別のサービスだったようです。

ポータル上部の検索ウィンドウに「devops」と入力すると候補が表示されます。
「DevOps Projects」を選択
![スクリーンショット 2019-11-29 14.56.25.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.

元記事を表示

Goを使って全探索で最長しりとりを解く

この記事は[tomowarkar ひとりAdvent Calendar 2019](https://qiita.com/advent-calendar/2019/tomowarkar)の2日目の記事です。

Golangを書き始めて1ヶ月が過ぎた頃なのでアルゴリズム的な問題を解いてみようということで、最長しりとりを解くアルゴリズムを書いてみました。

今回全探索を使って最長しりとりを解くので、パフォーマンス最適ではありません。
計算量は最大で$O(n!)$になると思われます(自信ない)。

実務でしりとりを解きたいという場合は(???)数理計画法などを使って解くことをお勧めします。

# 考え方
1. 単語プールの中からしりとりの開始文字を決め、開始文字をしりとりプールに移す
2. 残りの単語プールの中からしりとりが繋がる文字を探す。
3. しりとりが繋がる場合、単語プールからしりとりプールに移動し、2に戻る。
4. しりとりが繋がらない場合、そこでしりとりは終了する。
5. 終了したしりとりプールの中で一番長いしりとりプールが求める最長しりとり。

# コード全文
コード全文をのせる

元記事を表示

05. n-gram

## 05. n-gram
リストなど)からn-gramを作る関数を作成せよ.この関数を用い,”I am an NLPer”という文から単語bi-gram,文字bi-gramを得よ.

###Go
“`go
package main

import (
“fmt”
“strings”
)

// 文字単位の bi-gram
func ch_bi_gram(src string) []string {
var res []string

// 文字数ループ(1文字少なく)
for i:=0 ; i<(len(src)-1);i++ { // 添字の文字と次の文字を連結 res = append(res, string(src[i]) + string(src[i+1])) } return res } // 単語単位の bi-gram func wd_bi_gram(src string) []string { var res []string // 単語単位で文字列を分割 words := strings.Split(src, " ") /

元記事を表示

goのenumは文字列でいいのではないかという話

## goにおけるenumの一般的な定義

世の中で真っ当とされているgoにおけるenumの定義は、

“`go
type Zodiac int

const (
Rat Zodiac = iota // 子
Ox // 丑
Tiger // 寅
:
)
“`

ですね

とはいえ数値でJSON化されたり、ログ出されたり、DBに書き込まれたりされても、
理解が一歩遅れるので、文字列化は欲しくなるわけです。
enumを文字列化するために、`String()` 設けたりします。

“`go
func (z Zodiac) String() string {
switch z {
case Rat:
return “Rat”
case Ox:
return “Ox”
case Tiger:
return “Tiger”
:
}
return “”
}
“`

何を書かされているんだ…

という悩みを解決するために Stringer とか Apache Thrift とかがよく使わ

元記事を表示

Goで正規表現を使うときに考えたいこと

# はじめに

以前コードレビューをしたときに、日時形式のバリデーションに正規表現が利用されていたので、 `time.Parse` 使おうとコメントしました。また、それについて記事にしてみようと伝え、[記事も書いてもらいました](https://qiita.com/shohei-ojs/items/17348a282add17c65ab2)。

あらためてベンチマークを実行すると、time.Parseによるチェックが高速なことが分かります。

“`go
var validater = regexp.MustCompile(`\d{4}(/\d{2}){2} \d{2}(:\d{2}){2}`)
func BenchmarkRegexpPack(b *testing.B) {
b.ResetTimer()
for i := 0; i < b.N; i++ { validater.MatchString("2012/12/10 12:30:45") } } func BenchmarkTimePack(b *testing.B) { l

元記事を表示

Homebrew Taps 自動更新で比べる CircleCI Orbs と GitHub Actions

自分は Go で CLI ツールを作って配ることが多く、それの配布には GitHub Actions と Homebrew の [Taps repository](https://docs.brew.sh/Taps) を利用している。このリリース作業は結構面倒になので、極力自動化したい。

リリースの流派は「どこでやるか」「どのようにやるか」などの観点で、いろいろな考え方がある。

– WHERE
– 手元でコマンド一発でぜんぶやる派
– `git push –tags` から CI でやる派
– HOW
– 全部入りツールでエイッてやる(e.g. [GoReleaser](https://goreleaser.com/))
– 「一つのことをうまくやる」ツールを組み合わせる(e.g. [goxz](https://github.com/Songmu/goxz) + [ghr](https://github.com/tcnksm/ghr) + [maltmil](https://github.com/Songmu/maltmill))

自分は「CI

元記事を表示

初心者でも理解して実装できるDIP(依存性逆転の原則)

SOLID原則というオブジェクト指向設計原則があります。

S : The Single Responsibility Principle(単一責任の原則)
O : The Open Closed Principle(オープン・クローズドの原則)
L : The Liskov Substitution Principle(リスコフの置換原則)
I : The Interface Segregation Principle(インターフェース分離の原則)
D : The Dependency Inversion Principle(依存性逆転の原則)

本記事ではDの依存性逆転の原則について説明します。まだあまり知識・経験がないという方でもDIPを理解し、GoでDIPを適用した実装までできるようにかなり細かく解説しています。説明・実装に使用する言語はGo言語で、実装の説明が多いです。
オープン・クローズドの原則についての説明記事は[こちら](https://qiita.com/masalennon/items/cc45791c7cc2ba7fac50)。

## 良い設計とは?
DIPに

元記事を表示

OTHERカテゴリの最新記事