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

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

MultiPart のファイルアップロード実装のCLIクライアント・サーバーコードを理解する

Go の シンプルで動作の早いWebフレームワークである[gin](https://github.com/gin-gonic/gin)と、multipartのライブラリを使って、サーバーとクライアントの複数ファイルアップロードの仕組みを記述してみたいと思います。
# サーバー側

[gin](https://github.com/gin-gonic/gin)はサンプルが充実しているので書くのがとても簡単でした。ルーターを作って、そこにルーティングを設定するだけです。

“`golang
func main() {
router := gin.Default()

router.POST(“/csv”, ReceiveFiles)

srv := &http.Server{
Addr: “:38081”,
Handler: router,
}

go func() {
if err := srv.ListenAndServe(); err != nil && err != http.ErrServerClosed {
log.Fatalf(“liste

元記事を表示

Go で Go を build して Go を Go で開発しよう

## はじめに

有名な話ですが、Go は Go で開発することができます。(Go1.5 以降)
Go の開発を Go でできることは、メリットがたくさんあります。

* 可読性が高いため、他人の書いたソースコードのメンテナンスがしやすい
* 楽しい
* 自分の書くソースコードの品質を担保しやすいので、他人に自分のコードを理解してもらいやすい
* 楽しい

Go はクリーンでシンプルで、パワフルな言語で私は大好きです。
そんな自分が使っている好きなソフトウェアがどのように作られているかは、 とても興味があります。

そんな Go を読めて、 build できて、デバッグできて、ソースコードが書けることはとても面白い活動です。
また、処理系の中身がわかると、よりプログラミング言語の気持ちがわかるようになります。

というわけで、日本からももっと Go へコントリビュートしようぜという想いをこめて、
Go の build 方法と、ソースの変更をしてみた例を簡単に紹介します。

## 環境

今回試した環境は以下です。
必要なものは、Go1.4 以降の go コマンドと、

元記事を表示

【GKE】Nuxt.jsとGOでREST APIを構築した手順をまとめる

## GKEでREST API構築のための前提知識

まずは、GKEでREST APIを構築するために、まずは以下の前提知識について補足していきます。

– Kubernetes
– REST API

※僕がインフラを構築するまでにインプットした知識を整理したいという思いもあって補足しております。

### Kubernetes

>Kubernetes (K8s)は、デプロイやスケーリングを自動化したり、コンテナ化されたアプリケーションを管理したりするための、オープンソースのシステムです。
引用:https://kubernetes.io/ja/

Kubernetesの補足は引用ママですね。

また、どのGCPサービスを選ぶかみたいなツリーが、下のGoogle公式ドキュメントに書いていたりします。

参考:https://cloud.google.com/blog/ja/products/gcp/choosing-the-right-compute-option-in-gcp-a-decision-tree

Dockerを利用している時点で選択肢がだいぶ絞られていて、「**本番

元記事を表示

Bazelとgrpc-goを仲良くさせる

# Bazelとは

[前の記事](https://qiita.com/f110/items/347742a9bc311d2a83cf#bazel%E3%81%A8%E3%81%AF) を参照してください。

Googleが中心となって開発している

* ビルドを独自のサンドボックス環境の中で行う
* ビルドの再現性が高い(サンドボックスの中で行われるので)
* 高速
* 複数の言語に対応できる
* 拡張性が高い

というような特徴を持ったビルドツールです。

# Protocol Buffersをどう扱うか

[以前書いた](https://medium.com/mixi-developers/bazel%E3%81%A8%E3%83%A2%E3%83%8E%E3%83%AC%E3%83%9D-b901ffba61ce) 方針から変わっていません。
protoファイルは生成されたソースコードもリポジトリに含めてしまいます。
生成されたソースコードをリポジトリに入れてしまうのは主にエディタのコード補完のためです。

生成されたソースコードはサンドボックスの中に閉じ込められてし

元記事を表示

Go を用いて猫 GIF に LGTM テキストをつけたかった

## 最初に
![35f52309-0054-4794-880b-52e0be6612c0.gif](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/30359/cd6dc344-968c-599c-ed7c-8620576ded02.gif)

上記が `font.Drawer` を用いて **GIF に対しLGTMを付与**した例です :sob:
まぁこれはこれでアリかなって思っちゃいますが、LGTM が躍動感出て不具合感が否めません。

※ 文字に被らない自覚ある猫の場合は以下の通りです。
![813c4da8-9735-42fe-9142-f9b8cf819c15.gif](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/30359/ef872ba4-8843-ddc2-76ed-10f0c823c179.gif)

## 原因
https://golang.org/pkg/image/gif/#GIF

残像が残るのは Gif ク

元記事を表示

【Mac】goenvを使ったGoのインストール

# はじめに
Macデビューしたのに当たって、Goの開発環境構築を”goenv”を使って行ったので、そのまとめです。

# goenvとは?
[goenv](https://github.com/syndbg/goenv)は、pyenvから複製されたGo用のバージョン管理ツールです。
プロジェクトに応じて、GoのVersionを変更がある場合などに、Versionを切り替えて開発をすることができます。

# goenvのインストール
まずは`goenv`をインストールする前にhomebrewをアップデートします。

“`shell
$ brew update
“`
アップデートが終了したら、次に`goenv`をインストールしていきますが、最新のgoのVersionをインストールしたい場合は、`HEAD`をオプションにつけた方が良いです。
(ちなみに後からでもgoenvのリポジトリを最新にすることは可能です。)

“`shell

$ brew install –HEAD goenv
“`
`goenv`がインストールできたら、`~/.bash_profile`に下記の設定を追

元記事を表示

Go gRPC-Gatewayでカスタムエラーを返す方法

[VISITS Technologies Advent Calendar 2019](https://qiita.com/advent-calendar/2019/visits) 23日目は@istshが担当します。
この記事は[サンプルコード](https://github.com/istsh/go-grpc-sample)を使って解説してきます。

# エラーをカスタマイズしたい
おそらくgRPCのエラー実装において、

“`go
status.New(codes.Unauthenticated, “not authenticated”).Err()
“`
のように書いたことがあると思います。
しかし、これでは`not authenticated`というエラーメッセージしか扱えません。

私がいるプロジェクトでは、下記の3点を返す必要がありました。

– エラーコード(StatusCodeではない)
– ロケール
– エラーメッセージ

この記事では、これらをgRPCで返し、さらにgRPC-Gateway(HTTP)で返すところまでの実装を紹介します。

## Localize

元記事を表示

docker pullをちょっとだけ楽にするCLIつくりました

## つくったもの

dockerのimageからtagを検索&選択してpullできるCLI

※動画の圧縮になれておらず、、画質が悪いです。。

## バージョン等

– Go 1.13.5

元記事を表示

Go言語入門 ~概要と基本構文~

#はじめに
[TechCommit Advent Calendar 2019
](https://qiita.com/advent-calendar/2019/tech-commit) 22日目担当の`Satoshi` です。

####筆者について
エンジニア歴2年
22歳
業務ではJavaScriptを使ってなにやらやっています。
Goを使ってバックエンド開発がやりたいので、Goを学習中

####本記事の内容
本記事では、**Go言語**の**入門編**として、基礎的な内容を書いていきます。
筆者は、業務ではJavaScript(動的言語)を触っているので、それと比較してGo言語(静的言語)の良いところにもちょくちょく触れていけたらなと思います。

#本記事のゴール

– Go言語について、概要レベルで理解できる
– 基礎的な部分をさらっと学習、復習できる

#Go言語について
Go言語は、2009年にGoogleによって開発された言語です。
特徴としては、一部ですが以下のようなものがあります。

– シンプルな言語
– 静的型付け
– クロスプラットフォーム対応
– コンパイル

元記事を表示

Prometheus の exporter 自作

# はじめに
[品川 Advent Calendar 2019](https://qiita.com/advent-calendar/2019/shinagawa) の22日目です。

[Prometheus](https://prometheus.io/) はご存知の通り、監視対象にアクセスしてデータを収集し、モニタリングや通知が可能な Pull 型の監視ソフトウェアの1つです。
監視対象は、データを取得して Prometheus にレスポンスする exporter や、バッチやアプリケーション等が Push したデータを蓄積しておき、Prometheus にレスポンスする PushGateway を用意しておく必要があります。
exporter は、公式非公式を含め [多数公開](https://prometheus.io/docs/instrumenting/exporters/) されており、また exporter を自作するための [クライアントライブラリも公開](https://prometheus.io/docs/instrumenting/clientlibs/) され

元記事を表示

Code-Server x Dart with fmi x Go x Clang

Dart Advent Calendar 2019 の 記事です。

Dart の Native Interface に ついての記事です。
Go や C言語の機能をDartで利用する方法について解説します。また、すぐに Native Interface を試せるように、 Docker Image を 用意しました。

# Native Interface とは : C言語 の ライブラリーを使用することができる機能です
https://dart.dev/guides/libraries/c-interop

C言語 の ライブラリーを使用することができる機能です。ただし、C言語と言ってもC言語でのライブラリーに閉じたものではないです。

Go言語 や Rust言語などのシステム言語は、Shared Libraryを作成することができます。

この Shared Library 経由すれば、Dartで GoやRustなどの機能も利用できます。

# とても便利 : OSの機能をフルに使える

Dartは、まだまだライブラリーが不足している状態です。ですので、C言語で開発されたラ

元記事を表示

go langでslackと連携 api

“`go:main.go
package main

import (
“encoding/json”
“fmt”
“io/ioutil”
“net/http”
“net/url”
)

var (
// change token
IncomingUrl string = “https://hooks.slack.com/services/hogehoge/hogehoge”
)

type Slack struct {
Text string `json:”text”`
Username string `json:”username”`
Icon_emoji string `json:”icon_emoji”`
Icon_url string `json:”icon_url”`
Channel string `json:”channel”`
}

func main() {
arg := “nekosasa”

params, _ := json.Marshal(Slack{ //json形式のbinary 数字がいっぱい並んで

元記事を表示

Go言語でつくるインタプリタを Haskell で書く

## この記事は?
* Haskell の基本機能だけでプログラミング言語作成したのでご紹介します
* 既存のライブラリやパーサジェネレータ等を使用せずにプログラミング言語を作成
* 元ネタは Go 言語で書かれた「Go言語でつくるインタプリタ」という書籍
* https://www.oreilly.co.jp/books/9784873118222/
* この書籍で作成するプログラミング言語の名は Monkey
* Haskell 等の関数型言語でいちからプログラミング言語作ってみたい方の一助となれば・・

## 作成した理由
* 元ネタである「Go言語でつくるインタプリタ」に感銘を受けました
* 非常に簡潔に書かれた書籍であり僕の様な CS の基礎知識のない人間でもある程度理解できた
* Go で書かれているというのも「簡潔さ」と「理解のしやすさ」の一因ではないかと思います
* Haskell を好むため同じものを Haskell でも作りたくなりました

## 作成した Haskell 製インタプリタ
https://github.com/

元記事を表示

Goで「HackerNews頻出英単語 1200」をつくる

こんにちは、この記事は[Go Advent Calendar 2019 22日目](https://qiita.com/advent-calendar/2019/go)の記事です。

## 英語の勉強における英単語

いきなりですが、最近、趣味で英語の勉強をしています。

せっかく作った趣味なので、目標として**TOEFL 100点**という目標を置いて
[TOEFLテスト英単語3800](https://www.amazon.co.jp/dp/B071Y335LW/)という単語帳をやってます。

この単語帳 TOEFL界隈では非常に有名な単語帳でして、これさえやれば**TOEFLの点数 10点上がる**と言われています。(ほんまかいな)

実際にこの単語帳をやって、TOEFLの試験をやると**おぉ、めっちゃ単語出てくる!**と言った感じで
単語の意味がわかると、難解で有名なTOEFLの文章も読めるようになります。

## HackerNews英単語帳を作れないか

ここから派生して、エンジニア界隈で有名なテックニュースサイト [HackerNews](https://news.yco

元記事を表示

ポケモン名だけで作った「いろは歌」を高速に生成する(ビット演算+DFS+Go+GCP)

みなさんポケットモンスター ソード&シールドやってますか?私は開会式に参加したところで中断しており、まだバッジ0個です。

さて、ポケモンを愛する皆さんであれば、一度はポケモン名でいろは歌を作りたいと思ったことがあるはずです。つまりどういうことかというと、ア〜ンまでのカタカナ45音を重複なく一度ずつ利用したポケモン名の列挙をしたいということです。例えば、以下の12体のポケモンの組み合わせは上記条件を満たしているので、いろは歌として成立しています。

![iroha.001.jpeg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/28464/bb302f35-c6c5-dfb3-a6e3-883b3e19a7aa.jpeg)

ではこのような組み合わせが、初代〜ソード&シールドまでの890匹の全ポケモンで一体何パターン存在するのでしょうか。私は気になって夜も眠れません。そこでこの記事では、高速にポケモンいろは歌の全列挙を行うためのアルゴリズムと実装の考察を行います。

先行研究として、このようなポケモン名によるい

元記事を表示

GoでランダムなGif画像を生成する

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

# はじめに
GoでのGIF画像生成を調べてもあまり出てこなかったので書いてみます。

?実際の生成物
スクリーンショット 2019-12-22 16.04.44.png

本記事には関係ないですが、`image.Image`から`image.Paletted`に変換する方法って何かいい方法ありませんかね…

# 考えかた
– `Int`のスライスを生成する
– 数字に対応する色をマッピングする
– マッピングした画像を複数作り、GIFにする

### Int スライス

元記事を表示

令和元年冬 犬は駆け廻り 猫は円くなり 私はCIに目を回す

# 0. 序文

本稿は [TECOTEC Advent Calendar 2019](https://qiita.com/advent-calendar/2019/tecotec) の21日目の記事です。

:raising_hand_tone1:「エンジニアがすなる技術ブログといふものを、私もしてみむとしてするなり。はてなブログ、君に決めた!」
:smirk_cat:「そういえば、小説の原稿をGit管理すると、編集点や更新履歴が共有できて、校正・編集が捗るって聞いたことがあるよ」
:angel:「Gitを使うなら……投稿まで自動化しては……どうでしょう……捗りマックスですよ……」
:thumbsup_tone1:「いいね!それ採用」

というわけでGitHub初心者が見果てぬ夢を追いかけて自動化の塔を目指すまでの物語です。

# X. 本稿の内容を3行で

– ブログ記事をGit管理して校正・改稿を可視化したく
– Git使うなら投稿まで自動化できたらいいなとCircleCIに手を出し
– 必要なパッケージがインストールできずに頓挫した

今のところ先生にもなれないしくじり話です、

元記事を表示

Go を一緒に学んでいるときに質問されやすいところ3セット

こんにちは。
Women Who Go Tokyo の [micchie](https://twitter.com/micchiebear) と申します。
[Go4 Advent Calendar 2019](https://qiita.com/advent-calendar/2019/go4) の22日目の記事を担当します。

Women Who Go Tokyo は、毎月1回 Go についての勉強会を行っています。
Go にはじめて触れる方にも安心して楽しく参加していただけるよう、少しずつ改良を重ねながら運営しています。

最近は「Go のことを学びながらやっていたら、いつのまにか家計簿アプリができていた!すごい!」を体験していただけるように「家計簿アプリを作ろう!」というタイトルやっています。
教材を提供してくださっている @tenntenn さん、いつもありがとうございます。

今日のアドベントカレンダーでは、質問をもらうことが多い箇所について紹介したいと思います。
今後の勉強会の助けになりますように。

説明が怪しいところは是非、正していただけますと幸いです。

※ ちなみに

元記事を表示

Dockerのマルチステージビルドで、ビルド環境と実行環境のセットアップを1つのDockerfileで完結させよう

[Code Chrysalis Advent Calendar 2019](https://qiita.com/advent-calendar/2019/codechrysalis)、24日目の投稿です。

こんにちは。現在、CodeChrysalisのイマーシブブートキャンプ(Cohort 10)に参加中のなおとです。

ブートキャンプも残すところ1週間を切りました。今は12/26(木)に行われるDemo Dayという卒業発表会に向けてチーム開発を日々頑張っています。お時間ある方は是非Demo Dayにご参加ください!
Demo Day の[詳細](https://www.meetup.com/ja-JP/CodeChrysalis/events/266069585/)はこちらになります。

Code Chrysalisのブートキャンプには、**多言語週間(Polyglottal Week)**と呼ばれる、今まで使ったことのないプログラミング言語を1つ選択し、1週間で言語の習得からアプリケーション開発までを行うという機会があります。

私はこの多言語週間で、今まで扱ったことのなかった

元記事を表示

【AWSハンズオン】Nuxt + Golang構成のWebアプリをAWSへデプロイしよう!

みなさん、こんにちは!
学生サーバサイドエンジニアの[くろちゃん](@TakumaKurosawa)です。

今日はAWSを題材に、自分で作ったWebアプリケーションをデプロイできるようになることを目指して記事を書かせていただきます!

この記事を最後まで読むことで、下記のようなことができるようになります!

– 自分のWebアプリケーションを公開できるようになる
– AWSの下記のサービスを使えるようになる
– VPC
– EC2

ぜひ最後まで一緒に手を動かしながら楽しんでいってくださいね?

なお、この記事は[CA Tech Dojo/Challenge/JOB Advent Calendar 2019](https://qiita.com/advent-calendar/2019/dojo-challenge-job)(22日目)の記事になります!

前日の@yawn_yawn_yawn_さんの[Ubuntu + nginx + LetsEncryptでSSL/TLSを設定する](https://qiita.com/yawn_yawn_yawn_/items/c

元記事を表示

OTHERカテゴリの最新記事