Bye Bye Moore

PoCソルジャーな零細事業主が作業メモを残すブログ

GoLangの文字列切り出しはRubyと同様、コロン記法が使える

GoLangの文字列切り出しはRubyと同様、コロン記法が使えます。

実際のところ

package main

import (
	"fmt"
)

func main() {
	baseString := "abcdef"

	// Result:: abc.
	fmt.Printf("%v.\n", baseString[3:])

	// Result:: def.
	fmt.Printf("%v.\n", baseString[:3])

	// Result:: a.
	fmt.Printf("%v.\n", baseString[1:2])
}

実行すると、こんな感じ

$ go run stringsample.go 
def.
abc.
b.

go-humanizeで序数や単位、日付差分を人間が読みやすい形に

go-humanizeで序数や単位、日付差分を人間が読みやすい形にできます。
以前紹介した、RailsのActive_supportのようなものです。
shuzo-kino.hateblo.jp

実際のところ

数値の切り替えサンプルは以下の通り。

package main

import (
	"fmt"
	"github.com/dustin/go-humanize"
)

func main() {
	// Result:: 83 MB.
	fmt.Printf(
		"%v MB.\n",
		humanize.Bytes(82854982),
	)

	// Result:: 79 MiB.
	fmt.Printf(
		"%v MiB.\n",
		humanize.IBytes(82854982),
	)

	// Result:: 82,854.
	fmt.Printf(
		"%v.\n",
		humanize.Comma(82854),
	)

	// Result:: 82854nd.
	fmt.Printf(
		"%v.\n",
		humanize.Ordinal(82854),
	)

}

実行結果はこんな感じに。

$ go run gohumanize.go 
83 MB MB.
79 MiB MiB.
82,854.
82854th.

日付は引数で与えたデータと現時刻の差分をとるタイプです。
こんな感じ

// time.go の 19行目

// Time formats a time into a relative string.
//
// Time(someT) -> "3 weeks ago"
func Time(then time.Time) string {
	return RelTime(then, time.Now(), "ago", "from now")
}

参考もと

godoc.org
github.com

ゆうちょ銀行の払込領収書が無くなった場合……

今回は何らかの事情で払込書が無くなった場合に使えるネタ。
「証拠書写し請求書 兼 回答書」という様式を提出すれば再発行を依頼できます。
かなりのレア書類故、ゆうちょ窓口にいって直接様式を貰ってくるしかないです。
必要な様式を記載・届け印を押印の上、以下の資料を持参します。

  • 半年以内の全部事項証明書
  • 届け印
  • 通帳
  • 申請者の写真つき身分証

取扱店は通帳をみれば年月日の隣に番号で書いてあります。
以下のサイトで検索するといいでしょう。
ただ、5桁なので都道府県に跨った複数の結果がでてきます。
行動範囲が広い人や、背景事情が分からない人は通帳の詳細請求も必要かも知れません。
map.japanpost.jp

注意点

  • 通帳が無いと駄目です
  • 遡りは10年まで。それ以前は基本的に廃棄されていると見たほうがいいです。

カプセル化とアレコレ

package main

import (
	"fmt"
)

type MyType struct {
	num  int
	body []byte
	ans  string
}

func (mt *MyType) String() string {
	return fmt.Sprintf("%d::%s\n", mt.num, mt.body)
}

func (mt *MyType) setAns() string {
	mt.ans = fmt.Sprintf("Num value is %d. Body value is %s.\n", mt.num, mt.body)
	return mt.ans
}

func main() {
	p := new(MyType)
	p.num = 12
	p.body = []byte("yes")
	fmt.Printf("%v\n", p.String())

	p.setAns()
	fmt.Printf("%v\n", p.ans)
}
$ go run hoge.go 
12::yes

Num value is 12. Body value is yes.

GOでコマンドライン引数をみる

Go言語でコマンドライン引数を得るには、公式のflagパッケージをつかいます

実際のところ

package main

import (
	"flag"
	"fmt"
)

func main() {
	num1 := flag.Int("num1", 42, "an int value for 1")
	num2 := flag.Int("num2", 0, "an int value for 2")
	name := flag.String("name", "none", "an string value for name")

	flag.Parse()

	fmt.Println("num1:", *num1)
	fmt.Println("num2:", *num2)
	fmt.Println("name:", *name)
}

実際に動かすと、こんな感じ

$ go run clflag.go 
num1: 42
num2: 0
name: none
$ go run clflag.go -num1 999 -name "golang"
num1: 999
num2: 0
name: golang

パッケージの要素について外部から参照したいなら大文字に

Go-Tourによると

Goでは、最初の文字が大文字で始まる名前は、外部のパッケージから参照できるエクスポート(公開)された名前( exported name )です。
(略)
パッケージをインポートすると、そのパッケージがエクスポートしている名前を参照することができます。 エクスポートされていない名前(小文字ではじまる名前)は、外部のパッケージからアクセスすることはできません。

これはテストでも同じことが言えます。
前の記事ではStringという関数を作りました。
これを"string"と小文字はじまりにすると、テストで参照できません。

逆にオブジェクト志向型言語でいうところのプライベート関数/変数を作りたい場合は小文字で始めれば良いです。

参考もと

A Tour of Go

【読書メモ】シティ・ファーマー

家庭内菜園から一歩進んで、地域菜園という試みについて取り組んだ人のお話集です。
店頭で購入すると、ハーブの種がついてきます。

欧米の都市での取り組みを中心に紹介されており、
垂直農場だの屋上菜園、アクアポニックスといった話題がメインです。

この手の本にありガチな安っぽい文明批判*1に目をつぶれば、
事例集としては非常に勉強になる内容です。

*1:そもそも、持ち上げてる農業自体が文明そのものなのですが、この手合はどうやって認識の折り合い付けてるんでしょうか?