golangの日記

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

Go言語

Golang unicodeパッケージ 文字の種類判別

Unicodeのコードポイントで文字の種別を判別できる unicodeパッケージ の使い方。

Go言語 GitHub Actions テストとリリース

GitHub Actions で Go のテストとリリースページでの配布を自動化したい ディレクトリ構成 . ├── .github │ └── workflows │ ├── release.yml │ └── test.yml ├── .goreleaser.yml ├── hello.go ├── hello_test.go ├── README.md ├── LICENSE └── cmd └── he…

Go言語 httpリクエストでクッキーを使ったログイン

はてなブログにHTTPリクエストでログイン(OAuth認証やBasic認証ではなくクッキーを使ったやつ)

Go言語で関数が同じかどうか比較する

定義した関数やそれを変数に代入したときに同じ関数かどうかの比較

Go言語 Wi-Fi接続確認

Go言語で Windows PC が Wi-Fi 接続されているか確認する。

ゴルーチンを使ってシグナルを受け取ると signal: urgent I/O condition が飛んでくる

Go 1.14 からゴルーチンの切り替えにシグナル(SIGURG)が使われるようになったらしく、Linuxではシグナルを受け取る処理で signal: urgent I/O condition が飛んでくる。 blog.lufia.org

Go言語(golang) 構造体やマップのマージ

構造体やマップをマージするためのGo言語のパッケージ mergo の使い方。

Go言語製タイル型ウィンドウマネージャ Wingo を試してみた

「すべての操作をキーボードのショートカットキーで完結したい」 そういう沼にハマっているので、タイル型のウィンドウマネージャについて調べていたところ、 Go言語で書かれているウィンドウマネージャ Wingo を見つけたので試してみた。

Go言語(golang) テンプレートの使い方

text/template https://golang.org/pkg/text/template/ html/template https://golang.org/pkg/html/template/ text/template と html/template の違いは以下の通り To generate HTML output, see package html/template, which has the same interface as t…

脆弱性スキャンツール Vuls を使ってみた

Go言語で書かれている脆弱性スキャンツール Vuls(バルス) を Ubuntu で試してみた。 vuls https://vuls.io/ja/ https://github.com/future-architect/vuls go-cve-dictionary https://github.com/kotakanbe/go-cve-dictionary CVEデータをNVDやJVNから取得し…

Go言語製RSSリーダー Miniflux 2 をUbuntuで試してみた

Go言語で書かれているRSSリーダー Miniflux 2 を Ubuntu18.04 にインストールしてみました。 GitHubリポジトリ https://github.com/miniflux/miniflux インストール手順 https://miniflux.app/docs/installation.html

Go言語(golang) net/htmlを使ったHTMLのパース

net/htmlのドキュメントは以下 https://pkg.go.dev/golang.org/x/net/html?tab=doc goquery(goでjQueryライクにHTMLを扱えるパッケージ) https://github.com/PuerkitoBio/goquery https://pkg.go.dev/github.com/PuerkitoBio/goquery?tab=doc 内部的には net…

Go言語(golang) type で定義したスライスのインデックス

typeで実態が何らかのスライス型を定義してインデックスを使いたい。 以下ようにレシーバがポインタだと does not support indexing になる。 package main type A []string func (a A) Get(i int) string { return a[i] } func (a *A) Add(s string) { *a =…

JSONをもとにGo言語の構造体を自動生成できるjson-to-go.js

encoding/jsonでJSONをGo言語の構造体にマッピングするには 当然、そのデータのプロパティ名と値の型を構造体で定義しておく必要がある。 大規模なJSONの場合だとその作業は大変なのでjson-to-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) 変数と定数

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

Go言語(golang) 文字列/string

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

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

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

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クライアント系パッケージがあるので、 コードを読ん…

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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