golangの日記

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

TypeScript + webpack でブラウザ拡張機能開発

TypeScript と webpack でブラウザ拡張機能/アドオンの開発するメリット TypeScript は chrome API の型定義ファイル( @types/chrome ) があるので それを入れておくと型チェックと vscode で API の補完ができるようになる webpack は jquery や axios など…

JavaScriptで文字コード変換

JavaScriptのライブラリ encoding.js を使った文字コード変換。 (使い方は README_ja.md に日本語ですべて載ってる) ブラウザで読み込む <script src="encoding.min.js"></script> npmでダウンロードする $ npm i encoding-japanese

Go言語(golang) 変数と定数

Go言語の変数と定数の宣言と値の代入について

Go言語(golang) 数値

Go言語の単純な数の計算と算術演算子(ビット演算子)の使い方。 数値に関する型(それぞれの型で扱える範囲) uint 整数 uint8 0 〜 255 uint16 0 〜 65535 uint32 0 〜 4294967295 uint64 0 〜 18446744073709551615 int 整数 int8 -128 〜 127 int16 -32768 …

Go言語(golang) if文の使い方

Go言語のif文(条件分岐)の使い方 if [条件式] { // 何らかの処理 } else if [条件式] { // 何らかの処理 } else { // 何らかの処理 }

Go言語(golang) 文字列/string

文字列型(string)の基本的な使い方とbyteとruneについて

Go言語(golang) 関数

関数の定義と実行 func 関数名(引数名 引数の型, 引数名 引数の型) 戻り値の型 { } 関数名は、先頭の文字が小文字の場合は、変数などと同じで パッケージ化して import で呼び出しても使うことができない(privateになる) package main // 引数や戻り値は省略…

Go言語(golang) スライスと配列の使い方

Go言語にはslice(スライス)とarray(配列)があります。 以下、スライスと配列それぞれの基本的な使い方や違いについて

Go言語(golang) 構造体の定義と使い方

構造体(struct)の定義 型名とフィールド名は先頭の文字を小文字にすると関数や変数と同じで、 パッケージとして import で呼び出した場合にアクセスできない(priveteになる) type [型(構造体)の名前] struct { [フィールド名] [型名] [フィールド名] [型名] …

Go言語(golang) HTTPリクエスト

Go言語のnet/httpパッケージは Transport,Client,Request,Response に分けて考えたほうがいいので、 それらの役割を確認しながら使い方を説明してます。 GitHubを探せば gorequest、resty、sling などHTTPクライアント系パッケージがあるので、 コードを読ん…

ブラウザ拡張機能/アドオン backgroundとcontentScript間でメッセージのやり取り

タブ(ページ)内で実行するコンテンツスクリプトでは、拡張機能固有のストレージやその他APIなど、 使用/実行できないものがあります。なので、コンテンツスクリプトからバックグラウンドへメッセージを送ってバックグラウンドで処理します。 その逆も同じで…

Go言語(golang)でcsvの読み書き Reader/Writer

go言語の encoding/csv パッケージの使い方。 CSVファイルの読み書きと、オプション、エラーハンドリングについて書いてます。

Go言語(golang) エラーと独自エラーの実装

エラーは errors パッケージや fmt パッケージを使ってエラーを作成します。 それとは別で、errorインターフェースの要件を満たせば独自のエラーを作成できます。

ブラウザの拡張機能/アドオンの作り方(コンテキストメニュー)

拡張機能/アドオンは、JavaScript と Chrome Extension API で作ることができます。 FireFox の WebExtensions も同じですが、多少独自のAPIがあります。 以下では、ウェブページ上で選択した文字列をコンテキストメニュー(右クリックメニュー)から Googleや…

HTTPリクエストのレスポンスをキャッシュする

HTTPキャッシュ(cache)は、ウェブページなど一度目のリクエストで取得したコンテンツを保存しておき、 次回以降のリクエスト送信時にコンテンツに変更がなければ再利用するというもの。 リクエストを受け取るサーバー側は処理が軽減され負荷が減り、 リクエ…

Go言語(golang) インターフェース interface{} の使い方

Go言語のinterface{}の役割は以下の2つです。 どんな型の値でも入れておける入れ物 (TypeScript の any型 や C言語の void型 のようなもの) 構造体がメッソッド(関数)を持つことを保証するための型の定義

treeコマンドの書き方

treeコマンドはツーリー形式でディレクトリ構造を表示するプログラムです。 Windowsにはtreeコマンドが最初からありますが、MacOSやUbuntuにはインストールされていません。 なので、インストールするか自分で書くかということで、最低限ですがRust入門がて…

Go言語(golang) time.Tickerを使ってメモリの使用率を表示

time.Ticker は一定周期で処理を行う場合に便利で、以下は Ubuntu のメモリ使用率を取得して表示するサンプルです。

Gitコマンドでコミットメッセージを空にする

Git

GitHubで他人のリポジトリを見ていると、コミットメッセージに、何もない(空白の)ものを見かけます。 以下のように、メッセージを空にすると Aborting commit due to empty commit message. のエラーになります。 $ git commit -m '' Aborting commit due to…

Go言語(golang) ResolveReferenceを使って相対URLを絶対URLにする

go言語の net/url パッケージにある ResolveReference 関数を使ってページの相対リンクを絶対URLにする

Go言語(golang) publicsuffixパッケージを使ってドメインの分割

publicsuffix パッケージを使って FQDN の分割

Go言語(golang)のtestingパッケージを使ったテスト

Go言語のテストには、testingパッケージが用意されていて、 goのサブコマンド $ go test でテストを実行します。 また、サーバーが必要なテストには httptestパッケージを使います。

Go言語(golang)でdirenvを使う

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

Gulpでブックマークレットを作る

Gulpを使ってファイルに書いたブックマークレット(JavaScript)を圧縮する。 gulpのバージョン 3.x.x と 4.x.x で仕様変更があったようで、以下の2つのエラーが出る(このエラーの対処が主目的) The following tasks did not complete: default, js Did you f…

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) 実行ファイルのファイル名や行番号、関数名などを取得する

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

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

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

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 …