タグ

Goに関するzetamattaのブックマーク (353)

  • GitHub - martingallagher/runes: Fast Go standard library-compatible Unicode functionality.

    benchmark old ns/op new ns/op delta BenchmarkIsDigit-8 34.1 1.10 -96.77% BenchmarkIsDigitUnsafe-8 33.8 0.55 -98.37% BenchmarkIsGraphic-8 127 1.11 -99.13% BenchmarkIsGraphicUnsafe-8 128 0.83 -99.35% BenchmarkIsLetter-8 40.9 1.10 -97.31% BenchmarkIsLetterUnsafe-8 40.7 0.55 -98.65% BenchmarkIsLower-8 30.2 1.12 -96.29% BenchmarkIsLowerUnsafe-8 30.2 0.83 -97.25% BenchmarkIsMark-8 35.0 1.10 -96.86% Benc

    GitHub - martingallagher/runes: Fast Go standard library-compatible Unicode functionality.
    zetamatta
    zetamatta 2018/03/24
    高速unicodeパッケージ。ただ、init()で巨大テーブルの初期化をしているので、ベンチに現れない起動時とかで時間を消費しているかもしれない
  • reflectとinterface型の威力 - Qiita

    目的 非常に簡単な例を用いて、reflectとinterface{}の便利さを知る 簡単な例 例えば、こんな感じにstructが定義されているとする。 type ParamA struct { UserID string Contents string } type ParamB struct { UserID string Price int } type ParamC struct { UserID string IsLike bool }

    reflectとinterface型の威力 - Qiita
    zetamatta
    zetamatta 2018/03/07
    こういうことが出来るから、フィールドも interface に登録できるようにする必要がなかったのかなぁ
  • マルチバイトな文字列を扱うときに気をつけたい話

    はじめに現在開発中のプロジェクトではORMgormを使っている。 1日1回依存しているパッケージのバージョンを更新してPRし、CIして変更差分に問題なければMergeして可能な限りコードを新しく保てるように開発してる。 そんな矢先、gormにMergeされたPRによって日語の文字列が入ったテストケースがこけるようになってしまった。 チームのSlackで��騒いでいると「あー �multi byteな文字列が考慮されていないね」と教えていただいた。 後に修正 PRされるのだが、自分でも検証してみることにした。 該当のコード該当のコードは以下の部分 buff := gobytes.NewBuffer([]byte{}) i := 0 for pos := range str { if str[pos] == '?' { buff.WriteString(replacements[i]) i

    zetamatta
    zetamatta 2018/02/25
    buff2 := bytes.NewBuffer([]byte{}) ではなく、var buff2 bytes.Buffer の方がよいと思う。1.10 なら strings.Builder だろうし
  • https://help.appveyor.com/discussions/problems/1215-go-14-support

    zetamatta
    zetamatta 2018/02/22
    appveyor が Go 1.3 までしかサポートしていなかった時に、1.4 を使う方法が書いてあったので、これを参考に Go 1.10 などをサポートすることが可能だ。
  • Big Sky :: gRPC を使ったファイル転送ツール作った。

    WindowsLinux 間でちょっとしたファイル転送をしたいと思った時に msys2 の ssh コマンドや WinSCP が入ってなくて、さらにレジストリなどを汚したくない環境で手軽に使える使えるファイル転送ソフトが欲しかった。Linux 側から Samba で繋いでも良いんだけど、その用途の為だけに Samba いれたくないなと思ったのでバイナリを1個ポンとコピーすれば使える物を作った。 GitHub - mattn/ft ft is CLI tool that transfer files. https://github.com/mattn/ft 使うには両方の端末に ft というコマンドがインストールされている必要がある。「Go が入れられるなら msys2 も(ry」とか言われてしまいそうだけど、実際にそういう環境や要件ってあるのですよ。はい。 Go で書いたので go

    Big Sky :: gRPC を使ったファイル転送ツール作った。
    zetamatta
    zetamatta 2018/01/09
  • Go言語 で Gitサーバー を書いてみた。 | 株式会社ヌーラボ(Nulab inc.)

    Backlogチームのnabe_です。もっぱら仕事JavaScala、最近の趣味Go言語 です。今回、 Go言語 で nulab/go-git-http-xfer という Git ライブラリ を書いたので紹介させていただきます。 役割 動機 仕組み 使い方 試用 まとめ 役割 このライブラリを使うと、GitのリモートリポジトリへHTTPでアクセスするためのサーバーを作ることができます。HTTPアクセス自体は、BacklogGithub等のGitをホスティングしているサービスであれば概ねサポートしているので、普段あまり気にすることはないかと思いますが、独自にGitを運用している場合、リモートリポジトリの前に clone、push、fetch  等で発生するHTTP通信を捌く仕組みを、なにかしら用意しなければなりません。 動機 私自身まだまだGoのニュービーなのですが、兎に角手を動か

    Go言語 で Gitサーバー を書いてみた。 | 株式会社ヌーラボ(Nulab inc.)
  • golangちょいテク - Qiita

    golangやっていて見つけたちょっとしたテクニック的なものをまとめてみます。 factory切り替え golangにおいて関数は第一級オブジェクトなので、例えばあるインターフェイスのfactory methodを状況に応じて入れ替えるみたいなこともできます。 // ユーザー情報を表す構造体 type User struct { Name string Age int } // Userに関係するインターフェイス type UserRepo interface { FindByName(string) (*User, error) } // メモリ上にユーザー情報を持っておく type userRepoMem struct { mem []*User } func (r userRepoMem) FindByName(name string) (*User, error) { for _,

    golangちょいテク - Qiita
    zetamatta
    zetamatta 2017/12/25
    context.WithValue のユニークキー用に「type key_t struct{} ; var key key_t」ってのはいいな
  • Goへの誤解について

    よくGoで誤解されるポイントについて個人的な見解を書いておきます。 今回の記事はGoアドベントカレンダー2017 その3の20日目の記事です。 使ってないパッケージがコンパイルエラーって面倒じゃね? さっさとgoimportsかgoreturnsを保存時に自動実行するエディタ環境を使いましょう。 gofmtも一緒に実行されていいことずくめですよ! インターフェースがnil判定出来ないパターンがあるのダメじゃん? 最初は私もそう思いました。しかし、typed-nilがnilリテラルと比較できなくなったのは 「nil判定サボったままinterface型に変換した」からでサボらなければ全く問題にならないのです。 map,sliceが不便? map,sliceはメソッドが一切ありません。 極論をいうとGoのプリミティブ型みたいなものなのです。 ユーザーが欲しいものはmapやsliceを駆使して各自

    zetamatta
    zetamatta 2017/12/21
  • Goで任意のXMLを処理する

    Goで未定義のXMLを処理するのに四苦八苦した話。 任意のXML処理を作る。 構造体を個別に定義せずにXMLを処理したい! 汎用定義だけで以下のような処理がしたいでござる〜。 読み込んだ情報をすべて保持する。 保持した情報をすべてXMLにする。 というわけで、xmlパッケージソースにらめっこしながら 汎用定義「Tag」を作ってみた。 package main import ( "encoding/xml" "io" ) type Tag struct { Name xml.Name Attr []xml.Attr Children []interface{} } func (t *Tag) MarshalXML(e *xml.Encoder, start xml.StartElement) error { start.Name = t.Name start.Attr = t.Attr e.

  • GoでJoyconをポインタデバイスにしてみた

    GoでJoyconをポインタデバイスにしてみた By nobonobo December 14, 2017 こんにちは、最近ニンテンドースイッチにハマってるNoboNoboです。 ニンテンドースイッチ世界総販売台数1000万台突破おめでとうございます。 今回の記事はGoアドベントカレンダー2017 その3の14日目の記事です。 ニンテンドースイッチに付属するJoyconをGoで読み取りしたらできたのでその解説を書きます。 また @shibu_jp 氏のgotomationにてプレゼン用ポインタとして動作させるところまで。 Joyconのペアリング JoyconはBluetoothでPCと接続できます。 一般的なデバイスと同様の手続きで接続確立できます。 注意点としてはJoyconを通電中のニンテンドースイッチに差し込むだけでペアリングセッションはニンテンドースイッチ側に上書きされる事です。

    zetamatta
    zetamatta 2017/12/14
  • Golangでメール取得 - 基本的に怠Diary

    zetamatta
    zetamatta 2017/11/29
    文字化けが解消できなかったとはいえ、いいところまで行ってる。参考にさせていただく
  • GitHub - neugram/ng: scripting language integrated with Go

    You signed in with another tab or window. Reload to refresh your session. You signed out in another tab or window. Reload to refresh your session. You switched accounts on another tab or window. Reload to refresh your session. Dismiss alert

    GitHub - neugram/ng: scripting language integrated with Go
    zetamatta
    zetamatta 2017/10/30
    Neugram is a scripting language and shell.
  • Go言語の浮動小数点数のお話

    元ネタ: [JavaScriptの問題] var a = 0.3 - 0.2; var b = 0.2 - 0.1; var c = a==b; cの中身はどれ? — RAO(らお)@けもケP-31 (@RIORAO) 2017年10月24日 正確な実数計算をやらされるJavaScriptくん #擬竜戯画 pic.twitter.com/ipE56C2YbV — RAO(らお)@けもケP-31 (@RIORAO) 2017年10月26日 コンピューターで浮動小数点数を扱ったことのある人なら一度は経験する、 数学上の計算とコンピューター上の計算が合わない計算の一例ですね。 この件に関して、Go言語では正しく(=数学的な結果と同じように)計算できるとの情報が。 おそらくGoはコンパイラがa=0.1とb=0.1に変換していると思われます。 添付した画像のコードだとtrueになりますが、const

    zetamatta
    zetamatta 2017/10/30
  • GoでSingletonぽいことを実現する、とある方法 | おそらくはそれさえも平凡な日々

    ちなみに今回のコードはそれほど実用性はありません。ここまで頑張って、シングルトンぽいことを実現する必要性は感じられないからです。サンプルコードはこちら。 https://www.github.com/Songmu/go-sandbox/ Goでシングルトンを実現する方法として以下の様なコードが良く見られます。 package singleton import "sync" type singleton struct{ } var ( instance *singleton once sync.Once ) func GetInstance() *singleton{ once.Do(func() { instance = &singleton{} }) return instance } このコードのグッドポイントとしては、 sync.Once を使っていること。以下のように素朴に nil

    GoでSingletonぽいことを実現する、とある方法 | おそらくはそれさえも平凡な日々
    zetamatta
    zetamatta 2017/10/30
  • 不審者セリフ fortune できた

    zetamatta
    zetamatta 2017/10/18
    goquery というライブラリを使って、サイトの台詞を引用している。勉強になる
  • Goツールのリリースにおけるバージョニングについて | おそらくはそれさえも平凡な日々

    Goのツールをリリースする時、個人的には以下のような手順を踏んでいる。もちろんスクリプトで一撃でできるようにはしている。今回は1.の話。セマンティックバージョニングの話は出てきません。 versionをbumpする CHANGELOGを更新する 1,2での変更をgitに反映してタグを打つ ビルドする ビルドをアップロードする versionは -ldflags を使って動的に埋め込む方法があるが、最近は明示的にソースコードに書いた方が良いと思うようになってそうしている。 理由としては、ユーザーが go get/build で実行ファイルを取得した場合でもバージョンは表示されて欲しいというのが一つ。 -ldflags で実行ファイルに色々な値を埋めることはできますが、基原則として、それらを埋めてない状態でもちゃんと実行ファイルが正常に動くようにすることを意識した方が良い。 もう一つの理由と

    Goツールのリリースにおけるバージョニングについて | おそらくはそれさえも平凡な日々
    zetamatta
    zetamatta 2017/10/17
  • Goツールのリリースエンジニアリング | おそらくはそれさえも平凡な日々

    前回: Goツールのリリースにおけるバージョニングについて 前回挙げた以下のリリース5段階の中で、バージョニングだけで1エントリになりましたが、今回は、2,3について。 versionをbumpする CHANGELOGを更新する 1,2での変更をgitに反映してタグを打つ ビルドする ビルドをアップロードする 具体的には、リリースに纏わるファイル更新をgitに反映さえてタグを打つところまで。ビルドする直前までとも言えます。 CHANGELOG.mdを自動更新する CHANGELOGは ghch で自動生成させている。規定の CHANGELOG.md をリポジトリに配置して、 % ghch -w -N $next_tag とすれば、魔法のように CHANGELOG.md を更新してくれる。生成された CHANGELOG.md はこんな感じ。 https://github.com/Songmu

    Goツールのリリースエンジニアリング | おそらくはそれさえも平凡な日々
    zetamatta
    zetamatta 2017/10/17
    Linux での話。うむ、みんな似たようなことは考えてるな
  • GitHub - google/skylark: Skylark in Go: the Skylark configuration language, implemented in Go [MOVED to go.starlark.net]

    You signed in with another tab or window. Reload to refresh your session. You signed out in another tab or window. Reload to refresh your session. You switched accounts on another tab or window. Reload to refresh your session. Dismiss alert

    GitHub - google/skylark: Skylark in Go: the Skylark configuration language, implemented in Go [MOVED to go.starlark.net]
    zetamatta
    zetamatta 2017/10/04
    Go製の設定用言語。ぱっと見、まるで Python
  • イケてないのに人気がある golang vs イケてるのに人気がない Nim - 強まっていこう

    ここ最近 GCP を持ち上げて Google のポチと化していましたが、そのポチが今回は Google に噛みつきます。 wolfbash.hateblo.jp だって golang 酷いんですもん。何かセンスがぜんっぜん Google っぽくない。 せっかく作るのなら、もっと良いものにして欲しい、そう言う願いも込めてこのエントリーを書きます。 wolfbash.hateblo.jp 前回 Rust と比較してみましたが、今回はその golang 版です。 golang は言語のシンプルさを追求していて、言語的な便利機能が片っ端からありません。 それは覚えることが少ないことを意味します。学習コストを低く抑える事を根的なポリシーにしている言語です。 裏を返せば完全に人を小馬鹿にしているんですが、その分ドキュメントなどがかなり充実しています。 構文的には、ほぼ C と同じです。そらそうですね

    イケてないのに人気がある golang vs イケてるのに人気がない Nim - 強まっていこう
    zetamatta
    zetamatta 2017/10/03
    Go言語は「健康によい粗食」みたいなもんなのに「なにこれ、まずーい」とか言ってるわけですよ、この記事は
  • Go にジェネリクスがなくても構わない人たちに対する批判について - methaneのブログ

    なんども繰り返される話でうんざりなんだけど、繰り返されるたびに反論するのもアレなので、URL貼れるように記事にしておく。 Goが頑なにジェネリクスいらないというだけ他の言語勢から失笑買ってるというのは自覚して— {{alert()}} (@mizchi) 2017年9月19日 頑なに要らないと言ってる人が具体的にどの発言のことを差してるのか分からないけど、コア開発者たちはツールチェインやランタイムの進化を優先していただけで頑なに拒否してたりはしません。今はツールチェインやランタイムが大分進化したから、Goの適用範囲を広げるためにジェネリクスを含めて機能追加も検討し始めようかっていうフェーズです。 あとどの言語にもちょっと公平的な見方ができなくなった痛いファンはいるもので、そういった人たちをいちいちあげつらってこういう言い方で失笑するのは、別に止めはしないけど自分の格を下げるだけだと思う。

    Go にジェネリクスがなくても構わない人たちに対する批判について - methaneのブログ
    zetamatta
    zetamatta 2017/09/20