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

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

Golangで、デザインパターン「Bridge」を学ぶ

GoFのデザインパターンを学習する素材として、書籍「[増補改訂版Java言語で学ぶデザインパターン入門](https://www.hyuki.com/dp/)」が参考になるみたいですね。
取り上げられている実例は、JAVAベースのため、Pythonで同等のプラクティスに挑んだことがありました。
[Qiita記事: “Pythonで、デザインパターン「Bridge」を学ぶ”](https://qiita.com/ttsubo/items/690d6d75ed6f5ff4b958)

今回は、Pythonで実装した”Bridge”のサンプルアプリをGolangで実装し直してみました。

# ■ Bridge(ブリッジ・パターン)
Bridgeパターン(ブリッジ・パターン)とは、GoF(Gang of Four; 4人のギャングたち)によって定義されたデザインパターンの1つである。 「橋渡し」のクラスを用意することによって、クラスを複数の方向に拡張させることを目的とする。

## UML class and sequence diagram
![W3sDesign_Bridge_Design

元記事を表示

試して理解するDependency Injection in Go

## はじめに
Goでクリーンアーキテクチャやレイヤードアーキテクチャを実装しようとすると、`DI(Dependency Injection)`や`DIP(Dependency Inversion Principle)`などの概念が出てきて思うようにアーキテクチャに対する理解が進みませんでした。

また、GoでDIについて解説された記事は既にいくつかあるのですが、いまいち腑に落ちていなかったので自身の知識を整理するためにこの記事を書きました。

この記事ではシンプルな実装でDIに触れ、DIのメリットを体験できることを目的とします。

DIについてはこちらの記事にわかりやすくまとまっていますので、そもそもDIって何?という方はぜひ参考にしてみてください。
https://qiita.com/hshimo/items/1136087e1c6e5c5b0d9f

## DIのメリット
DIについて細かく説明するのはこの記事の本題ではないのですが、DIを導入するメリットについては軽く触れておきたいと思います。

DIのメリットは以下の2つです。
– オブジェクト間の結合度を下げる
– 依存関係

元記事を表示

structの処理を差し替えてテストする

現職に就いてからは初めての投稿。

転職に伴い以前は興味半分にしか触っていなかったGoについて本格的に開発で利用することになった。
言語の勉強も兼ねてツールを作って試行錯誤している中で最近やり方を調べながら進めたネタについてのメモで。

#### 免責

まだGoを手探りで勉強中で作法とかあまりわかっていないので、その中でこうやるとうまくいったよという一例として閲覧いただければと思います。
(いいやり方かどうかはわかりません、むしろお作法的に良い方法あればコメ投げてください)

## 経緯

ファイルの変更を検知してあれやこれややるツールを作っていて、ファイルイベントの検知に [fsnotify](https://github.com/fsnotify/fsnotify) を利用している。

“`go
import “github.com/fsnotify/fsnotify”

func someFunc() error {
var w, err = fsnotify.NewWatcher()
if err != nil {
return err
}
defer w.Cl

元記事を表示

MarshalJSONで任意の変数をJSON keyに使いたい

struct tagだけでは多分無理なので[json.Marshaler interface](https://golang.org/pkg/encoding/json/#Marshaler)を自前で実装してやる。

“`main.go
package main

import (
“encoding/json”
“fmt”
)

type RootStruct struct {
Values []valStruct
}

type valStruct struct {
JsonKey string `json:”-“`
Value string `json:”value”`
Error string `json:”error”`
}

func (s RootStruct) MarshalJSON() ([]byte, error) {
data := map[string]interface{}{}

for _, val := range s.Values {
// json keyはvalStruct側のJsonKeyを参照する
data[va

元記事を表示

[Windows] Dockerを使用してMosquittoでMQTTサーバを構築する際に別コンテナにloalhostで接続できるようにする

### TL;DR
– Mosquittoを使ってMQTTサーバを立てた際にコンテナ間でlocalhostで接続できないかと調査
– docker-composeでnetwork_modeを「host」にすることでホスト端末と同じIPアドレスにすることで可能とわかった
– GO言語のpaho.mqtt.golangライブラリを使って接続テストを実施

### 環境
– Windows10
– Docker Desktop 2.2.0.3
– docker-composeはDocker Desktopに同梱
– visual studio code 1.42.1[拡張機能Remote – Containers使用]
– Mosquitto 1.6.9

### 完成したリポジトリ
https://github.com/MegaBlackLabel/mqtt-docker-sample

### ファイル
“`yaml:docker-compose.tml
version: ‘3’

services:
api:
build:
docker

元記事を表示

3. APIの仕様書を書く

## APIってなに?
例えば,ユーザがユーザIDと年月日を入力すると,その日のそのユーザのやわらかさを返す,といったような機能のことです.

## なぜ仕様書を書くのか?
どういう値を受け取ってなにを返すのか,自分の頭が整理できます.
またこれから会社に入ってチームで開発するとき,チームメンバーで機能や仕様の共有のためにも仕様書は必須です.逆に仕様書を受け取って開発することもあります.慣れましょう.

>実装着手するまで結構かかりますが、サーバサイドの開発は設計と検証がすごく重要なのでしっかりと固めながら進めていきましょう!

という名言もいただきました.

## 仕様書を書いてみよう
今回は[Swagger](https://editor.swagger.io/)と呼ばれる,変数名とかをぶちこむだけでいい感じの仕様書を勝手に作ってくれるエディタを使用しました.ブラウザ上で使えます.
スクリーンショット 2020-03-24 14.20.38.png2. データベースにどんな属性がはいるのか

## どんな値がデータベースに入るのか
Googleのスプレッドシートを用いて,どんな値がデータベースに入るのかを想像して書きました.[ここ](https://docs.google.com/spreadsheets/d/1EIBojdgGavA9UZ2POvNoqKz-yb2N60bz9–t79MVjQA/edit?usp=sharing)にスプレッドシートを置いておきます.

テーブルは
・ユーザ情報の格納:userテーブル
・やわらかさの格納:yawarakasaテーブル
の2つ用意しました.

| Tables_in_yawarakasaapp |
|————————-|
| user |
| yawarakasa |

userテーブルには下記のような情報が入ると仮定し,

| user_id | sex |
|———+——|
| Hochiko | f |
| Kuno | f |
| mama | f |
| papa

元記事を表示

Go標準パッケージのみでWebアプリを作る?

※編集中

## おはようございます?
久野です.バックエンドに興味持ったので勉強しつつ何か作ろうと思いWebアプリをつくることにしました.

## なにをつくるか
開脚のやわらかさを競うWebアプリをつくります.
yawarakasa

### 技術選定
* 言語
* Go
* データベース(やわらかさ格納するやつ)
* MySQL

### なぜGoか
「**軽量・高速・シンプル**」と謳われ,流行ってたからです.
Go言語と調べるとこんな感じでいいところがたくさんでてきます▽
[2019年大注目のGo言語(Golang)!入門者も知っておきたい特徴や強みはコレ!](https://proengineer.internous.co.jp/content/columnfeature/136

元記事を表示

AtCoderの提出を取得してGitHubの芝を生やすコマンドラインツールを作った

# procon-gardener

### 概要

AtCoderの提出から自動的にコードを取得して、ローカルリポジトリに保存する[procon-gardener](https://github.com/togatoga/procon-gardener)というツールを作りました。
モチベーションとしては競技プログラミングの問題は解いて、もりもりコードは書けるけどGitHubのアクティビティ(芝)がゼロで評価を受けづらい人のために作りました。