だいぶ前にGolangでパーミッションを指定してファイルを作成したいということがあったので、備忘として残しておく。
以下のように、permで指定してやればいい。

package main

import (
        "fmt"
        "io/ioutil"
        "os"
        "strconv"
)

func main() {
        content := []byte(
                `test line 1
test line 2
test line 3
test line 4
test line 5`)...

2年くらい前からちょこちょこ作ってたツールがある程度形になってきて、個人的に結構便利に使えるようになったので(ここんとこ忙しくて書くこともないし)紹介してみる。

lssh』という名称でGolangで書いたsshクライアントコマンドで、設定ファイルの内容をもとに接続先を選択できる様になっている。 コマンドなのでMacOS XやLinuxで動くのと、WindowsでもWSL(2018.03のアップデートが適用されてる必要あり)で動作を確認してる(ssh接続処理も全部Golangで書いてるので、多分Windows単体でも動くと思うけど未確認)。 実際に使ってる画面はこんな感じ(gifフ...


Golangで、データのゼロ埋め・スペース埋めをする場合、以下のようにすれば良いようだ。

padding-test.go
package main import ( "fmt" ) func main() { // ゼロ埋め fmt.Print("--ゼロ埋め--\n") fmt.Printf("'%020d'\n", 123) fmt.Print("\n") // スペース埋め(右) fmt.Print("--スペース埋め(右)--\n") fmt.Printf("'%20s'\n", "Right") fmt.Print("\n") // スペース埋め(左) fmt....

Golangで一時ファイルを作成する場合、ioutil.TempFileで作成が行える。

ioutil.TempFile(dir,prefix string)

dirを指定しない場合、テンポラリ領域(Linuxだと/tmp)に一時ファイルが作成される。 一時ファイルと言っても、自動では削除されないので注意。以下、実行例。

TempTest.go
package main import ( "io/ioutil" "fmt" ) func main() { tmpFile, _ := ioutil.TempFile("","tmptest")...

Golangでは、os.Getenv で環境変数を取得させることができる。

testenv.go
package main import ( "fmt" "os" ) func main() { // 既存の環境変数を取得 fmt.Println("1. $HOME:",os.Getenv("HOME")) // プログラム中で設定してやることもできる fmt.Println("2. $TEST:",os.Getenv("TEST")) os.Setenv("...

Golangの標準ライブラリだと、プロセスIDは取得できるみたいなのだけど、どうもプロセス名は取ってこれないらしい。 で、なんかいい方法ないかなと調べてたところ、『go-ps』というライブラリを見つけた。 これなら、プロセス名も取ってこれそうだ。

以下、実際にいじってみた際のコード。FindProcessの使い方は、基本的にはos.FindProcessとあまり変わらないみたいだ。

package main

import (
    "fmt"
    "os"

    "github.com/mitchellh/go-ps"
)

func main() {
    pid...

Golangでは、関数の可変引数に対し、スライス展開して渡すことができるようだ。 例えば、以下のような感じ。

test.go
package main import "fmt" func main() { // 普通に指定して渡す fmt.Println("普通に指定して渡す") args_test("1 String :", "Arg1") args_test("2 Strings:", "Arg1", "Arg2") args_test("3 Strings:", "Arg1", "Arg2", "Arg3") fmt....

Golangで、最低限WindowsなのかLinuxなのか、Mac OS Xなのか程度に確認したい場合、「runtime.GOOS」を用いるといいようだ。

test.go
package main import ( "fmt" "runtime" ) func main() { fmt.Println(runtime.GOOS) }

上のコードを実行すると、Ubuntuの場合だと...


Golangで変数内のメタ文字をエスケープさせる場合、「regexp.QuoteMeta()」で行える。 例えば、以下のようにすることでメタ文字である「[」や「+」をエスケープする。

package main

import (
    "fmt"
    "regexp"
)

func main() {
    str := "a[b+c=\\"
    fmt.Println(str)
    fmt.Println(regexp.QuoteMeta(str))
}


ターミナル上でグラフィカルに監視が可能になるGo言語製のターミナルダッシュボード用ライブラリ『termui』を試してみる

Go言語の勉強をしようと思って検索していたところ、ターミナル上でグラフやらなんやらを使ってグラフィカルに監視を行うダッシュボード『termui』というものがあったので、試しに使ってみる事にした。厳密には、監視項目などをGo言語で指定してあげて利用するので、ライブラリといったほうが正しい。

まずはインストール。
対象サーバ上で、以下のコマンドを実行するだけだ。
※事前にgoのインストール、設定を行っておくこと

sudo go get -u github.com/gizak/termui