Bye Bye Moore

猫マンション建築の野望を胸に零細事業主として資本主義の荒波に漕ぎ出したアラサー男の技術メモ

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