スキップしてメイン コンテンツに移動

Goでの同じ文字の連結について

おばんです。@CreatorQsFです。夜はながいですね。

普段なら、PHPで書くと、同じ文字列の連結ってどう書いてます?みなさん。
たぶんPHPerならこう書くんじゃないかなーと。

<?php
  $str = "★";
  print $str2 = $str + $str;

はい、何の問題もなく、実行結果はきっと、「★★」ですね。
そう、文字の連結に+を使うのです。

ですが、じゃばーとかならわかると思うのですが、このやり方ってとっても非効率なんですよね!私Java触ったことないですけどw

文字列のためのオブジェクトが必要以上に生成されるのを防がないともったいないんですよね〜。

というわけで、「ばっふぁ」に挑戦します。ルーターの会社ではないですよ。

まずコード

package main
import (
  "fmt"
  "bytes"
)
func main() {
  var buf bytes.Buffer
  for i := 0; i < 繋げたい個数; i++ {
    buf.WriteString("書きたい文字")
  }
  print buf.String()
}

私はこの方法をおすすめします。
なんでこれがいいかって言うと、プログラムに無駄がなくなるからです。より速く、より軽いプログラムに成るって感じかな〜。

間違ってるかもしれません。なにせ初心者、一週間前にGoの世界に入ったばかりなので……そうしたら指摘してくださいm(_ _)m

コメント

このブログの人気の投稿

GoでPodcast用のサーバーを組むときに良い(良さそうな)lib

いい感じのライブラリ、あります。 現在作成中のPadio(仮名)というサービスではこれを使っています(が、しかしもしかしたら変えるかも。現状はすごい満足)。 https://github.com/eduncan911/podcast https://godoc.org/github.com/eduncan911/podcast

Vaffle.vimがいい感じ

実はいまのいままで、ずっとUnite.vimを使い続けてきていました。 Shougoさんのunite.vimは確かに素晴らしかったです。しかしながら、私には到底使い切れるものでもなく、もったいないとおもいつつ、ファイラーとmruのみを使う日々が続いておりました。 御存知の通り、随分前にご本人はすでにuniteからdeniteへと移行をしています。 知らなかったわけではないんですが、動いてるし速度にも問題を感じることがなかったので放置していました。 しかし今回、現状に合わせて、この部分を考え直すことにしました。要するにVimのファイラをどうしよう問題です。 で、いろいろ見た限り、わたしには、 https://github.com/cocopon/vaffle.vim これが最も適しているようでした。 ブログ記事はこちらです。 http://cocopon.me/blog/?p=6084 かなり気に入っています。動作はなかなかに速いですし、hjklで移動できる感覚も、なれると良いものですね。 あとはmruをどうしようかなーというところのみとなりました。

NULLのcolumnを含むDBでデータを取得する/Golang

どうも、@CreatorQsFです。我が家にもやっと春が舞い戻ってまいりました。 さて、僕はもともとCとPHPとMySQLでサービス作ってた人です。そんな中で世紀末ぐらい困ったことが会ったので記しておきます。 まず、PHPでの時わたしはDB関連は全て自作していました。これでも一応SQLかけるので。 ですが、Goに変えてからgithubなどのLibraryを積極的に使うようにしています。フレームワークも今はrevelを使ってます(╹◡╹) そして、当然のごとくgorpを使いはじめるわけなんですが…これが意外と難しい。というよりPHPの成り上がり下克上果たせなかった系Goプログラマには結構問題点が多くて。私自身にですが。 まず、DBを使うのに、structと組み合わせるためにマッピングしなきゃならない。いや正確に言うと、今まではDBから取得したらそれが自動的にオブジェクトに落とし込めていたので、なんか気にすることなかったんですな。 だけど、最近のモダンなやつ見てるとどうもそうでもないらしい。構造体を作ってそこに落としこむのが主流なのかな。 ってことで、やってみたのはいいものの… …動かないっす先輩。 思ったとおりに行かないっす 原因は、MySQLのcolumnにNULLが含まれているためでした。そこで、sql.NullStringの存在を知ります。 で、それを   for _, l := range list {     p := l.(*models.A)     fmt.Printf("%d,%t, %s\n", p.Id,p.Status,p.Url)               } こんなかんじに調理したとします。 この青四角のところが大問題なわけで、最初こう書きました。 result string = p.Url そうすると、みんな大好き型エラー。 で、次にこう。 result string = fmt.Sprintf("%v",p.Url) いや、動いたんですけど…。問題はそうじゃなくて、吐出されたものがめちゃめちゃに汚い。オエッの方じゃなくて。 で、なんじゃこりゃと思って、次...