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

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

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

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

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

# ■ Iterator(イテレータ・パターン)
Iteratorパターン(イテレータ・パターン)とは、GoF(Gang of Four; 4人のギャングたち)によって定義されたデザインパターンの1つである。コンテナオブジェクトの要素を列挙する手段を独立させることによって、コンテナの内部仕様に依存しない反復子を提供することを目的とする。

## UML class and sequence diag

元記事を表示

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

GoFのデザインパターンをGolangで学習してみたいと思います。
今回は、Qiita記事: “[Pythonで、デザインパターン「Command」を学ぶ](https://qiita.com/ttsubo/items/80fcaa529ce9f37e2543)”で取り上げた、Pythonベースの”Command”のサンプルアプリをGolangで実装し直してみました。

# ■ Command(コマンド・パターン)
Command パターン(英: command pattern)はオブジェクト指向プログラミングにおけるデザインパターンの一つで、動作を表現するオブジェクトを示す。Command オブジェクトは、動作とそれに伴うパラメータをカプセル化したものである。
例として、印刷を行うライブラリが PrintJob クラスを備えているとする。ライブラリのユーザーは新たに PrintJob オブジェクトを作成し、パラメータ(印刷するドキュメント、印刷部数など)をセットし、最後にプリンターにジョブを送信するメソッドを呼び出す。

## UML class and sequence diagr

元記事を表示

yukicoder contest 241 参戦記

# yukicoder contest 241 参戦記

# A 1009 面積の求め方

8分半で突破. ヒント通り区分求積法でスパッと解いてみた. 区間をどれくらいの数で割ればいいのかに悩んだが、適当にえいやで4096でやったら一発目で良さげな精度が出たので、提出してみたら無事 AC.

“`python
a, b = map(int, input().split())

x = a
result = 0
t = 1 / 4096
while x < b: result += abs((x - a) * (x - b) * t) x += t print(result) ``` # B 1010 折って重ねて 41分で突破. 整数で処理するコードを書いて、なんで AC しないんだと延々と悩んでいた. アホすぎる. 縦と横で短い方を限界まで折ってから、長い方を限界まで折ればいい. ```python x, y, h = map(int, input().split()) if x < y: x, y = y, x x *= 1000 y *= 10

元記事を表示

Go と C++ の可変長引数

# 動機

go の syscall パッケージには、

“`go:go
func Syscall(trap, a1, a2, a3 uintptr) (r1, r2 uintptr, err Errno)
func Syscall6(trap, a1, a2, a3, a4, a5, a6 uintptr) (r1, r2 uintptr, err Errno)
“`

のように、引数の数に応じて関数が用意されている。

go には可変長引数という素晴らしい仕組みがあるのになぜ? もしかして可変長引数遅いの? と思って今日も楽しいマイクロベンチマーク。

# ソースコード

## go

まあソースコードから。

“`go:go
package main

import (
“fmt”
“os”
“strconv”
“time”
)

func vari6(n …uintptr) uintptr {
return n[0] + n[1] + n[2] + n[3] + n[4] + n[5]
}

func fixed6(a, b, c, d, e, f uint

元記事を表示

Kubernetesで和牛を給付する

# Motivation
コンテナ管理基盤であるKubernetesには、Kubernetes Operatorという概念があり
任意のオブジェクトをKubernetes上で管理することができる。
このKubernetes Operatorを用いると和牛も管理することができるので給付してみる。

ここで、Kubernetes Operatorを開発するツールは、下記の通りいくつか存在しているが
エコシステムが充実しているOperator SDKを採用した。

[Operator SDK](https://github.com/operator-framework/operator-sdk)
[Kubebuilder](https://book.kubebuilder.io/)
[Metacontroller](https://metacontroller.app/)

# QuickStart
## 環境
– [kind](https://github.com/kubernetes-sigs/kind)
– Docker
– Mac

## 和牛の配り方
### [Quay.ioの

元記事を表示

Goの複素数を触ってみた

自分でGo関連の情報を収集してたら、Goだと複素数が組み込みで入ってるらしいので、触ってみることにした。

# やること
シンプルに複素数の積と偏角の和の性質を確かめる。
その過程で使える便利関数を探してみる。

## 角度計算をしてみたコード

“`go
package main

import (
“fmt”
“math”
)

func main() {
const X complex128 = complex(1,1)
ratio := real(X)/imag(X) // 実部と虚部を取り出して比を計算
const radian := math.Atan(ratio) // 比からタンジェントの逆関数で偏角を計算
fmt.Println(radian * 180 / math.Pi) // ラジアンから度数に変換 45度になる
}

“`
複素数型である complex128 を宣言して、
real関数: 実部を取得
imag関数: 虚部を取得

と、組み込み関数で簡単に取り出せるのはすごく楽
ただ、探した感じラジアンを度数法に変換する組み込み関数は

元記事を表示

アプリケーション間でRequestIdを送りあってみる

# やりたいこと
サービスが複数またがってている場合、運用時にサービス間を跨いだログを見たくなる時があるので、その方法をかく。
順番は
1. Spring BootでRequestIdを生成して、ログファイルに出しておく
2. 他アプリケーション(今回はGin)に対して、リクエストを投げる
3. Gin側でRequestIdを受け取る

ソース
[Spring Boot](https://github.com/ririkku/spring-log-demo)
[Gin](https://github.com/ririkku/go-sandbox/tree/master/gin-nginx-sample)

# 環境
– Java
– Spring Boot
– Go
– Gin

# Spring Boot側にRequestIdの設定を入れる

## ログファイルにRequestIdが表示されるようにする

MDCを使用して、リクエスト毎にUUIDを生成して、ログに仕込めるようにしておく

“`SampleFilter.java
import org.slf4j.MDC;
impor

元記事を表示

Golangで、デザインパターン「Chain of Responsibility」を学ぶ

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

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

# ■ Chain of Responsibility(チェーン オブ レスポンシビリティ・パターン)
「Chain of Responsibility」という英単語は、「責任の連鎖」を意味します。
このパターンは、ある要求の受取り対象となる複数のオブジェクトに鎖状の関係を構築し、要求を処理する事が可能なオブジェクトに渡るまで、順次、構築し

元記事を表示

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

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

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

# ■ Proxy(プロキシ・パターン)
Proxyパターンは、プログラミングにおけるデザインパターンの一種。Proxy(プロキシ、代理人)とは、大まかに言えば、別の物のインタフェースとして機能するクラスである。その「別の物」とは何でもよく、ネットワーク接続だったり、メモリ上の大きなオブジェクトだったり、複製がコスト高あるいは不可能な何らかのリソースなどである。
Proxyパターンのよく知られている例として、参

元記事を表示

gormとgolang-mitateでオートマイグレーションをやってみた

# gormとgolang-mitateでオートマイグレーションをやってみた

goのマイグレーション探してたらgolang-migrateが良さそうだったので使ってみた

https://github.com/golang-migrate/migrate

今回やったのはgormを使った場合の実装
https://github.com/jinzhu/gorm

## パッケージ構成
“`
.
├── cmd
│   └── main.go
├── internal 
│   └── infrastructure
│      └── sql_handler.go
└── migrations
   ├── 20200319010701_create_table.down.sql
   └── 20200319010701_create_table.up.sql
“`

## マイグレーションファイル
“`20200319010701_create_table.up.sql
CREATE TABLE sample(
id VARCHAR(26) PRIMARY

元記事を表示

Golang 入門

個人的なメモとして用いる。

## GOの特徴
– コンパイラ言語
– 静的型付け言語
– 文法がシンプル
– 並行処理プログラミング
– クロスコンパイルが可能
– 標準パッケージが豊富

## ソースコードの構成
“`main.go
// パッケージの定義
package main

// 標準パッケージや外部ライブラリのインポート
import “fmt”

// main関数の定義
func main {
fmt.Println(“Hello World”)
}
“`

## プログラムはどこから実行されるのか
– main関数
– mainパッケージに存在する
– ソースコードを追う時はここから
– プログラムのエントリポイントで、初期化後はここから実行される
– webサーバの場合は常に実行されているので代わりにhttpハンドラを読む

## GOPATH
– GOPATHとは?
– Goのソースコードやビルドされたファイルが入るパスが設定されている
– インポートされるパッケージもここから検索される
– 環

元記事を表示

Gin+Realize+docker-compose+Nginxで環境を整えてみる

Gin + Nginxで仕事でも使えるかな、と思いつつ開発環境を作成する

ソースは[こちら](https://github.com/ririkku/go-sandbox/tree/master/gin-nginx-sample)

# 環境
Go 1.14
Gin 1.5.0
Docker 19.03.8
docker-compose 1.25.4

# やること
1. GinでREST APIを作成
1. realizeでホットリロードできるようする
1. docker-composeでNginxを立ててリバプロする

# GinでREST APIを作成
GETでリクエストがきたら、 `{“key”:”value”}`を返すだけのコードを作成

“`main.go
package main

import “github.com/gin-gonic/gin”

func main() {
router := gin.Default()

router.GET(“/api”, func(context *gin.Context) {
context.JSON(200, g

元記事を表示

Goの門をくぐってみる(GoとGinのQuickStart)

なんとなく触ってみたいなと前々から思ってたので、チャレンジ。普段はJavaを書いています。なので、型が欲しいという思いでGoに触れてみます。僕はGoについての知識0なので、どこまで簡単に作れるのかもみていきたいです。

いろんな規則や、わからないことがあれば、以下の2つのサイトを探りながら書いていきたいと思います。

– https://golang.org/doc/effective_go.html
– http://go.shibu.jp/effective_go.html

# 事前準備

## homebrew
[この](https://brew.sh/)サイトからinstallできます

## go
コマンド打つだけ、簡単

“`
brew install go
“`

versionは1.14

“`.sh
ri2kku~:$:
->> go version
go version go1.14 darwin/amd64
“`

# 何がともあれGoのQuickStart
Go公式のQuickStartを参考に世界に挨拶してみます
https://golang.or

元記事を表示

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

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

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

# ■ Flyweight(フライウェイト・パターン)
Flyweightパターン(フライウェイト・パターン)とは、GoFによって定義されたデザインパターンの1つである。 等価なインスタンスを別々の箇所で使用する際に、一つのインスタンスを再利用することによってプログラムを省リソース化することを目的とする。

## UML class and sequence diagram
![W3sDesig

元記事を表示

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

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

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

# ■ Facade(ファサード・パターン)
Facadeパターンあるいは Façadeパターン(ファサード・パターン)とは、GoF(Gang of Four; 4人のギャングたち)によって定義された、コンピュータソフトウェアのデザインパターンの1つである。Facade(ファサード)とは「建物の正面」を意味する。異なるサブシステムを単純な操作だけを持ったFacadeクラスで結び、サブシステム間の独立性を高め

元記事を表示

Azure Functions で Go 言語を使おう(Go 1.14.2 待ち)

Azure Functions custom handler というものを使うと、Web API を作れる言語なら、なんでも Azure Functions の上で動かせるようになります!!まだプレビューですけど、楽しみな機能です!!

端的に言うと、Azure Functions がサポートしていない言語での開発や、Azure Functions がサポートしている言語でも特定の Web API を開発するフレームワークを使って開発するといったことが出来ます。サポートしていない言語での開発だと Go 言語で開発出来たり、後者の例だと Node.js で express を使って開発したり C# で ASP.NET Core を使って開発したりといったことが出来ます。

ドキュメント:[Azure Functions custom handlers (preview)](https://docs.microsoft.com/ja-jp/azure/azure-functions/functions-custom-handlers)

## 仕組み

`host.json` に裏で動く

元記事を表示

【Go】Lambda + RDS 接続にRDS Proxyを使ってみた

## はじめに
現在、API Gateway + Lambda + RDSを使ってWebアプリケーションを作っています!2019年末に行われたre:Invent 2019で発表された、[RDS Proxy](https://aws.amazon.com/jp/rds/proxy/)(現在はプレビュー版です。)を試してみたので備忘録です。

## RDS Proxyってなに?
簡単に言うと、データベースへのコネクションプールを確立、管理することで、アプリケーションからのデータベース接続数を少なく抑えることができるサービスです。

Lambda関数は、呼び出すごとに新しいコネクションを作成する必要があります。しかし、LambdaからRDSへの同時接続数には上限があり、これまではコネクション数が上限に達しないようにする必要がありました。これを解決してくれるのがこの**RDS Proxy**です。RDS Proxyを利用することで、既存のコネクションを再利用することができ、コネクション数を抑えることができます。

つまり、Lambda + RDSの構成が避けられていた原因の1つの同時接続数問題

元記事を表示

ゴリラ言語の読み方

先日、「ウ」と「ホ」と改行文字だけでプログラミングできる「ゴリラ言語」を作りました。

コード短いのでそのまま張っておきます。

“`

元記事を表示

API設計について調べたことのまとめ

API設計について、最近得た知見をまとめました。私がGoで開発しているのでGoベースの話になります。
間違いがあればコメントで教えていただければ幸いです。

# 参考資料
– GopherCon 2018 : [GopherCon 2018 – How Do You Structure Your Go Apps?](https://about.sourcegraph.com/go/gophercon-2018-how-do-you-structure-your-go-apps)
– デモのソースコード : [katzien/go-structure-examples](https://github.com/katzien/go-structure-examples/tree/master/flat)
– クリーンアーキテクチャのソースコード : [go-clean-arch](https://github.com/bxcodec/go-clean-arch)
– SlackのGophers, StudentGoなどの得た情報
– 株式会社オージス総研 クラウドインテグレーションサービス

元記事を表示

GoでEd25519+SHA256のアドレス導出してみる(Symbol,Catapult,RC5)

# はじめに

catapult-serverのv0.9.3.1から、公開鍵の導出方法が変わりました。

https://github.com/nemtech/catapult-server/releases/tag/v0.9.3.1

いままでは、Ed25519+Keccak256だったのが、標準のEd25519に変わりました。

ということで、GoのEd25519ライブラリが使えるんじゃないかと思うので、やってみたいと思います。

# 秘密鍵から公開鍵とアドレスを導出する

こちらのNIP10を参考にやっていきます。

https://github.com/nemtech/NIP/blob/eef91708a05fc6ce24a903d742ff46682008a8b7/NIPs/nip-0010.md

## 公開鍵

NIP10に例示してある秘密鍵と公開鍵は、

“`yaml
private: 575dbb3062267eff57c970a336ebbc8fbcfe12c5bd3ed7bc11eb0481d7704ced
public: 2e834140fd66cf87b

元記事を表示

OTHERカテゴリの最新記事