いろいろ備忘録日記

主に .NET とか Java とか Python絡みのメモを公開しています。最近Go言語勉強中。

golang

Goメモ-95 (go で SSH接続メモ (3))

概要 サンプル 参考情報 概要 以下、自分用のメモです。忘れない内にメモメモ。 前回の記事は以下です。 devlights.hatenablog.com devlights.hatenablog.com 上記のサンプル作っている際に知ったことなんですが、 if err = sess.Run(command); err != nil {…

Goメモ-94 (go で SSH接続メモ (2))

概要 サンプル 参考情報 概要 以下、自分用のメモです。忘れない内にメモメモ。 前回の続き。今回は秘密鍵にパスフレーズを付与している場合のコードです。 前回の記事は以下です。 devlights.hatenablog.com サンプル 以下のサンプルですが、処理に必要な情…

Goメモ-93 (go で SSH接続メモ (1))

概要 ライブラリのインストール SSH接続する前準備 キー生成 キーをリモートにコピー 鍵認証でログインできるか確認 リモートサーバの公開鍵を確認 サンプル 参考情報 概要 以下、自分用のメモです。忘れない内にメモメモ。 GoでSSH接続してコマンド実行して…

GitHub Super Linter 触ってみた

概要 テスト用のリポジトリ作る とりあえずコードを初期アップ Super Linter 用の GitHub Action を追加 試してみる 修正して再度 lint してもらう 概要 先日、Github が Super Linter という機能についてブログ記事をアップしました。 github.blog Github側…

Goメモ-92 (/dev/null のように出力を捨てる io.Writer)(ioutil.Discard)

概要 サンプル 参考情報 概要 たまに、io.Writer が必要なのだけれども、出力データ自体は必要ないので捨てたいときがあります。 例えば、複数のURLに対して HTTP GET を並行で処理した場合の処理時間が知りたいときとか。 そういうときに便利な io.Writer …

Goメモ-91 (VS Code の Go 拡張機能 がGo公式プロジェクトになった)

概要 概要 今日のニュースで知ったので、メモメモ。 golang.blog code.visualstudio.com Go開発者の約41%が VS Code 使っているんですねー。 VS Code起動してみたら、ちゃんと パブリッシャー の名前が Go Team at Google 変わっていました。 以下、自分用。…

Goメモ-90 (Go の enum と iota の使い方メモ)

概要 Enum のサンプル iota のサンプル 参考 概要 Go には、C#などのように enum という型がありませんが、定数を使って同じような感じにすることが出来ます。 enum と iota に関して、とても参考になった記事があったので、忘れない内にメモメモ。 https://…

Goメモ-89 (go-cmp の使い方メモ)(比較処理用のライブラリ, Comparer)

概要 サンプル 概要 比較処理を作っている際に reflect.DeepEqual 使っていたんですが、この子、プライベートなフィールドまで比較対象にしてくれるんですね。。 ちょっと、それは必要なかったので、なんかライブラリ無いかなって探してみたら、go-cmp って…

Goメモ-88 (スライスから配列にコピーする)

概要 サンプル 参考情報 概要 Goを勉強し始めた人からよく聞く質問がこれなので、ついでにここにメモです。 やり方としては、ビルドイン関数の copy(dst, src) を使います。 golang.org copy関数のシグネチャは以下のようになってます。 func copy(dst, src …

Goメモ-87 (2つのスライスを結合する, slice concatenate)

概要 サンプル 概要 よく忘れるのでここにメモ。基本的な事なんですが 2つのスライスを結合する際の newSlice := append(sli1, sli2...) という記法をよく忘れてしまいます。。。 サンプル package slices import ( "github.com/devlights/gomy/output" ) /…

Goメモ-86 (チャネルの要素に指定された処理を適用した結果を返す関数, Map)

概要 サンプル 参考 関連記事 概要 引き続き、小ネタチャネル関数の続き。( #関連記事 参照) python には、mapというビルドイン関数があります。 こんな感じ。 $ python3 Python 3.7.7 (default, Mar 25 2020, 10:55:55) [GCC 8.3.0] on linux Type "help",…

Goメモ-85 (チャネルからのデータをフィルタリングする関数, Filter)

概要 サンプル 参考 関連記事 概要 引き続き、小ネタチャネル関数の続き。( #関連記事 参照) パイプラインを使って処理する場合、やっぱり C# の Where とか Java の filter みたいなのが欲しいところですね。 てことで、サンプルつくってみました。 サンプ…

Goメモ-84 (指定した分チャネルからのデータをスキップする関数, Skip,SkipWhile)

概要 サンプル 参考 関連記事 概要 引き続き、小ネタチャネル関数の続き。( #関連記事 参照) 以前の記事で、指定した個数または条件に合致する間、チャネルから要素を取得する Take 関数について書きました。 devlights.hatenablog.com C#のLinqには、これ…

Goメモ-83 (チャネルの要素に対してインデックスを付与して返す関数, Enumerate)

概要 サンプル 参考 関連記事 概要 引き続き、小ネタチャネル関数の続き。( #関連記事 参照) pythonに enumerate という関数があります。 この関数は、指定されたシーケンスを取り出すと同時にインデックスを付与して返してくれます。 こんな感じ。 $ pytho…

Goメモ-82 (デバッグ時に表示される文字列表現, GoLand, DebugString)

概要 サンプル 概要 忘れない内にメモメモ。 知らなかったのですが、GoLandでデバッグ時に DebugString() string というメソッドを用意しておくと デバッガで表示してくれるみたい。 blog.jetbrains.com v2019.2 から追加された機能みたいですね。 試してみ…

Goメモ-81 (複数のsync.WaitGroupをまとめて管理する型, MergedWaitGroup)

概要 サンプル 概要 先日、指定されたワーカー数でファンアウトさせる関数をつくってみました。 devlights.hatenablog.com ついでなので、それを使った型を一つ作ってみました。 処理を書いていると、sync.WaitGroupを頻繁に利用すると思いますが たまに、sy…

Goメモ-80 (go test のキャッシュを削除するやり方メモ)

概要 キャッシュを消す方法 毎回キャッシュ無視してテスト実行してもらう go test のフラグにどんなのがあるのかを調べる 参考情報 概要 忘れない内にメモメモ。 テストをするために go test を実行していると、たまに以下のようにキャッシュした結果を表示…

Goメモ-79 (指定されたワーカー数でファンアウトさせる関数, FanOut)

概要 サンプル 参考 関連記事 概要 引き続き、小ネタチャネル関数の続き。( #関連記事 参照) 以前にファンインする関数について記事書きました。 devlights.hatenablog.com ついでなので、ファンアウトさせる関数も書いてみました。 サンプル package chans…

Goメモ-78 (指定したインターバルでデータを出力するチャネル, Interval)

概要 サンプル 参考 関連記事 概要 引き続き、小ネタチャネル関数の続き。( #関連記事 参照) たまに処理をするたびに一定時間のインターバルを置いておきたいときがあったりします。 たいてい以下のように書くと思います。 for v := range Take(Repeat(1)) …

Goメモ-77 (シーケンスをチャネルにする, ForEach)

概要 サンプル 参考 関連記事 概要 引き続き、小ネタチャネル関数の続き。( #関連記事 参照) チャネルのパイプラインを構築するとき、諸元のデータをスライスとかで持っている場合があると 最初にそれをチャネルに流していく必要があったりします。一個ルー…

Goメモ-76 (ループ用のチャネル, Loop, LoopInfinite)

概要 サンプル 参考 関連記事 概要 チャネル関数の続き。( #関連記事 参照) 書籍には記載されていないですが、チャネルさんが触ってて面白いので、ネタ的な関数をこれから数回分続けようかなと。 まず、ループする用のチャネルつくる関数です。普通に回した…

Goメモ-75 (一つの入力を複製して2つにするチャネル, Tee)

概要 サンプル 参考 関連記事 概要 チャネル関数の続き。 あんまり使うことは無さそうですが、せっかく書いたのでメモメモ。 unix系のteeコマンドのように、一つの入力を2つに複製してくれるチャネルを生成する関数。 データを処理しながら、ついでに非同期…

Goメモ-74 (複数のOrDoneチャネルを使って処理, OrDone, FanOut, Workers)

概要 サンプル 参考 関連記事 概要 devlights.hatenablog.com の補足サンプル。 上の記事では、一つのチャネルをOrDone() でラップして処理していましたが 複数の場合のサンプルもついでに追加。 サンプル package ordone import ( "context" "fmt" "runtime…

Goメモ-73 (fan-in パターンでデータを集約するチャネル, FanIn)

概要 サンプル 参考 関連記事 概要 チャネル関数の続き。 今回は、Fan-In (ファンイン) パターンで複数のチャネルのシーケンスを一つにまとめて消費していくチャネルを作る関数について。 非同期系の本とか呼んでいると、よくファン・イン(fan-in) とか ファ…

Goメモ-72 (指定されたチャネルのシーケンスを順に消費していくチャネル, Concat)

概要 サンプル 参考 関連記事 概要 チャネル関数の続き。 今回は、複数のチャネルのシーケンスを一つにまとめて順に消費していくチャネルを作る関数について。 例えば、3つのファイルを読み込む処理書いていて、それぞれのファイルを読む処理をゴルーチンに…

Goメモ-71 (指定されたチャネルのどちらかが閉じたら閉じるチャネル, OrDone)

概要 サンプル 参考 関連記事 概要 チャネル関数の続き。 今回は、終了判定のdoneチャネルと入力データのチャネルのどちらかが閉じたら閉じるチャネルを返す関数について。 Goで、チャネルを使った処理を書くと、とても便利です。例えば、何かのチャネルのデ…

Goメモ-70 (チャネルから指定された個数分取得するチャネル, Take, TakeWhile, TakeWhileFn)

概要 サンプル 参考 関連記事 概要 チャネル関数の続き。 今回は、指定されたチャネルから指定された個数分だけデータを取り出すチャネルを返す関数です。 C# の Enumerable.Take や Enumerable.TakeWhile チックな感じ。 サンプル package chans // Take --…

Goメモ-69 (指定された値を繰り返すチャネル, Repeat)

概要 サンプル 参考 関連記事 概要 チャネル関数の続き。 今回は、指定された値を延々と繰り返してくれるチャネルを返す関数です。C# の Enumerable.Repeat チックな感じ。 サンプル package chans // Repeat -- 指定した値を永遠と繰り返すチャネルを返しま…

Goメモ-68 (型の組み込みについてのメモ, Embedded, Effective-Go)

概要 サンプル 参考 概要 よく忘れてしまうので、ここにメモメモ。 Go には、他の言語にあるような継承の概念がありませんが、型の組み込みはサポートされています。 (このあたりはよく議論の的みたいですが、個人的には継承は普段あまり使わないので私は不…

Goメモ-67 (複数の全てのチャネルが閉じたら閉じるチャネル, WhenAll)

概要 サンプル 参考 関連記事 概要 小ネタ。結構便利なので個人的にはよく使っているパターンです。 C#には、複数のタスクをまとめてしまって、その内の全てが完了したら完了扱いにしてくれるタスクを返す Task.WhenAll() というメソッドがあります。 Goの場…