- 1. よくある表情解析LINE Botを作った
- 2. docker-compose + realizeでライブリロードする環境構築
- 3. 不要なpackageを削除する
- 4. AtCoder Beginner Contest 153 参戦記
- 5. [Golang]redigoでデータベース番号を指定する
- 6. go+gin+nginx環境をec2にデプロイ
- 7. Golangのパッケージ周りを整理する
- 8. なぜGoはDuck typingを採用していると言えるのか、データ構造から詳しく解説してみた
- 9. Golangでhttp通信をやってみる
- 10. Go言語とginで作ったHTTPサーバをHeroku上で動かしてみる
- 11. Protocol Buffersの後方互換性を覗いてみる
- 12. golangでエラー出力
- 13. GoとRedisでAPIを実装する (Part.1)
- 14. IntelliJでGoアプリケーション開発の始め方
- 15. 眺めて覚えるGo言語 その14 チーティング(ずる)特集
- 16. アラフォーのおっさんが一ヶ月でWebサービスを作った話
- 17. CircleCIでGo言語製のRest APIのテストを自動で回す〜docker-composeを利用して〜
- 18. Go言語でExcelからセル値を取得 & セル座標⇔番号変換
- 19. goでgRPCの4つの通信方式やってみた(Dockerのサンプルあり)
- 20. [Go言語]ハッシュキーの簡単な作り方(hmacを使う)
よくある表情解析LINE Botを作った
Qiita を筆頭にいろんなエンジニアの方が既に作っているもので何番煎じか分かりませんが、個人的にサーバレスアプリケーションを作るのが好きなのと、Golang に慣れることを目的として LINE チャネルに画像を送ると表情解析してメッセージを返してくれる Bot を作りました。
## できたもの
こういう感じで本田翼さんの笑顔の画像を送ると
幸福度合いをポイント化して返してくれます。
docker-compose + realizeでライブリロードする環境構築
goで開発しているとコード変更のたびにビルドするのが面倒くさいので
[realize](https://github.com/oxequa/realize)を使ってライブリロードしてサクサクコーディングできるように環境構築した時の設定をメモっておいてます。## パッケージ構造
“`
.
├── api/
│ └── main.go
├── .realize.yaml
├── docker-compose.yml
└── Dockerfile
“`## 設定ファイル
### Dockerfile
`go get`で`realize`を取得しておきます。
またCMDには`realize`の起動コマンドを設定しておきます。“`
FROM golang:1.13RUN go get github.com/oxequa/realize
EXPOSE 8080
CMD [ “realize”, “start”, “–run” ]
“`### docker-compose.yml
`.realize.yaml`が配置されているディレクトリを`working_
不要なpackageを削除する
先日goにてプロジェクト開発をしていた際に指摘されたので、modulesについて簡単にまとめていきます。
# 要約
不要なpackageを削除するために、`go mod tidy`をする# modとは??
go1.11から使えるようになった依存管理ツールだそうです。
使い方については参照記事がわかりやすくまとまっていますので、そちらを御覧ください。# 参照
https://blog.mmmcorp.co.jp/blog/2019/10/10/go-mod/
AtCoder Beginner Contest 153 参戦記
# AtCoder Beginner Contest 153 参戦記
## ABC153A – Serval vs Monster
1分半で突破. 書くだけ.
“`python
H, A = map(int, input().split())print((H + (A – 1)) // A)
“`## ABC153B – Common Raccoon vs Monster
2分半で突破. 書くだけ.
“`python
H, N = map(int, input().split())
A = list(map(int, input().split()))if sum(A) >= H:
print(‘Yes’)
else:
print(‘No’)
“`## ABC153C – Fennec vs Monster
2分半で突破. 書くだけ. できるだけ体力が多いやつを必殺技で倒したいので、ソートして先頭K匹以降を攻撃で倒すものとして集計すればいいだけ.
“`python
N, K = map(int, input().split())
[Golang]redigoでデータベース番号を指定する
# 方法
[redigo](https://github.com/gomodule/redigo)でデータベース番号を指定するには、オプションを追加する。
“`golang
db := 1
opt := redis.DialDatabase(db)
conn, err := redis.Dial(“tcp”, “localhost:6379”, opt)
“`# 参考
[redis – GoDoc](https://godoc.org/github.com/garyburd/redigo/redis#DialDatabase)
[machinery/redis.go at 84f17e8ec73bbec34184beb067f22301ffa5263b · RichardKnop/machinery](https://github.com/RichardKnop/machinery/blob/84f17e8ec73bbec34184beb067f22301ffa5263b/v1/common/redis.go#L65)
go+gin+nginx環境をec2にデプロイ
## はじめに
web初心者が簡単なgoアプリケーションをec2にデプロイしてみました。
色々おかしなところがあると思いますので、何かありましたら、ご指摘いただけると幸いです。githubを介してEC2インスタンスにプロジェクトファイルをあげるので、ローカルで開発したgoアプリケーションはgithubのリポジトリに上げておいてください。
## EC2インスタンス作成
AWSコンソール画面から EC2 > サービス > インスタンス > インスタンスの作成の手順でインスタンスを作成していきます。
今回はAMIにubuntuを選択して、そのほかの設定はデフォルトです。インスタンスの接続に必要なキーペアも新規に作成してダウンロードします。名前はわかりやすいものにしてください。
キーペアのダウンロードが終わったら、キーペアがあるディレクトリに移動し、パーミッションを設定します。“`
$ chmod 400 [キーペアの名前].pem
“`## EC2インスタンスにssh接続
インスタンスが起動できたら、キーペアがあるディレクトリに移動して以下のコマンドでインスタンスにss
Golangのパッケージ周りを整理する
以下のキーワードをあんまり理解できていなかったので調べてまとめた。(随時調べて更新していく)
* コンパイルとビルドの違い
* Golangのパッケージとモジュールとライブラリの違い
* $GOPATH/go/配下のsrc,pkg,binの違い()# コンパイルとビルドの違い
[ここ](https://qiita.com/tomokichi_ruby/items/e1d52d3f34877389f905)によると
* `コンパイル` = ソースコードをオブジェクトコードに変換すること
* `リンク` = オブジェクトコードをくっつけて一つのバイナリコードにする
* `ビルド` = コンパイル + リンク# パッケージとモジュールとライブラリの違い
* 同一パッケージのファイルは同一フォルダ`$GOPATH/src/(package名)/`などに含める(1つのディレクトリには1種類のパッケージ定義のみ許容される)。
* 同じパッケージに属するファイルは互いに丸見え。これらはまとめてコンパイルされる。
* main packageに属するファイルに関しては`$GOPATH
なぜGoはDuck typingを採用していると言えるのか、データ構造から詳しく解説してみた
Goのinterfaceは明示的に実装を宣言せず、実装側がinterfaceのシグネチャを満たしているかによって型が決まるDuck typingを採用していると言われています。私は当初このような説明を聞いたときにピンと来ず、むしろそれはTypeScript等に見られるStructural Typingなのでは?と思いました。
**しかし実際にデータ構造を調べて見ると、確かにDuck typingであり、かつStructural Typingでもあるという考えに至りました。**
これまでなかなかGoのデータ構造に触れる機会がありませんでしたが、調べてみるとこれまで気づかなかった観点がいくつも出てきたのでぜひ紹介したいと思います。
## Duck typingについて
今回の主題となる部分ですので、Duck typing(ダックタイピング)についておさらいします。
Duck typingはアナロジーである「ダックテスト」に端を発しています。([厳密な起源は不明?](https://en.wikipedia.org/wiki/Talk%3ADuck_typing#Coined_by
Golangでhttp通信をやってみる
[Link-1]:https://qiita.com/melty_go/items/c977ba594efcffc8b567
[Pre-1]:https://qiita.com/zasshyu6/items/c85de49a7265c65945a3
[Golang-1]:https://golang.org/
[Golang-2]:https://golang.org/pkg/net/http/[JSON-1]:http://www.jsontest.com/
#はじめに
`Golang`にはまったときに`Codewars`で遊んでました。
楽しかったのですが、そのあと`Swift`や`C#`で`http`通信やったのでせっかくなので`Golang`でもやってみようかと思います。##開発環境
– `Windows 10 Home 64bit`
– `Visual Studio code 1.41.1`
– `go version go1.13.6 windows/amd64`#開発環境構築
開発環境の構築は以下の記事を参考にさせていただきました。
本当につまると
Go言語とginで作ったHTTPサーバをHeroku上で動かしてみる
# はじめに
Goとginで作ったHTTPサーバをHeroku上で動かすまでの試行錯誤をまとめてみました。
試行錯誤の結果、ゴールへたどり着いていますので、間違いがあると思います。
いまだに深くは理解ができていません。
参考程度にどうぞ。最低限どういった手順で進めればよいかだけを見たい場合は[まとめ](#まとめ)を見ていただければと思います。
# 環境
* OS: windows 10 Home
* Go: 1.13.6
* gin: 1.5.0
* Git: 2.25.0
* Text Editor: Atomローカル環境での`go run main.go`はコマンドプロンプトより行います。
ginは、`go get -u github.com/gin-gonic/gin`でローカル環境へ導入済みとします。# ローカル環境でのテスト
『[HTML をレンダリングする](https://gin-gonic.com/ja/docs/examples/html-rendering/)』を参考にmain.goとtemplates/index.tmplを用意します。
また、
Protocol Buffersの後方互換性を覗いてみる
Protocol Buffersではメッセージのスキーマを変更する際に、後方互換性を損なうことなく新しいフィールドを追加することができます。例えば以下のようなmessageがあったとします。
“`proto
message User {
required string name = 1;
required int32 age = 2;
required string address = 3;
}
“`これを`v1`とした時に、以下のように`parents`情報を追加した`v2`を作成するとします
“`proto
message User {
required string name = 1;
required int32 age = 2;
required string address = 3;
repeated User parents = 4;
}
“``v1`でシリアライズされた`User`のバイナリデータが、`v2`のデータ構造に対してデシリアライズされるときにはparentsフィールドに対応するデータ
golangでエラー出力
“`go:e.go
package mainimport (
“fmt”
“os”
)func main() {
fmt.Println(“stdout”)
fmt.Fprintln(os.Stderr, “stderr”)
}
“`“`
$ go run e.go
stdout
stderr
$ go run e.go 2>/dev/null
stdout
“`
GoとRedisでAPIを実装する (Part.1)
# はじめに
本記事では、Go 言語と Redis を使用し簡単なAPIの作成手順について説明する。docker-compose を使って実装していく為、環境に依存しない開発環境で実装する。効率的に開発が行える様、開発の中でいくつかの工夫を施しているので参考になれば幸いである。また、今回は記述量が多くなるので以下の2部構成にした。
* Part.1 : 環境構築 ~ 動作確認
* Part.2 : API実装 ~ 実装検証本記事では環境構築から動作確認までを説明する。
初めて実装していく方の為に、実行環境と予備知識としていくつか説明する。
# 1. 実行環境
* macOS Catalina Ver.10.15.2
* Docker version 19.03.5, build 633a0ea
* docker-compose version 1.24.1, build 4667896b
* golang 1.13.6
* Redis 5.0.7【補足①】
* [Go言語](https://golang.org/)
* 2009年、Googleによって開発さ
IntelliJでGoアプリケーション開発の始め方
[IntelliJ IDEAでGo言語(golang)を始める〜GOPATHの設定など](https://qiita.com/aki-takano/items/7bd8b879572f58b03cdc)
[IntelliJ IDEAでGoを書く](https://note.com/b1a9idps/n/n34de69179a10)
眺めて覚えるGo言語 その14 チーティング(ずる)特集
#Go言語を書き始めて慣れないためにエラーを出してします。
###たとえば必要のないimportは、“`
.\ex1.go:3:9: imported and not used: “fmt”
.\ex1.go:3:15: imported and not used: “reflect”
.\ex1.go:3:25: imported and not used: “os”
.\ex1.go:3:30: imported and not used: “log”
“`##「使っていませんダメです。」的なお叱りを受けます。
#よく使用するlibは、コピー&ペーストで下記のimportを行う。一行にまとめた
“`
import (“fmt”;”reflect”;”os”;”log”;”strings”;”strconv”;”time”)
“`
また、これらのライブラリを使っている関数を次のように定義します。
使い方の例を下記に“`
// ReadFileは、ファイル読み込み
func ReadFile(fn string) string{
buf:=make([]by
アラフォーのおっさんが一ヶ月でWebサービスを作った話
初めてWebサービスを作ってみました。
年末年始を使い、約1ヶ月程度で、どうにか公開までこぎつけられたので、振り返ってみたいと思います。###モチベーション
筆者は職業プログラマーではありませんが、将来に不安を感じ、プログラミングスキルを磨くことにしました。
「プログラマ35歳定年説」に言われる30代半ばを突き抜けた、まもなく40歳になるオッサンが、プログラミングスキルへ投資することに賭けたのです。###アラフォーになるまでの経験値
– ユーザ系システムインテグレータに勤務
– 数年前まではインフラ業務を担当(「VMware」とか)
– 今は社内システム(バッケージソフトウェアで構築)の保守を担当
– 数年前から深層学習(「TensorFlow」とか)の本を読み始めた###作り始める前(1ヶ月前)のレベル
– 「jQuery」が少し分かる
– 最近のWebシステムのトレンドって何?
– フレームワークって何を使うといいの?「React」、「Vue」とか一杯あるけど
– 「WebPack」?「Bazel」?何それ?
– いつか「Docker」を使ってみたい
– バックエンドは
CircleCIでGo言語製のRest APIのテストを自動で回す〜docker-composeを利用して〜
## はじめに
こんにちは
コンテナを使ったアプリケーション開発もぼちぼち増えてきたように感じます。
その中でも開発時に複数のコンテナ・プロセスを管理したいためにdocker-composeを利用している方も多いのではないでしょうか。今回は、開発環境で利用しているdocker-composeをそのまま利用して、
CircleCIで自動テストする一例をご紹介したいと思います。## コンテナ構成
“`yml:docker-compose.yml
version: ‘2’
services:
db:
build:
context: db/
expose:
– “3306”
environment:
– MYSQL_ROOT_PASSWORD=root #rootパスワードの設定
– MYSQL_DATABASE=test
– MYSQL_USER=user
– MYSQL_PASSWORD=password
volumes:
– ./db/mysql_dat
Go言語でExcelからセル値を取得 & セル座標⇔番号変換
https://github.com/yagrush/excelutil
golangでExcelを読み込む必要があったので開発しました。
ポイントは、
『ユーザーがどんな座標指定の仕方をしてくるか、未知』
だったので、ある程度の柔軟性とエラーチェックを仕込みました。# 使い方
`cmd/test.go` がそのまんまサンプルになっているので、ご参照ください。# 関数のご紹介
## excel.go
### Init(excelFilePath string)
なにはともあれ、最初に呼んでやってください。
Javaのコンストラクタのような感じです。
Excelファイルのパスを渡すと、Excelファイルを読み込む下準備をして、構造体を返してくれます。### (excelFileInstance *ExcelFile) ReadCell(sheetName string, colNum, rowNum int)
Excelファイルの中のシートの名前、セルの列番号、行番号を指定すると、セル値を読み出してくれます。
セルの列番号、行番号の指定方法は、例えば D5 セルだったら
goでgRPCの4つの通信方式やってみた(Dockerのサンプルあり)
goで[gRPC](https://grpc.io/about/)を実装してみました。
gRPCの4つの通信方式を実際にやってみます。
・Unary RPCs(SimpleRPC)
・Server streaming RPC
・Client streaming RPC
・Bidirectional streaming RPCこの記事内容を上から行えば、Dockerで動く環境が作れます。
Dockerでこの4つの実装してる記事は少ないはず。# gRPCとは
[googleの「RPCのフレームワーク」](https://grpc.io/about/)です。
RPCは、アプリケーション間のデータ通信するためのプログラムのことです。
gRPCで
[Go言語]ハッシュキーの簡単な作り方(hmacを使う)
[学習履歴](https://qiita.com/__init__/items/e0a672f1437badf3eae0)
# ⬛️ はじめに
以前、[Go言語で認証機能を作ろう!](https://qiita.com/__init__/items/21b2604db54867f8c543)にて、認証機能を作った。この記事ではDBに格納したデータとクライアントから送られてきたデータを付き合わせて、認証機能を実現していたが、実際にやりたいことはこんな感じのことではなかった。
うまく説明できないが、ハッシュを作って、ハッシュ同士でチェックし合う?みたいなことを本当はやりたかった。
そんな思いがある中で、ハッシュキーの簡単な作り方を学んだので、メモしておく。
# ⬛️ hmacについて
[hmac](https://golang.org/pkg/crypto/hmac/)を使うと簡単にハッシュを生成することができる。以下、公式サイトからの引用。
“`main.go
// ValidMAC reports whether messageMAC is a valid HMAC