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

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

golangで楽々API作成

#はじめに
2019年に最も注目された言語といえば…
そうだね、golangだね!(私の中では)

ってことで今更感はあるが、golang触ってみました!

# やったこと
– golangの勉強がてら、TODOアプリを作ってみた
– [gin](https://github.com/gin-gonic/gin), [gorm](http://gorm.io/ja_JP/docs/index.html)を使ってRESTfulなWeb APIを作成

# RESTful APIを作成するにあたり
– CRUDを意識して!
– バージョン管理に対応した仕様で!

以上を踏まえてデザインした。

| CRUD | HTTPメソッド | エンドポイント |
|:———————–|:———–|:——————–|
| Create(新規タスクの登録) | POST | ~/api/v1/tasks |
| Read(全タスクの参照)  | GET

元記事を表示

GitHub ActionsとAWS CDKを使ってAWS Lambdaを自動デプロイしていく

この記事は[ぷりぷりあぷりけーしょんず Advent Calendar 2019](https://qiita.com/advent-calendar/2019/ppap)の4日目の記事です。

# はじめに
個人開発をする上でAWS Lambdaというのは色んな面で低コストで様々なことができ、アプリエンジニアな私からするとなんとなく「やった」感が得られるものが有りついつい使ってしまうし、そんな人はきっと沢山いるでしょう。知らんけど。

デプロイも楽だし、Node.jsやPythonならなんかミスったらコンソールで直接いじいじ直しちゃえば何とかなるもんね、うん最高。満足満足。

と、満足せずに今日はより開発現場でも使いやすく、Gitで管理しながらプルリクが通ってmasterにマージされたらあら不思議、本番に反映されている!な事をGitHub ActionsとAWS CDKを使って実現して行こうと思います。

# スキルセット
GitHub Actions
AWS CDK 1.18.0(2019.12.03時点最新)
AWS Lambda
AWS APIGateway
Go

## デ

元記事を表示

Go Modules時代の静的解析

# はじめに

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

Go Modulesがデフォルトで有効になったGo1.13がリリースされてはや3ヶ月。皆さんいかがお過ごしでしょうか。私は「Modules何もわからん」となっててんやわんやでした。
この記事ではModulesの変化の影響を受けやすいGoプログラムの静的解析について、入門〜中級者向けに解説していきます。

# 静的解析とは?

プログラムを実行せずにその内容を解析することを静的解析と言います。コンパイラによる構文解析や型チェックをはじめ、エディタがタイポを検出したり補完機能を提供したりするのも静的解析です。これらとは逆に、ユニットテストや性能評価などはプログラムを実行しているので動的解析と呼ばれます。
Goは`gofmt`や`goimports`など静的解析ツールが豊富なことでも有名です。

# Go Modulesとは?

Go公式の依存パッケージのバージョン管理システムです。Go 1.11から導入

元記事を表示

aetestがめちゃ遅いのでどうにかしたかった話

## aetestとは
https://cloud.google.com/appengine/docs/standard/go/tools/localunittesting/reference?hl=ja
GAE/Go用のローカルテストのためのパッケージです。
GAEも第2世代へ移り変わり最早今後は新規に使われることもそう無いであろうパッケージですが供養として過去の苦労を記しておきたいと思います。

以下はGAEのテストサンプルコードです。aetestはテスト実行時にGAE特有の機能をローカルで利用する際のサーバーを立ち上げてくれます。そのサーバーの情報を含んだcontextを利用することでテストが可能になります。

サンプルコードではGAEのMemcacheの機能を利用しています。

“`go:main_test.go
package main

import (
“google.golang.org/appengine”
“google.golang.org/appengine/aetest”
“google.golang.org/appengine/memcache”

元記事を表示

Go+Nuxt+etc…を使ってライブ配信サイト+Twitterのコメビュを作ってみた

この記事は[Jsys Advent Calendar 2019](https://adventar.org/calendars/4301)の記事です
Qiita初投稿になりますので色々と突っ込みどころがあるかもしれないです
# やったこと
Go+Nuxt+その他諸々を使ってリアルタイムにライブ配信サイト10種+Twitterの特定のハッシュタグでつぶやかれた内容を自動的に表示するソフトフェアを作った
# 目次
– 使った言語+フレームワーク
– 実行に必要な前提要件
– 使い方
– 実装方法
– 感想的な何か

# 使った言語+フレームワーク
### フロントエンド
– Nuxt.js
フロントをモダンに書きたいのと使い慣れてるので採用

### サーバーサイド
– Go
個人的な慣れで採用
オブジェクト指向のような手続き型のような謎の言語
モダンな書き方が大体採用されてる
~~青いホリネズミがキモカワイイ~~

– #### フレームワーク
– Gin
高機能なHTTP/HTTPS通信用フレームワーク
Nuxtから吐き出した静的ファイルを一行でルーティング

元記事を表示

Goの基本個所の復習①(println)

#はじめに
私は現在***Ruby on rails***や***JavaScript(jQuery)***の学習を行っていますが、今回息抜きを兼ねて***Go***の学習を始めてみました。
学んだ基本事項を、自分なりにかみ砕いて解説していこうと思います。
#実行
Goの最も簡単なコードは下記の通りです。

“`go
package main

func main() {
println(“Hello World”)
println(2019)
}
“`
これを実行すると、

“`terminal
Hello World
2019
“`
と出力されます。

`package main`の部分を**パッケージ定義部分**、`func main()`の部分を**関数定義部分**といいます。(これの詳しい解説は今の私にはできないので、いつかの記事で行います)

`println()`が二つ並んでいますが、これは`()の中身を出力する`というものでRubyでいう`puts`やJSでいう`console.log()`に相当します。
(ちなみに、print`I`nではなく

元記事を表示

Firebase AuthenticationとGAEで30分くらいでログイン機能を実装してみる

## TL;DR
今からFirebase Authenticationを使ってソーシャルログイン機能を30分くらいで検証用に実装します。
各種SNSのデベロッパーサイトへの登録はしてあるものとします。
要件として作成するのは、トップページと、ログイン後ページの2画面のシンプルな構成。

スクリーンショット 2019-12-03 22.13.11.png

コードは置いといた。(secret.yamlは準備してくれ・・・)
https://github.com/spre55/firebase-auth-sample/

### 今回使う主な技術・ツール・サービス

– HTML/CSS/JavaScript
– Go 1.13
– Firebase Authentication
– Google App E

元記事を表示

Goで便利なTUIファイラーを作ったのでその実装の話

こんにちわ。ゴリラです。
最近GoでシンプルなTUIファイラーを作ったので、軽く紹介して実装の話をしていきます。

以前書いた[こちらの記事](https://qiita.com/gorilla0513/items/2bb416e371c43d6d88fc)でも軽く紹介しています。

# 機能
ざっくり以下の機能を持っています。

– ディレクトリ、ファイルの作成、削除、コピー、リネーム、プレビュー
– ディレクトリのブックマーク

詳しくは[README](https://github.com/skanehira/ff/blob/master/README.md)を参照してください。

# 実装について
筆者はTUIツールを作るときに、いつも[tview](https://github.com/

元記事を表示

効率の悪い append は prealloc という linter で見つけることができるぞ

本稿は、[Go2 Advent Calendar 2019](https://qiita.com/advent-calendar/2019/go2) の 2 日目の記事です。
[@pankona](https://github.com/pankona) という名前でやっています。よろしくお願いします!

`prealloc` という linter について紹介します。

## 効率の悪い append

さて、Go を書いていると一度はやってしまうであろう “あまりよくないプラクティス” のひとつとして、いわゆる “append の連打” があるかと思います。
`append` を何度も何度も繰り返すようなコードは、ひらたく言えば “処理効率の悪いコード” になってしまう可能性があります。

“`go
package main

// append を繰り返すことによって効率が悪くなってしまう例

func AppendAndAppend() {
var a []int

// 1000 万回の append が行われていく
for i := 0; i < 1

元記事を表示

[The Go Programming Language Specification] Channel

# Channel
Golangのspecificationの日本語訳と、ちょっとした遊びぐらいのコードを載せていく感じで進めようと思うので、
すでにGolangでコードを書いている人にはつまらないかもしれないです

また、間違っている部分があればぜひご指摘いただけると嬉しいです?‍♂️

#### 想定する読者層
– Golang初めてそこまで期間が経っていない
– 英語の公式読むの辛い
– https://golang.org/ref/spec

## Channel Types
本記事は公式のドキュメントを参考にしています
– https://golang.org/ref/spec#Channel_types

用途としては、goroutine同士の値のやりとりを行えるようにすることで並列処理を実装することです

### Channelの宣言
Channelとは並列実行を可能にする機能を持った型です。Channelは受信と送信の2つの機能によって成り立ち、初期化されていない時の値はnilになります。

“`golang
var c chan int
“`
https:

元記事を表示

[The Go Programming Language Specification] Defer

# Defer
Golangのspecificationの日本語訳と、ちょっとした遊びぐらいのコードを載せていく感じで進めようと思うので、
すでにGolangでコードを書いている人にはつまらないかもしれないです

また、間違っている部分があればぜひご指摘いただけると嬉しいです?‍♂️

#### 想定する読者層
– Golang初めてそこまで期間が経っていない
– 英語の公式読むの辛い
– https://golang.org/ref/spec

### Defer statements
本記事は公式のドキュメントを参考にしています
– https://golang.org/ref/spec#Defer_statements

Deferは以下のような状況になるまで関数の実行を遅延します
– 関数がreturnを返す時
– goroutinがpanicになった時

### Deferの使用方法

“`golang
defer function
“`

### サンプルプログラム
例えば以下のようなプログラムの場合、main関数がreturnされる直前に `defer pr

元記事を表示

[The Go Programming Language Specification] Iota

# Iota
Golangのspecificationの日本語訳と、ちょっとした遊びぐらいのコードを載せていく感じで進めようと思うので、
すでにGolangでコードを書いている人にはつまらないかもしれないです

また、間違っている部分があればぜひご指摘いただけると嬉しいです?‍♂️

#### 想定する読者層
– Golang初めてそこまで期間が経っていない
– 英語の公式読むの辛い
– https://golang.org/ref/spec

### Iota
本記事は公式のドキュメントを参考にしています

– https://golang.org/ref/spec#Defer_statements

Iotaは以下のような状況になるまで関数の実行を遅延します

– 関数がreturnを返す時
– goroutinがpanicになった時

### iotaの宣言方法
iotaはconstによる変数宣言の中で使うことができます。iotaは0から始まる連続する型のない定数を表します。

“`golang
const (
c0 = iota // c0 = 0

元記事を表示

【Go言語】作成したpackageをimportして使用。「cannot find module for path」エラー時の解決

# ◇ 流れ
【Go言語】packageを作成

importに「./XXXXX」でパス指定

実行

「cannot find module for path」と怒られる

解決

# ◇ ディレクトリ構成
:file_folder: GOPATH
 ┣━ :file_folder: bin
 ┣━ :file_folder: pkg
 ┗━ :file_folder: src
    ┗━ :file_folder: test
       ┣━ :file_folder: route
       ┃   ┗━ :page_facing_up: route.go
       ┣━ :page_facing_up: go.mod
       ┗━ :page_facing_up: main.go

# ◇ go環境
“` ruby:ターミナル
$ go version
go version go1.13.4 windows/amd64

$ go env
set GO111MODULE=on
set GOBIN=C:\GOPATH\bin
set GOENV=C:\U

元記事を表示

本番環境で使えるgRPC-Gateway【前編】

[VISITS Technologies Advent Calendar 2019](https://qiita.com/advent-calendar/2019/visits) 3日目は@istshが担当します。

最近業務で、echoからgRPC-Gatewayに移行することになり、interceptorやmetadataについていろいろ調べたので、
`gRPC Serverの実装(前編)`と`gRPC Clientの実装(後編)`に分けてお送りしようと思います。

以降の説明は、[サンプルコード](https://github.com/istsh/go-grpc-sample)を使って行います。

# gRPC-Gatewayとは
gRPC-Gatewayとは、gRPCで書かれたAPIを、JSON over HTTPのAPIに変換して提供するためのミドルウェアです。

![https___qiita-image-store.s3.ap-northeast-1.amazonaws.com_0_317035_1efa8277-e25c-8a68-7956-e9460bd4626c.

元記事を表示

GKE上にNFSを構築する方法

別の記事で[永続ディスク(Persistent Disk)](https://qiita.com/devs_hd/items/481a61f9e74f0f2758ec)設定方法を紹介しましたが、永続ディスクの制限は複数ノードからマウントして同時に読み書きできない。
本記事では、NFS(Network File System)を利用して、その制限を解決する方法を紹介致します。

実施手順

– Persistent Disk作成
– Persistent Diskフォーマット
– Persistent Diskを使って、NFSサーバ立ち上げ
– NFSを使って、GKE中にストレージを作成
– GKEのストレージマウントのPod作成

最初の2つのステップ(Persistent Disk作成、とPersistent Diskフォーマット)は別の記事で紹介したため、それらの[記事](https://qiita.com/devs_hd/items/481a61f9e74f0f2758ec)を参照してください。

※本手順はGCPとgcloudコマンドの利用経験があることが望ましいです。

元記事を表示

Go言語 理解度チェックテスト1

Go言語入門者向けの簡単なチェックテストについて解説します。

まずはテスト1!

“`golang

package main

func main() {s
as := []struct{ N int }{{N: 10}, {N: 20}}
for _, a := range as {
a.N *= 10
}
println(as[0].N, as[1].N)
}
“`

この表示結果はいくつになるでしょうか?

実行結果は以下になります。

“`
$ go run main.go
10 20
“`

元記事を表示

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

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

この記事は [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

元記事を表示

OTHERカテゴリの最新記事