【GO】タイムアウトや定期実行処理

golangで定期処理などを書きたくなったのでどうやって書くか考えます。

とりあえずtimeパッケージかcontextパッケージあたりを使うと良さそうなので2つとも使ってみます。

続きを読む 【GO】タイムアウトや定期実行処理

【GO】fmt.Printf関数で配列の中身をフォーマットする

配列の中身つ1つに対してPrintf系のフォーマットにかけることを考えます。

さらにそれを利用して独自のSprintf関数を作ったりしてみる。

続きを読む 【GO】fmt.Printf関数で配列の中身をフォーマットする

【GO】桁数の分からない数値を文字列にする

桁数を指定せずに大きな数値や精度の高い数値をそのまま文字列にしようとすると、途中で切れたり指数表記になったりする。

float64の数値をそのまま(非指数表記)でstringに変換したい。

簡単そうで意外にできなかったので方法を覚書きしておく。

続きを読む 【GO】桁数の分からない数値を文字列にする

【GO】html/templateにタグ入り文字列を渡す

template/htmlを使ってHTML表示を行う時、テンプレートの一部の表示方法を変えたいときがあります。

変えたい部分だけ変えたテンプレートを複数用意する方法もありますが、面倒というか煩雑になるのでパース部分に直接HTMLタグを書いて変更させたい。

そのままやるとタグ部分が文字列になったのでその対策方法メモ。

Execute部分などはgin-gonic/ginを使っているので省略。

続きを読む 【GO】html/templateにタグ入り文字列を渡す

【GO】gin + statikのシングルバイナリファイルサーバ

ginでシングルバイナリからファイルサーブすることを考えた。

用途を考えるとシングルバイナリ化する利点はあまりないこともあり、標準メソッドだけではできなかったので実装メモです。

以前に書いた記事も参考にした。

statikの使い方

statikパッケージを使うとフォルダをZIP化(バイナリ化)してhttp.FileSystemとして扱えるようになる。

ginのstaticFS

ファイルシステムの静的ファイルをサーブできるメソッド。

これが一番簡単だけどルートアクセスに設定できません。

static middleware(github

ミドルウェアを使うことでルートに設定可能です。

これをstatikで使えるようにします。

Serveの第2引数はServeFileSystemなのでインターフェースを満たす必要がある。

 

Existsメソッドが必要そうなのでミドルウェアの実装から必要なものを抜き出して実装してみます。

これでルートからでもファイルサーブできるようになった。

【GO】gin+Reactのルーティング

Golang製Web Framework「gin」とjavascriptライブラリ「React」を合わせてウェブサービスを作ることを考えます。

ルーティング部分でちょっと詰まったので覚書き。

続きを読む 【GO】gin+Reactのルーティング

【GO】ginのシングルバイナリにtemplateを含める

前にginを使ったWEBアプリをシングルバイナリ化をする場合、テンプレートを含めるなら別途実装が必要になると書いた。

現在はgolangでフロント部分を書かない方針だけど、そのうち必要になるかもしれないのでフォルダ内のテンプレートを一括で読むくらいの処理を書いてみました。

具体的にはginのLoadHTMLGlobの置き換えです。

続きを読む 【GO】ginのシングルバイナリにtemplateを含める

【GO】外部ファイルを含めた実行ファイルの作成

GOで画像やHTMLを扱う時にシングルバイナリ化することで簡単にリリースできるようにしたい。

以前スマホアプリ制作用にgo-assets-builderを使ってバイナリ化したことがありますが、他の方法も検討してみて使ってみます。

【GO】静的ファイルを含めた実行ファイル作成

続きを読む 【GO】外部ファイルを含めた実行ファイルの作成

【GO】ginを使ったWEBサービスの構成

golangパッケージ、ginを使ったWEBサービスのテストができたので実際にどう構築するか考えてみました。

思いついたときにサービス追加しやすいことを前提に構成する。

続きを読む 【GO】ginを使ったWEBサービスの構成

【GO】interface{}を引数にした汎用関数を作る

汎用的な関数を作りたいときにinterface{}型を引数にしてswitchで処理を書くことがあります。

忘れないうちに要点メモ。switchの以下の要素を使います。

  • Type switch:インターフェースの型分岐
  • Multiple cases:複数ケースの処理

続きを読む 【GO】interface{}を引数にした汎用関数を作る