タグ

goに関するsyou6162のブックマーク (34)

  • Goで作るテキストエディタ - Sansan Tech Blog

    はじめに みなさんこんにちは。Sansan事業部プロダクト開発部のiOSエンジニア荒川です。 以前はRDBMSの記事*1を寄稿し、好評いただいたこともあり、定期的に車輪の再発明系の記事を書いていこうと思います。 さて日はタイトルの通り、VimEmacsに代表されるターミナルで動作するインラインテキストエディタをGoで開発してみました。 ソースコードは以下のリポジトリに置いているため、ぜひ参考にしてください。 github.com 完成品 文字だけだとイメージも湧きにくいので、まずは完成品をお見せします。 最低限エディタの動きは出来ている、というレベルの完成度ですね🙏 特徴 1000行インラインエディタ 文字入力/挿入/削除 画面スクロール キーボードショートカット ファイル読み込み/保存 Goのコードハイライト機能 実装の方針 今回はただ開発するだけではなく、いくつかのこだわりポイン

    Goで作るテキストエディタ - Sansan Tech Blog
    syou6162
    syou6162 2020/07/29
  • mercari_go_isucon.md · GitHub

    �mercari_go_isucon.md GoでISUCONを戦う話 mercari.go #4 https://mercari.connpass.com/event/105640/ 自己紹介 catatsuyというIDで各種SNS活動しています かたついって呼ばれています メルカリのSREチームで主にGoを書いています 前職はピクシブでpixivのHTTPS化・PHP7.1化・HTTP/2化や、広告サーバーの新機能追加など色々やっていました ISUCON大好き 私とISUCON ISUCON4:2位(初出場) ISUCON5:8位 ISUCON6:運営 ISUCON7:予選敗退 ISUCON8:3位 他にもpixiv社内ISUCONを作りました 社内ISUCONを公開したら広く使われた話 - pixiv inside [archive] ISUCONとは 『お題となるWebサービスを決

    mercari_go_isucon.md · GitHub
    syou6162
    syou6162 2018/11/11
  • https://darashi.net/2018/06/01/writing-an-interpreter-in-go-ja.html/

    syou6162
    syou6162 2018/06/03
  • 忘れがちなGo言語の書式指定子を例付きでまとめた - Qiita

    Goの書式指定子 忘れがちな書式指定子 いちいち調べるのも面倒臭いので、普段使いそうな書式指定子の使い方を例付きでまとめた 各書式指定子の説明文は、基的に以下のサイトを引用させていただいている 引用元: go fmtパッケージ 各書式指定子の使い方 %v デフォルトフォーマット %v デフォルトフォーマットを適用した値 構造体を出力する際、+フラグ(%+v)を加えるとフィールド名が表示される package main import ( "fmt" ) type Person struct { Name string Favorite string } func main() { p := new(Person) p.Name = "sekky" p.Favorite = "Programming" fmt.Printf("構造体 = %v", p) }

    忘れがちなGo言語の書式指定子を例付きでまとめた - Qiita
  • Go pprof 入門編 (CPU Profile とコマンドラインツール)

    このエントリーは、 KLab Advent Calendar 2015 の17日目の記事です。 pprof は Go の標準ライブラリにあるプロファイラです。 CPUを使用している部分を見つけるだけでなく、CPUを使ってないのにレイテンシが悪化するケースやメモリリークを発見したり、長時間安定して動くサーバープログラムを開発するのにとても便利です。 今日から3日間の連載でこの pprof の使い方や仕組みについて見て行きます。最初は一番基となる CPU プロファイルの取得方法と、 go tool pprof の使い方を説明します。 Note: Macでの注意点 Mac OS X の Mavericks 以前は、 GoCPUProfiler が利用している SIGPROF シグナルに問題があり、 CPU プロファイルを取るためにカーネルにパッチを当てる必要がありました。 この問題は E

    Go pprof 入門編 (CPU Profile とコマンドラインツール)
  • Go言語で非同期処理の結果を受け取る - Qiita

    Go言語にはgoroutineというものがあり、複数のタスクを並行(Concurrent)に実行したい場合に役立ちます。 またGo言語では、ライブラリなどのAPIは基的に同期版を提供し、非同期で処理したい場合は呼び出し側がgoroutineで非同期化するのが一般的です。 そこで、goroutineを使って関数を呼び出し、その結果を得るための実装方法について、自分なりに考えてみたので、ここにまとめておきます。 戻り値がない 戻り値がなく、処理が終わっていればよい場合: // boolでもよいが空struct done := make(chan struct{}, 0) go func() { // 何か処理をする close(done) }() // chanがcloseされるまでブロックする <-done 値の受け渡しがない場合はシンプルです。 Tips: 空structについて 値の受

    Go言語で非同期処理の結果を受け取る - Qiita
  • Apex で Go はどう実行されているのか | TECHSCORE BLOG | TECHSCORE BLOG

    var child = require('child_process') var byline = require('./byline') /** * Context for the request. */ var ctx /** * Child process for binary I/O. */ var proc = child.spawn('./main', { stdio: ['pipe', 'pipe', process.stderr] }) proc.on('error', function(err){ console.error('error: %s', err) process.exit(1) }) proc.on('exit', function(code){ console.error('exit: %s', code) process.exit(1) }) /** *

  • テック系ニュースをTerminalから見るコマンド、TechStackを作るついでに、Go入門からHomebrewでの公開まで体験した。 - timakin.log

    github.com 概要 TechStack。テックのニュースを一望できるCLIツール。 ニュースというかプログラミング関係用のスマートニュースみたいな感じ ts hatenaって打つと、はてなも見れるよ。 なぜ作った Goの勉強。 あとRSSで毎日2000記事とか上がってくるのいい加減だるいので、主要サイトの主要記事だけterminalから見たら効率がいいと思った。 Goいい Nodeのコールバック地獄にはまりかけた後に、goroutineとchannelを使うと至福だった。 @tenntennさんの記事が恐ろしく参考になった。 Goroutineとchannelから始めるgo言語@初心者向けgolang勉強会2 from Takuya Ueda www.slideshare.net パッケージ公開 homebrewでインストールできるよ。 brew tapした後に入れてね。 これにつ

    テック系ニュースをTerminalから見るコマンド、TechStackを作るついでに、Go入門からHomebrewでの公開まで体験した。 - timakin.log
  • GitHub - google/go-github: Go library for accessing the GitHub v3 API

    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/go-github: Go library for accessing the GitHub v3 API
    syou6162
    syou6162 2017/02/03
    へー、goのgithub関連のライブラリ
  • The Little Go Book

    update, 2017: The book might be a couple years old, but it's still relevant. Nothing fundamental or outwardly major has changed in Go (the team has promised a stable API until the next major version). The big changes have been with the tooling, compiler and runtime as well as enhancing the standard library (like supporting HTTP/2). The Little Go Book is a free introduction to Google's Go programmi

    syou6162
    syou6162 2017/01/29
  • Apexを使ってGoでlambdaを動かす - Qiita

    最近Goの勉強をしているので、lambdaGoで動かせないかなと思ってやってみた。 準備するもの Go Apexのインストール AWSのアカウント awscli Apexとは lambdaのビルドとデプロイなどを簡単に管理をするツール。 サポートしている言語はNode.js、JavaPythonGo 公式にはサポートしてないGoが使えるのはいいですね。 どうやってるのかというと、Node.jsでGoのバイナリを実行してるっぽい。 インストール Mac もしくは Linuxの場合 % curl https://raw.githubusercontent.com/apex/apex/master/install.sh | sh Windowsは直接バイナリをインストール インストールが終わったらはApexのアップグレードをします。 % apex upgrade AWSAPIキーの設定

    Apexを使ってGoでlambdaを動かす - Qiita
    syou6162
    syou6162 2017/01/29
  • GithubのGo言語プロジェクトにPull Requestを送るときのimport問題

    TL;DR fork元(オリジナル)をgo getしてその中で作業,forkした自分のレポジトリにpushしてPull Requestを送る. 問題 Github上のGo言語のプロジェクトにコミットするとき,cloneの仕方で若干ハマることがある.普通のOSSプロジェクトの場合は,forkしてそれをcloneしてpush,Pull Requestとすればよい.Go言語のプロジェクトでは,同じレポジトリの中でパッケージを分け,それをimportして使ってるものがある.そういう場合にforkしたものをそのままcloneすると,importの参照先がfork元の名前になりハマる. 例えば,github.com/someone/toolがあるとする.このレポジトリはgithub.com/someone/tool/utilsという別パッケージを持っており,mainがそれを使っているとする.つまり以下

  • r/golang - Returning nil for a struct?

    Expanding on the existing comments, it is language convention that unless otherwise documented, an error return means you must not use the non-error return value for anything. This is because it's impossible to return an "invalid" answer for the non-error value in general. You might think it was "safe" to return nil, but even this is not correct. Since nil pointers can still have methods called on

    r/golang - Returning nil for a struct?
  • EmacsからDashのドキュメントに素早くアクセスする - ありの日記

    タイトルと直接は関係ないんだけど、最近、Alfredというツールを使い始めてみた。Alfredの説明は以下の記事に詳しく説明されているので見てみるといいかと。(Alfredのバージョンが2なのでAlfred2と言えばいいのか、そのままAlfredとだけ言えばいいのかよくわかんない) Mac仕事効率化!Spotlightを完全に超えた神ランチャーアプリ「Alfred 2」の使い方とおすすめWorkflows10選。[Mac] | MacWin Ver.1.0 AlfredはSpotlightの代わりになるだけでなく、色々なアプリケーションと連携し、キーボード操作だけで色々なことが出来るようになる。(計算したり、ターミナルでコマンド実行したり、Stackoverflowの検索をしたり、ツイートしてみたり。イメージとしてはEmacsのAnythingやhelmみないな。)デフォルトで入っている連

    EmacsからDashのドキュメントに素早くアクセスする - ありの日記
  • Goの初心者が見ると幸せになれる場所 #golang - Qiita

    公式サイト A Tour of Go Web上で実行しながら学ぶことができる公式のチュートリアルです。 チュートリアル 公式のチュートリアルです。初学者向けからジェネリクスのチュートリアルなども用意されています。 A Tour of Goが終わった後に取り組むと良いでしょう。 Go Wiki Go Code Review Commentsなどが掲載されているGitHub上のWikiです。 パッケージドキュメント 標準パッケージやサードパーティ製のパッケージのドキュメントが見れるサイトです。検索もできます。 入門 プログラミング言語Go完全入門 筆者が作っている巨大なGoの入門資料です。なぜGoが作られたのか、から最新のジェネリクスの情報、静的解析まで扱っています。 Gopher道場 Goを体系的に学べる場です。10時間くらいある動画教材(自習室から入手可)もあります。 Go の最初の手順

    Goの初心者が見ると幸せになれる場所 #golang - Qiita
  • Pure Go で辞書同梱な形態素解析器 kagome を公開してみました - Qiita

    概要 Kagome(籠目)は Pure Go な日形態素解析器のプロトタイプです.辞書をソースにエンコードして同梱しているので,バイナリだけで動作します.辞書データとして,MeCab-IPADICを利用しています. 関連: Pure Go形態素解析器で実行バイナリに辞書埋め込んだヤツを作ってみた (1) Pure Go形態素解析器で実行バイナリに辞書埋め込んだヤツを作ってみた (2) 未知語処理編 Pure Go形態素解析器で実行バイナリに辞書埋め込んだヤツを作ってみた(3) 完結編 ソース インストール

    Pure Go で辞書同梱な形態素解析器 kagome を公開してみました - Qiita
  • sync.ErrGroupで複数のgoroutineを制御する

    Golangの並行処理は強力である一方で同期処理を慎重に実装する必要がある.“Go 言語における並行処理の構築部材”にまとめられているようにGolangは様々な方法でそれを実装することができる.実現したいタスクに合わせてこれらを適切に選択する必要がある. この同期処理の機構として新たにgolang.org/x/sync/errgroupというパッケージが登場した.実際に自分のツールで使ってみて便利だったので簡単に紹介する. 使いどころ 時間のかかる1つのタスクを複数のサブタスクとして並行実行しそれらが全て終了するのを待ち合わせる処理(Latch)を書きたい場合にerrgroupは使える.その中でも「1つでもサブタスクでエラーが発生した場合に他のサブタスクを全てを終了しエラーを返したい」(複数のサブタスクが全て正常に終了して初めて1つの処理として完結する)場合が主な使いどころである. 実例

  • 型と名前によるGoのコード探索 ― gofind - 詩と創作・思索のひろば

    思いつきでツールを作ってはリスのように忘れ、再発見しては新鮮な気持ちで便利に使う日々です。 一般にプログラミングにおいては、ソースコードを読むことに意外とばかにならない時間を使うもの。特に Go ではデフォルトで標準ライブラリのソースコードが手元にあり、コードを書く際よい教科書になるので、これを読むことも多いはず。 Go は静的に型付けされる言語なのでその点コードは読みやすいけれど、データ構造が不変ではないので、ある構造体のフィールドがどこで書き換わるのかを知るには、処理を追っていくしかない。名前で grep するのもひとつの手ではあるけど、精度はあまり期待できない。 そこで gofind。簡単に言うと、型やパッケージを含めた名前でもって Go のソースコードを検索するツールです。 go get github.com/motemen/gofind/cmd/gofind 使い方は以下の通り。

    型と名前によるGoのコード探索 ― gofind - 詩と創作・思索のひろば
  • EmacsでのGo言語編集環境 - unknownplace.org

    最近Go言語を始めた。MacGoの実行環境を入れ、Emacsで編集するところまで、一通りまとめておく。 Goの導入 (for OS X) いろいろ方法があるようだけど、僕はカジュアルに brew install go で済ませた。 GOPATH 環境変数は最初プロジェクト毎に設定して使おうかと思っていたんだけど、 後述するgocodeやgo-flymakeといったツールを使う場合、手元のGOPATHは1つにしてしまったほうが便利なので、 export GOPATH=$HOME/dev/go-workspace というのをshellの設定に定義して、手元ではこの共通のPATHを使うようにした。 これは問題がでたらまた考える。 PATHを通す homebrewで入れたツールをEmacsから使うためには、 homebrewのbinディレクトリを exec-path に追加する必要がある。 (a

  • Goでxxxのポインタを取っているプログラムはだいたい全部間違っている - Qiita

    Goで、文字列、インターフェイス、チャネル、マップ、スライスのポインタを取っているプログラムは、書いた人がきちんと自分がなにをしているのか理解しているのでなければ、ほぼ確実に間違っているといっていい。 Goではある種の型の値はそもそもポインタのようなものである。上記の型はどれも任意の大きさになり得るが、大きくなりうる実体のデータはヒープに確保されていて、値そのものが持っているのはそのヒープ上への値へのただのポインタ+多少の付随的なデータにすぎない。こういった値を値渡しではなくポインタ渡しする必要はない。ポインタのデリファレンスのほうがポインタのコピーより高くつくし、余計な混乱を引き起こすだけだからだ。もしこういう値をポインタ渡ししているとしたら、そのコードはなにか深い意味があるのではなく、それを書いた人が大きな値がコピーされると勘違いしていて書いた可能性のほうがずっと高い。 文字列は2ワ

    Goでxxxのポインタを取っているプログラムはだいたい全部間違っている - Qiita
    syou6162
    syou6162 2016/12/30