golangの日記

Go言語を中心にプログラミングについてのブログ

Go言語

Go言語(golang)でdirenvを使う

direnvは、ディレクトリに cd コマンドで移動することで、 そのディレクトリに環境変数をメッセージとともに自動的に設定してくれます。 Go言語で書かれていますが、python,node,ruby などでも使えます。 (python なら pyenv,venv の代わりに使うことができ…

Go言語 sudo のパスワードを Stdin から入力する

exec.Command で sudo のパスワードを Stdin から入力 package main import ( "fmt" "os" "os/exec" "strings" ) func main() { command := []string{"sudo", "-S", "chown", "-R", "root:root", "foo.txt"} cmd := exec.Command(command[0], command[1:]...…

Go言語(golang) filepathでパスを扱う

filepathパッケージを使用したパスの扱い方と、使わずに分割してみたりする。

Go言語(golang) 実行ファイルのファイル名や行番号、関数名などを取得する

runtime.Callerやruntime.FuncForPCを使って 実行ファイルのパスや実行している行番号、関数名などを取得する

Go言語(golang)で簡単なファイル検索プログラム

初学者向け。golangで簡単なファイル検索プログラムの作り方 プログラミングを始めると何かしらメモしたりするので、 それをコマンドラインで検索してファイルを開くためのプログラムです。

dockerを使ったgolangの開発

dockerを使ったGo言語の開発する手順(docker-composeなし) 日本語ドキュメント http://docs.docker.jp/index.html ホスト側にディレクトリとファイルを作成 $ mkdir ~/go/src/hello $ vim ~/go/src/hello/main.go package main func main() { println("hello…

Go言語(golang)のinterface{}を型アサーション/型キャスト

アサーション(assertion)の意味は断定、断言なので、型を断定するですかね。 interface型をアサートするには、i.(T) を使います。 複数から判別したい場合は、switch文で i.(type) を使います。 構造体type xxx structやインターフェースtype xxx interface …

Go言語(golang)のAgouti(Selenium WebDriver)の使い方

Go言語でSelenium WebDriverを使うサードパーティパッケージAgoutiの使い方。 Webブラウザを自動化し、作成したウェブサイトのテストやウェブクローラーに使います。 ライブラリのAgoutiの他、Google Chromeを使う場合は、chromedriver が FireFoxを使う場合…

Go言語(golang) ビットフラグ/マスク

golang でビット演算を使ったフラグ(マスク) ビットフラグは、1 か 0 (真か偽) で 1ビットずつに意味を持たせたものです。 例えば 000 と三桁あって A のフラグをオンにすると 001、 B のフラグをオンにすると 010、 C のフラグをオンにすると 100、 全てフ…

Go言語(golang)のタイムフォーマット

golangで時刻をフォーマット(文字列化)するには Mon Jan 2 15:04:05 MST 2006 を使います。 他の言語のように %a %b %d %X %Z %Y ではありません。なので %Y は 2006 です。 このGo言語のフォーマットは、stack overflowの回答にあるように、 月、日、時、分…

Go言語(golang)で httpリクエストのレスポンスボディの大きさにリミットを設ける

HTTP Request で返ってくる http.Response の Body の大きさに制限を設けてコンテンツが制限を超えていればリクエストを中止する方法です。 レスポンスヘッダーの Content-Length または、Go言語の場合は、resp.ContentLength をもとに制限すればよいのかも…

Go言語(golang) switch文の書き方

go言語(golang)の switch 文の基本的な使い方と型(type)判定 switch 文は if 文と同様に条件により処理を振り分けることができる。

Go言語(golang) map の初期化と使い方

連想配列(他言語のhashやdict)は、Go言語では map です。

Go言語(golang)のループ for, for..range, foreach, while

go言語(golang)での繰り返し処理 for文の使い方。 foreach と while については go言語に構文自体がないので、それぞれ for range と for 文を使う。 また、他の言語同様に continue でスキップ break でループ処理を抜けることができる。

Go言語(golang)でJavaScriptが実行できるottoの使い方

otto は、JavaScript をGo言語に変換して実行できるパッケージです。 Goのプログラムをコンパイルして JavaScript のファイルを読み込めば動的に実行できるので、 設定ファイル以上のことをする場合などに便利です。 ただし ES5 なので let, const, () =>, …

Go言語(golang) reflectで構造体のタグ/アノテーションを取得する

JSONやYAMLなどで使う構造体のタグ/アノテーションを取得する type A struct { B string `これ` }

Go言語(golang) 構造体のフィールド名、値、型を再帰的に列挙する

reflectパッケージを使ってループでフィールド名、値、型を出力する

Go言語(golang) ファイルの読み書き、作成、存在確認、一行ずつ処理、コピー など

Go言語でファイルの読み書きと作成、ファイルがパスに存在するかの確認、 ファイルの内容を一行ずつ処理する、ファイルのコピー、などの使い方 os.Create ファイルの新規作成。読み書き両方。 os.Open ファイルを開く。読み込み専用。ファイルがなければ作成…

Go言語(golang) JSON Marshal, Unmarshal, NewDecoder, NewEncoder の使い方

Go言語での JSON のパース/変換 Marshal, Unmarshal, NewDecoder, NewEncoder の使い方。 構造体のタグの指定方法については Go言語の構造体とJSON に書きましたのでそちらをどうぞ。 ドキュメント golang.org - JSON

Go言語(golang) YAMLの使い方

golangにはYAMLの標準パーッケージはありません。 なので yaml.v2 を使って、 YAML から go言語のデータ型(構造体やマップなど) に変換(Unmarshal,Decode) と、 その逆で go言語のデータ型から YAML に変換(Marshal,Encode) します。 以下、パッケージのダウ…

Go言語(golang)で出力を破棄する

テストなどで出力を破棄したい場合に os.Open(os.DevNull) や io.Writer を実装する必要はなく io/ioutil パッケージに破棄するための変数が定義してあります。

Go言語(golang) flagパッケージでコマンドライン引数をパース

Go言語の標準ライブラリ flag パッケージを使ったコマンドラインオプション(フラグ)の基本的な解析方法と、 独自の型(例えば、URL や JSON など)を扱えるようにするための実装方法 flagパッケージ ドキュメント: https://golang.org/pkg/flag ソースコード: …

Go言語(golang) io.TeeReader を使ってダウンロードの進捗状況を出力しながらファイルに書き込む

Go言語で大きなファイル(ISOなど)をダウンロードしながら標準出力にプログレスバーなど、 進捗状況を出力したい場合に、io.TeeReader が便利です。 また、Content-Length をダウンロードが完了する前に知ることができます。

Go言語(golang)の構造体とJSON

構造体のタグを使ってJSONのフィールド名/オプションを指定する jsonのパースなど詳しい使い方は Go言語 JSON Marshal, Unmarshal, NewDecoder, NewEncoder の使い方 に書きましたのでそちらをどうぞ。

Go言語(golang)でWSSE認証する

某ブログサービスでコマンドラインからAPIで記事を投稿するのに、 WSSE認証とBasic認証の二択だったので書いてみました。

はてなAPIを使ってブログエントリを投稿するときの編集モード

はてなAPIのドキュメント はてな認証ドキュメント一覧 OAuth 対応 API 一覧 はてなブログAtomPub はてなAPIは、ドキュメントがしっかり書かれているので、 困ることはないですが、ブログの編集モードに関して text/html (見たままモード) text/x-markdown (…