標準愚痴出力

個人的なIT作業ログです。もしかしたら一般的に参考になることが書いているかもしれません(弱気

Go

slack へポストするコードを書いた

go

秘密鍵書けないので、呼び出し元の main 関数は省略するが、下記のようなコードで出来た。 package main import ( "bufio" "bytes" "encoding/json" "fmt" "net/http" "os" ) type Message struct { Text string `json:"text"` Channel string `json:"channe…

syscall は deprecated だったのかー

go

syscall - The Go Programming Language Deprecated: this package is locked down. Callers should use the corresponding package in the golang.org/x/sys repository instead. (雑な訳)非推奨:このパッケージ(syscall)は凍結(?)しとります。ユーザ…

io.Reader のプリプロセッサな io.Reader を作る

go

( io.Reader のプリプロセッサな io.Reader を作る - Qiita より転載) 任意の io.Reader を受け取って、それを加工した結果を、別の io.Reader として読み取れるようにしたい時、どうするのがベストな方法だろうか。 具体的には、当初「文字コード(ShiftJI…

os.exec の (Command) Start で、ドライブ毎のカレントディレクトリが継承されない

go

カレントディレクトリは Windows/UNIX ともに1プロセスにつき一つだけ存在するということになっている。だが、DOSの頃はドライブごとにカレントディレクトリが設けられていたことを覚えている人も多いだろう。そして、現在も CMD.EXE ではあたかもドライブ…

CMD.EXEの引数での引用符の扱いを完全に理解した

go

multipost →Qrunch CMD /? で出てくるヘルプを一部引用する: /C または /K が指定されている場合、スイッチの後の残りのコマンド ラインがコマンド ラインとして処理されます。次のルールが引用符 (") の処理に使われます: 次のすべての条件に一致する場合…

nyagos でのバッチ起動方法を軽量化した

nyagos では、子プロセスのバッチファイルが変更した環境変数を取り込むのに @call バッチファイル 引数1 引数2 … @set ERRORLEVEL_=%ERRORLEVEL% @(cd & set) > 一時ファイル名 @exit /b %ERRORLEVEL_% といった踏み台バッチを毎回作っていた。 これはこ…

What file is it ? - ファイル識別コマンド wfile を作った

go

これな> zetamatta/wfile: wfile is a command like file of UNIX. ファイルのマジックナンバーを元にして、ファイルの種類を自動判別するツールである。 EXEファイルならば、 32bit or 64bit GUI or CUI Windows or 他のOS など $ wfile wfile.exe wfile.e…

テキストデータ加工関数集 go-texts をようやくまとめた

go

(qrunch.ioより転載) これな > zetamatta/go-texts: go-texts is the utility package for text-data "go-texts".SortedKeys string をキーとするマップのキーの配列をソートして得る(Perl の sort keys と同じ。キーに対する値の方は何でも大丈夫。refl…

Windows用のHyperEstraierのGo言語のラッパーを作りました、途中まで!

(qrunch.ioより転記) これな zetamatta/go-hyperestraier-win32: golang wrapper for estraier.dll (win32) 実は会社で HyperEstraier を使ったWindows 製品の保守をちょっとだけしているのですが、標準のコマンドラインツール estcmd は UTF8 でして、ANK…

二重引用符などで面倒なことにならない cmd.exe の呼び方

go

環境変数を使おう。 func system(cmdline string) error { const CMDVAR = "CMDVAR" orgcmdarg := os.Getenv(CMDVAR) defer os.Setenv(CMDVAR, orgcmdarg) os.Setenv(CMDVAR, cmdline) cmd1 := exec.Command("cmd.exe", "/c", "%"+CMDVAR+"%") cmd1.Stdout =…

Goの"/path/filepath" に「拡張子を除く関数」がないのが辛い

go

まぁ、自分で書いても数行なんですけどね without.go func withoutExt(fname string) string { ext := filepath.Ext(fname) return fname[:len(fname)-len(ext)] }

つらい、さすがの reflect も構造体の非公開フィールドに値を無理やりセットする用途には使えないかー

go

package main import ( "reflect" ) type privateOne struct { m1 string m2 string } func sub(from interface{}) interface{} { t := reflect.ValueOf(from).Elem().Type() obj := reflect.New(t) p := obj.Elem() p.Field(0).SetString("foo") p.Field(1)…

CSV を「安全」に Excel に読み込む Go プログラムを書いたー(pipe2excel.exe)

5/2 が「5/2」でなく、日付と解釈されて「5月2日」になってしまう =1+2 が「=1+2」ではなく、計算されて「3」になってしまう 関数まで実行されてしまうので、脆弱性となってしまう これを解決するには勝手に変な解釈がされないように、あくまで「文字列」と…

任意の map[string]~ のキーを全部配列( []string )化してソート

go

map のキーは文字列限定だが、値については任意の型 Ok import ( "reflect" "sort" ) // SortedKeys makes sorted strings' array from keys of the given map whose key's type is string. func SortedKeys(mapInt interface{}) []string { values := refle…

続・nyagos で lua53.dll のかわりに GopherLua を使おう

続・nyagos で lua53.dll のかわりに GopherLua を使おう - Qiitaより転載 続・nyagos で lua53.dll のかわりに GopherLua を使おう 「nyagos で lua53.dll のかわりに GopherLua を使おう - Qiita」の続き: β2 を出しました。 Release 4.3_beta2 · zetamat…

nyagos で lua53.dll のかわりに GopherLua を使おう

2018/04/25 付け記事:nyagos で lua53.dll のかわりに GopherLua を使おう - Qiitaより転載 nyagos で lua53.dll のかわりに GopherLua を使おう Using GopherLua instead of lua53.dll · Issue #300 · zetamatta/nyagos lua53.dll にはいくつか問題があり…

Appveyor がまだ Go 1.10 をサポートしてなかったので、自前で取ってくるよう設定した

go

strings.Builder を使いたくて、ローカルの環境を Go 1.10 にしたが、Appveyor がまだ Go 1.9.2 のままだ。そのせいで、git push するたびに失敗マークがついてしまう。 Appveyor のサポートサイトを適当に見てみたら、Go 1.3 しか入っていない頃に書かれた …

【ポエム】NYAGOS 2017年ふりかえり

Nihongo Yet Another GOing Shell についての駄文です。関心ある方に読んでいただければと 参考:2017年冒頭に言ってたこと Luaデータ共有との戦い > 完全に改善した!(← うさんくさい) < 4.0 全コマンド(=goroutine~スレッド)で 1-Lua インスタンスを…

うっかり、オレオレ grep (seek)を書いてしまった。

go

先日、while( <> ){ } 的なものの Go 版ライブラリ argfを書いてみたわけだけれども、そのサンプルとして 簡単な grep (seek)を書いてみた。 https://github.com/zetamatta/experimental/tree/master/seek (また、例によって、実験用レポジトリ experimental…

while( <> ){…} みたいなことを Go で

go

UNIX風のテキストファイルフィルターを書くのに便利なように Perl には while( <> ){ print $_ } という構文がある。これと同じような手軽さで Go でもフィルターを書くためのライブラリ argf を書いてみた。 package main import ( "fmt" "os" "github.com/…

Go言語についての3つくらいの誤解

go go

以下、自分の思い込みもあるとは思うが、あまり気にしないで書いてみる。 Goは短く書くための言語ではない 短く書けるようにした結果、落とし穴が発生したり、 読みにくくなったり誤解が生じる余地があるならば、 そのような書き方は排除されている。 貴方が…

PowerShell で書く、Go言語プログラムのリリース管理的なアレ(1)目次

NYAGOS は 4.2.1 まではバッチファイルで、以下の作業を行っていた。 実行ファイルの作成 バージョン文字列の取得 リリース(make release)の時はテキストファイル(Misc\version.txt) スナップショット(引数なし make)の時は git describe --tags を使用 バ…

GoのEnum表現は、go:generate + stringer の出番?

go

Go の Enum 表現 - Qiita 主旨が違うかもしれないんだけど、そういうのは go:generate + stringer の出番と違うかなと思った。 package main import "fmt" type SkuNameEnum int //go:generate stringer -type=SkuNameEnum const ( Free SkuNameEnum = iota …

expect for Command Prompt by GopherLua

コマンドプロンプト向けの expect を Go 言語で作った。 https://github.com/zetamatta/expect 特徴 スクリプトは Lua で書く。GopherLua を使ったので、lua53.dll は不要 画面のプロンプトを待つ except() 関数は、本家だと標準出力・標準エラーを監視する…

import を全て絶対パスにした

こんな感じに - "../completion" - "../shell" + "github.com/zetamatta/nyagos/completion" + "github.com/zetamatta/nyagos/shell" これにより: ソースを GOPATH 内に置けなかった go get github.com/zetamatta/nyagos で全ソースをダウンロードできなか…

Go for Windows で子プロセスに二重引用符を引数でそのまま渡したい時

問題の症状 親プロセスのソース: // exec1.go package main import ( "os" "os/exec" ) func main() { c := exec.Command("foo", `"<BAR>"`) c.Stdout = os.Stdout c.Stderr = os.Stderr c.Stdin = os.Stdin c.Run() } 子プロセスのソース(バッチファイル): @</bar>…

Goで、そのうち使ってみたいライブラリ・ツールリスト

Go

Gigue is a minimal scheme interpriter written in Go Lispインタープリタ(紹介記事:Goで小さなScheme、Gigueを実装しました) mattn/anko: Scriptable interpreter written in golang anko という Go ライクな文法のインタープリタ mattn/go-mastodon: m…