自由気ままにブログ

地方零細企業プログラマがひっそりとなにかしています。

fmtパッケージだけで、なんでも簡単にstring型に変換

f:id:nono138:20200421225921p:plain

Goは型のある言語で、型を意識して書かないといけません。

関数を使いたい時など、引数でstring型にしていされていて、あれ?使えない...って時がよくありませんか?私はよくあります。

通常だと

package main

import (
    "fmt"
    "strconv"
)

func main() {
    num := 10
    fmt.Printf("%t\n", num)

    numStr := strconv.Itoa(num)
    fmt.Printf("%t", numStr)
}

結果

%!t(int=10)
%!t(string=10)

になります。

Sprintfを使うと、

package main

import (
    "fmt"
)

func main() {
    num := 10
    fmt.Printf("%t\n", num)

    numStr := fmt.Sprintf("%d", num)
    fmt.Printf("%t", numStr)
}


結果

%!t(int=10)
%!t(string=10)


int型から、string型に変換されていますね。

fmtパッケージだけで済むのが嬉しいですね。
また、int型だけではなく、interfeceやdate型にも対応できるので、string型に変換する時に困った時は、大体、Sprintfで解決できます。
また、前に”,”を付けたいなど、いわゆるカンマ編集なども容易に出来るのがいいですね。

一応、date型も変換出来るか見てみましょう

package main

import (
    "fmt"
    "time"
)

func main() {
    t := time.Now()
    fmt.Printf("%t\n", t)

    timeStr := fmt.Sprintf("%d", t)
    fmt.Printf("%t", timeStr)
}


結果

{%!t(uint64=13454110244426743808) %!t(int64=1) %!t(*time.Location=&{   0 0 <nil>})}
%!t(string={13454110244426743808 1 1984640})


大丈夫そうですね。
Sprintfは結構、使える関数なので、ぜひ活用してみて下さい。


私事ですが、最近、推しのエンジニアさんがいるので、勝手に紹介させて頂きます。
名前はmattnさんです。
GitHubやブログ・Twitterを結構、頻繁に更新して下さるので、とてもお世話になっております。
また、みんなのGo言語などの技術書の執筆などもしていますので、ぜひ手にしてみて下さい。
twitter・ブログURLも一緒に貼っておきます。
twitter


ブログ