at backyard

Color my life with the chaos of trouble.

Golang

JavaScriptやPythonを書いていた自分がGoを書き始めるために読んだ本、3冊

最近、自身の事業として運用しているソフトウェアをGoですべて書き直した。 元はPythonで書かれていたソフトウェアだったが、それをGoに書き換えた形となる。 なぜGoに書き換えたのか?というのにはいくつか理由があるのだが、そこについては表題から外れる…

GoでクロスコンパイルしたWindowsバイナリを利用したら、Windows Defenderに Trojan Wacatac.H!ml として検知された

GoのWailsで書いているアプリでM1 MacBook AirからWindows向けのバイナリをクロスコンパイルした際の起きたことメモ。 作成したWindowsバイナリを実際にWindowsマシン上で実行しようとしたらMicrosoftのWindows Defenderから Trojan Wacatac.H!ml として検知…

windows環境にて Goのexec.Commandを実行した際に exec: "start": executable file not found in %PATH%

windows環境にて Goのexec.Command経由で start コマンドを実行した際に exec: "start": executable file not found in %PATH% というエラーが出たので解決方法をメモ。 目次 目次 goのexec.Command経由で startコマンドを実行する方法 Explorerを開く場合に…

ローカルサーバを簡単に立ち上げるためのツール、lser

lser というローカルサーバを簡単に立ち上げるためだけのツールを作った。 github.com ローカルサーバ起動が作業フローに組み込まれていない環境で、手元のマシンでローカルサーバを立ち上げて確認をしたくなるようなことが最近多く、そういうとき普段はPyth…

Goのtime.Duration型を用いた比較について

Go初心者による備忘録。 Goのtime.Duration型を用いることで経過時間を表すことができる。 そしてこの time.Duration は int64 のため、数値型としての比較ができるようだ。 https://pkg.go.dev/time#Duration つまり経過時間の比較をするケースで、どちらの…

文字列内の数値と文字列を分割させたい(Goのfmt.Sscanf)

例えば 5個の林檎 というようにスペースを挟まずに数値と文字列が連なったテキストを分割させたいケースがあったとする。 このような場合、Goではどう対応できるかを調べた際の備忘録。 下記のスタックオーバーフローを参考にした。 どうやらこういうケース…

Playwright for Goで指定した場所にスクロールさせる方法

昨日に引き続き、Playwright for Goに関する個人的な備忘録。 Playwright for Goで指定した場所にスクロールさせる方法だが、playwright.Locator に ScrollIntoViewIfNeeded というメソッドが用意されているのでこれを利用する。 実際のサンプルを下に記載し…

Playwright for Goでinputフォームの値を空にする方法

Playwright for Goに関する個人的な備忘録 Seleniumであれば clear 関数を用いてinputフォーム内を空にできるが、Playwrightの場合は fill を用いる。 Playwright for Goであれば playwright.Locator に Fillメソッドが用意されているのでそちらを利用する。…

Goでtime.Durationの文字列を日本語に変換する関数

完全に自分向けの備忘録。 time.Duration で表される秒数を日本語に変換したかったので、下記のような関数を作って対応した。 package main import ( "fmt" "strings" "time" ) func jaDuration(t time.Duration) string { var jaStr string jaStr = strings…

WailsでのGoとJS側でのEventsのやりとりについて

基本的に下記を見ればOK wails.io イベントの送り方は EventsOn とか EventsOnceとか複数あるが、ひとまずどうやって送るかのサンプルだけ下記に書き残しておく。 GoからJS側にイベントを送る場合 Goでは下記のようにEventsを設定する ※コードはかなりいい加…

Playwright for GoでChrome操作を通じて取得した認証情報をそのまま保存して次回以降も利用していく方法

Playwright for Go(というかPlaywright)では launchPersistentContext を使うと、例えばChromeで普段利用しているユーザデータ(ブラウザプロファイル)を参照することができる。 https://playwright.dev/docs/api/class-browsertype#browser-type-launch-p…

WailsのREADMEを日本語で読む

WailsのREADMEを日本語でも読めるように作成していたPRをマージしていただいた。 github.com というわけで、現在WailsのREADME内にある Internationalization から日本語を選択することで日本語のREADMEが読めるようになっている。 github.com 最近Twitterな…

Goでgo:linkname must refer to declared function or variableというエラーが出た際の対応メモ

go-ttyを試そうとしたときに遭遇したエラーと、対応時のメモを記載する。 github.com go-ttyを試してみようと思い、READMEに書かれているコードを参考にして入力したキーを出力させるだけのコードを書き、実行しようとしたら下記のようなエラーに遭遇した。 …

GoでGUIアプリが作れるWailsを試してみたときの、mac環境でのメモ

最近GoでGUIアプリが作れるWailsを試していた。 最近GoでGUIを作るならwailsが良いらしいので触ってみるhttps://t.co/mTuXtJtFvh— Yuki Shindo (@shinshin86) August 19, 2022 Failed to load resource: The resource could not be loaded because the App T…

Playwright for GoでローカルのChromeを利用して実行する方法

Playwrightではデフォルトでの実行の場合、別途Playwrightで利用するためのブラウザをインストールしてそちらを利用するようになっている。 もし手元のChromeから実行したい場合、下記のようにしてインストールをスキップし、かつて元のマシンのChromeを参照…

ターミナル上ではてぶのホットエントリーを見るだけのツールを作った

Goのお勉強として作ったツール。 github.com 車輪の再発明すぎる内容だと思うので目新しさは一切ない。 下記のコマンドを叩くとインストール可能です。 (Goがインストールされている前提) go install github.com/shinshin86/chv@latest CLI上で chv と実行…

GoでTodoistに登録しているプロジェクト一覧を取得する

夏休みの朝のラジオ体操よろしく、朝にGoで頭の準備体操をした。 Todoist APIを利用して、現在設定しているプロジェクトの一覧を取得するだけのスクリプト。 Todoist APIについてはこちらにも以前書いていた。 shinshin86.hateblo.jp プロジェクト一覧を取得…

SlackのエクスポートデータをExcelでバックアップするためのCLIツールを作った

Slackのフリープランが変更されることについて以前書きました。 shinshin86.hateblo.jp 今後は90日より前のメッセージは消えてしまうが、それらのメッセージについてもどんなやり取りをしていたかは後からでも確認できるようにしたかったので、Slackからダウ…

Goのexec.Commandでデフォルトブラウザを用いてURLを開くはずが、ファイルを開こうとしてしまい詰まった

この記事はGoの1.18.1で検証しています。 go version go1.18.1 darwin/arm64 ちなみに1.19ではここらへんに修正が入るようですが、まだちゃんと見ていないので公式ドキュメントを貼っておきます。 exec package - os/exec - Go Packages さて、本題。 例えば…

goでexec.Command実行時に出力結果やエラーログをコンソールに表示させたい

Go初心者による備忘録のため、Go経験者にとっては当たり前の内容を書いていると思うことを先に書いておく exec.Commandの出力をCLI上に表示させる方法 Goでは exec.Command を利用することでシェル上でコマンドで実行するような形で、Goプログラムを通じてコ…

Goでos.Exit(1)の終了をテストする

最初に Goはまだまだ詳しくなく、かつ下に書いたstack overflowの内容は2016年頃のものなので、もっと良い方法があるのかもしれない。 が、今回ググってみたところ、一番しっくり来た内容がこれだったので、これを採用した。 Goでos.Exit(1)の終了をテストし…

go: cannot run *_test.go filesというエラーについて

Goを触る上での前提知識になるかと思うが、知らないで軽くハマったのでメモ書き。 そもそもGoでは *_test.go というファイル名のファイルはテスト用のファイルとなるため go run では実行できない。 *_test.go のファイルを実行しようとすると( 例えば go ru…

Goでローカルで作成したモジュールをインポートしたいとき

Goで最近ちょっとしたテストのためのモジュール(ライブラリ、パッケージ?なんて呼べばいいのだろう?)を作成した。 github.com 完全に自分向けのライブラリであり、現在はまだ開発中の段階となっている。 これについては開発の区切りがついたタイミングで、…

go installの挙動がおかしいと思ったら案の定cacheでした

Goでpackageをinstallする際に特定のブランチを指定して、下記のようにインストールしていた。 # go install <package>@<branch> go install github.com/shinshin86/go-leet@add-package-leet 上のパッケージは実際にあるもので、下記になる。 (Goのパッケージ周りに関する理</branch></package>…

ローカルネットワーク間のファイル転送にGo製のCLIツール、ftが便利だった

macとwindows間でサクッとファイル転送したい 最近閉じたネットワーク内でwindowsとmac間でファイル転送することがたびたびある。 今まではDropboxを使っていたが、windowsマシンの方は常にDropboxにログインしているというマシンでもないので、ファイル転送…

Go言語での文字の切り捨て(Truncate)について

Go言語で文字の切り捨てを行う際はrunewidth.Truncateがとても便利だった Go言語を学習しながら触っている際の備忘録。 Go言語でターミナル周りのテキストを、いい感じに切り捨て(Truncate)するときは go-runewidth がとても便利だった。 (最初、苦労しなが…

GitHub ActionsでGoのプロジェクトをテストする

備忘録です。 Goに対してGitHub Actionsからテストを実行するのはそれほど複雑ではありませんでしたが、未来の自分が忘れたときにいつでもこれを参照できるように備忘録として残しておきます。 Goのテストを行うためのGitHub Actions用の設定 以下を .github…

goenvをやめて直接Goをインストールするように切り替えた(M1 MacでのGoの環境構築)

目次 目次 初心者はgoenvは使わないほうが良いかもしれない? goenvをuninstallする goenvの遺産をすべて削除する Goをインストールする M1 MacにGoをインストールするときの注意点 [余談] go fmtの挙動が変わった!? 初心者はgoenvは使わないほうが良いか…

M1 Macでgoenvを用いてGo環境を構築した

M1 MacにGo言語の環境が入っていなかったので環境構築した備忘録。 先に書いておくと、様々なサイトやブログで紹介されている方法に倣っているので、新しいことは何も書いていません。 goenvを用いてGoの1.17.3をM1 Macにインストールしました。 [追記] 初心…

【日記&備忘録】Evernoteの有料プランの解除方法、ならびにEvernoteアプリの勝手なおせっかいをやめさせていく

Evernoteの有料プランを解除した ここ数年はEvernoteを使用するデバイスが3台以上あったため有料プランを使っていたが、最近デバイスの数も減り、2台の運用となったため、Evernoteを無料プランに戻すことにした。 元々、有料プランを全くフル活用できておら…