Post

Golang

2020-07-19 17:51:47

vscodeでgoのLanguage Serverを有効にしたらコード定義元ジャンプができなくなった

概要vscodeでgoのLanguage Serverの設定を有効にしたらコード定義元へのジャンプができなくなってしまったので原因を調査した。 settings.json "go.useLanguageServer": true, 結論go.modがプロジェクトのルートに存在している必要がある。 cf. stackoverflow - How to properly use go modules in vscode? vscodeでフォルダを開くときに、こうではなく、 . ├── app ├── go.mod こう開くようにしないとパスが良しなに解決されないせい...

プログラミング

Golang gocode gopls Language Server vscode

2020-06-07 11:25:58

VPS×Docker Compose×Docker Machine×Golang×Nginx×Let...

概要GolangのアプリケーションをVPSでDocker-Composeを使って本番運用してみたかったので、トライしてみた。 環境実際に自分がトライした環境をまとめておく。 VPS(Conoha) お名前ドットコム(ドメイン管理) Docker Compose(本番とローカルの構成を別ファイルで構築) Docker Machine(デプロイで使う) Let's Encrypt(TLS/SSL) Nginx(リバースプロキシ) リポジトリサンプルをつくった。github - bmf-san/go-production-boilerplate 本番環境のサーバーではユーザー作成とかポー...

ポエム

Docker Docker Compose Golang Let's Encrypt Nginx Docker Machine VPS

2020-01-26 23:57:08

GolangでgoblinというURLルーターを自作した

概要GolangでURLルーターを自作したので実装するまでの過程をメモしておく。 準備URLルーターを実装する際に行った下準備をまとめる。 データ構造とアルゴリズムURLをどのようにマッチングさせるか、というロジックについて検討する。 多くのライブラリでは、データ構造として木構造がよく扱われているので、どんな種類の木構造を採用するかを考えてみた。 文字列探索に特化した木の中で、時間的・メモリ的計算量がよりベストなものを選定しようとすると、基数木というのが良さそうに見えるので最初はそれを採用しようとしていたのだが、実装が難し過ぎて挫折をした。 もう少し身近でシンプルなものをということでトライ木を...

プログラミング

Golang URLルーティング

2019-11-03 11:03:15

GolangのHTTPサーバーのコードリーディング

概要この記事はQiita - Go6 Advent Calendar 2019の20日目の記事です。 GolangでHTTPサーバーを立てるコードの詳細を追ってコードリーディングします。 参考実装コードリーディングしていく実装はこちら。 package main import ( "net/http" ) func main() { mux := http.NewServeMux() handler := new(HelloHandler) mux.Handle("/", handler) s := http.Server{ Add...

プログラミング

Golang net/http

2019-09-25 09:36:59

A Trie implementation in Golang

概要トライ木のアルゴリズムと実装についてかく。 bmf-san/road-to-algorithm-master  トライ木とはトライ木(プレフィックス木ともいう。英語はそれぞれ、trie、prefix tree)は文字列の集合を扱う木構造の一種。 各ノードは単一または複数の文字列あるいは数値を持ち(ノードは必ずしも値を持つ必要はない)、根ノードから葉に向かって探索して値をつなげていくことで単語を表現する。 ネットワークのレイヤーならIPアドレスの探索、アプリケーションレイヤーならhttpのルーティングに、機械学習とかの文脈であれば形態素解析といったところでトライ木の応用が見受けられる。 言葉...

プログラミング

Golang アルゴリズム 基数木 トライ木

2019-08-18 18:05:25

Dive to clean architecture with golang

概要GolangでClean Architectureの実装に挑戦したみたので整理しておく。 内容は概ねスライドの内容を踏襲している。 理解しきれていないところがあったり、自分の解釈、考えを記述しているので、正しくない部分もあるかもしれない。 スライドLTをする機会があったのでスライドを貼っておく。 Dive to clean architecture with golang ソースソースはこれ。 bmf-san/go-clean-architecture-web-application-boilerplate MVCのパターンでの実装もtagを切って残してある。 1.0.0 - MVC 背景...

プログラミング

Clean Architecture Golang DIP

2019-04-11 15:09:57

Realizeを使ってgoでホットリロードを実現するメモ

概要github - oxequa/realizeを使ってみたメモ。 準備go get github.com/oxequa/realize 使い方./demo/ ├── .realize.yaml └── main.go .realize.yaml settings: legacy: force: false interval: 0s schema: - name: demo path: . commands: run: status: true watcher: extensions: - go paths:...

プログラミング

Golang realize

2019-02-07 12:47:37

Goでmysqldumpツールをつくる

概要このブログのDBバックアップを原始人のごとく手動でやっていたのでコマンド一発でバックアップをリモートからローカルにバックアップを取れるツールをgoでつくってみた。 パッケージ "net" ネットワークI/O、TCP/IP、UDP、ドメイン名前解決、Unixドメインソケットなどのインターフェースを提供してくれるやつ "time" 時間の計算や表示のための機能を提供してくれるやつ "io/ioutil" ファイル周りのI/Oユーティリティを提供してくれるやつ "golang.org/x/crypto/ssh&qu...

プログラミング

Golang MySQL ssh mysqldump

2018-11-15 14:39:15

Golangのインターフェース概要

概要Golangのインターフェースについてまとめる。 Golangのインターフェースとは 特定のメソッドの型だけを列挙した型 インターフェースFooで宣言したメソッドが全て実装されている構造体は、型Fooとして扱うことができる。 インタフェースを使うとポリモーフィズムを実現することができる インターフェースの定義type <型名> interface { <メソッド名(<引数の型>, ...)(<戻り値の型>, ...) } // Ex. type Human interface { say() string } インターフェースの特徴イ...

プログラミング

Golang

2018-11-13 21:13:03

Golangのポインタ概要

概要Golangのポインタの基本では参照渡しと値渡しの違いの観点からポインタについて書いたが、それ以前にポインタを扱っているうちに混乱してきたため、ポインタの概要をまとめる。 ポインタ型とは メモリー上のアドレスを記憶する変数の型のこと ポインタ型の定義 *を使って定義する var s *string // 変数sはstring型のポインタ。型は*string アドレス演算子と間接参照演算子アドレス演算子 & 任意の値からポインタ型を生成し、アドレスを得る 間接参照演算子 * ポインタ型変数から値を参照する(デリファレンス) ポインタ型変数package main impor...

プログラミング

Golang