DRYな備忘録

Don't Repeat Yourself.

Go言語でプリミティブ型に拡張メソッドを生やす【golang】【type】【extend】

問題

Go言語で、たとえばstring型を拡張してみたい

一応

package main

type MyStr string
func (s MyStr) Waros(i int) MyStr {
    for j := 0; j < i; j++ {
        s += "w"
    }
    return s
}
func main() {
    var s MyStr = "なんつってつっちゃった"
    println(
        s.Waros(20),
    )
}

んーでもこれポインタ渡せてないから単なる関数と何ら違わない気がする。その証拠に

func main() {
    var s MyStr = "なんつってつっちゃった"
    println(
        s.Waros(20),// なんつってつっちゃったwwwwwwwwwwwwwwwwwwww
        s, // なんつってつっちゃった
    )
}

ポインタを渡して自分自身を変えてみたい

package main

type MyStr string
func (s *MyStr) Repeat() {
    *s += "♪ " + *s
}

func main() {
    var s MyStr = "なんつってつっちゃった♪"
    s.Repeat()
    s.Repeat()
    s.Repeat()
    println(s)
    // なんつってつっちゃった♪ なんつってつっちゃった♪ なんつってつっちゃった♪ なんつってつっちゃった♪ なんつってつっちゃった♪ なんつってつっちゃった♪ なんつってつっちゃった♪ なんつってつっちゃった
}

基本的なこと聞いてしまった...ハズカシイ

f:id:otiai10:20140526215109p:plain

DRYな備忘録