goの型をdefined typeとcomposite typeに2分出来ない理由

go1.18から型システムに大きな変更が加えられるという事で、改めてgoの型について学習しています。 教材としてGo言語仕様書輪読会さんの発表スライドを大変参考にさせて頂いているのですが、defined typeの項目で気になる文言が defined types - Google スラ…

goでheapを実装する

heapとは優先度付きキューの一種。親node > 子node又は親node < 子nodeな制約を持った木構造です。 出典 wikipedia 画像で見ると分かり易いですね。配列の中で一番小さい値がroot node。そこから深くなる毎に値が大きくなっています。左右の子ノード同士に大…

【Go】AtCoderでよく使う関数

はじめに goでAt Coderを解くにあたってC++で書かれた解説コードをGoに焼き直す作業を頻繁に行っています。その際「C++に有ってgoにはない」メソッドや文法が多くて結構困ります 冗長なだけなら「goだし仕方ないか」で済むのですが、明らかにあった方が良い…

ssh接続を少し簡単にするcli

https://github.com/dasuken/sshgengithub.com ssh接続の度に.ssh/configファイル編集するの面倒だなーと思って作りました 使い方 go get github.com/dasuken/sshgen sshgen add あとはinteractiveに必要な情報を入力していただければ設定ファイルに書き込み…

rune型は単なるint32のエイリアス

runeの疑問 rangeでrune型を取り出す際 func main() { str := "A" var x rune for i, v := range str { x = v x = str[i] // 代入出来ない } } 値はrune型。けどインデックスアクセスで取得した値はrune型じゃない。 どちらもstring()でキャストしたらAなの…

【Go】実行速度と汎用性を両立させたContains関数作ってみた

きっかけ Goの可変長配列であるスライス。配列の実態を考慮する必要がないシンプルさが売りです。 が、シンプルすぎるが故欲しい関数が実装されていない事もしばしば。特に特定の値が存在するか判定するContains関数などは使いたい場面が多いです。 そこで今…

【Golang】urfave/cliを使って計算機アプリをcliにする

Urfave golangのcli作成ライブラリです。 CLIを実装する上で面倒な サブコマンド リッチなヘルプインターフェース 等の作成をサポートしてくれます。 今回の記事では基本的なメソッドや構造体を説明した後、演習として実際に計算機をcli化させる過程を紹介し…