タグ

Goに関するhitsujibaneのブックマーク (22)

  • https://stephen.sh/posts/quick-go-performance-improvements

  • Goコンパイラをゼロから作って147日でセルフホストを達成した - Qiita

    もはやただのアセンブリコードで、コンパイラどころかGo言語の影も形もありません。ここから機能を付け足してGoコンパイラに育て上げました。 興味深いことに、7コミット目あたりですでにコンパイラ全体の骨格ができています。 なんで作ろうと思ったの もともとGoコンパイラを作るなどという発想は1㍉もなかったです。 当時、仕事Goを触る機会はあったものの、週1-2回くらいしか触らないのでなかなか上達しないという焦りを抱えていまいた。 そんなとき Rebuildfm で ruiさんが8ccを作った話を聞いてすごく興味を持ちました。 Rebuild: 153: Connecting The Dots (rui314) さっそく git clone して1コミット目から読んでみたら自分でもやりたくなって、 Go言語に移植してみようと思いました。 1コミット目から順番に、Cで写経してからGoに移植しました

    Goコンパイラをゼロから作って147日でセルフホストを達成した - Qiita
  • Goでゼロから作る 自作TCP/IPプロトコル サーバー

    「マスタリングTCP/IP を読んだけど理解がイマイチ進まない。Goがどのようにサーバーを立てているのか気になる。」 そんなスキマを埋めるためのです。 Goの標準パッケージである net package を一切利用せずに、自作TCP/IPプロトコルでサーバーを作ります。 パケットをどのようにやり取りするかハンズオン形式で解説し、最後にToDoリストAPIを実装します。

    Goでゼロから作る 自作TCP/IPプロトコル サーバー
  • GoとRust - 並行プログラミング編

    はじめに こんにちはnasaちゃんです。 goroutine何も分からん!async/await何も分からん!となったのでそれぞれを比較しつつ理解を深めてみよう。という考えのもとGo, Rustの並行プログラミングの解説記事を書いてみました。 ところどころふわっとしているため、補足や指摘を貰えると大変助かります。 今回話すこと goroutineとは結局何なの Goの並行処理の仕組み goroutine(Go)とasync/await(Rust)の比較 Goのランタイム、Rustのランタイムの話 話さないこと 構文の違いについては特に触れない どちらが優れているとい言う話はしない ベースになっている思想については特に触れない TL;DR Goには標準のランタイムがあるよ、Rustではランタイムライブラリを使う必要があるよ Goはランタイムが中断再開を管理するよ、Rustではプログラマーが管

    GoとRust - 並行プログラミング編
  • Goで社内ツールを作るならこんなふうに

    バックグラウンド 最近企業でにわかにGoの採用が増えているようですね。この流れを受けて実際にうちでも採用してみようと考えている方も多いかもしれません。しかし、Goに限った話ではないのですが、いきなり大きなプロジェクトに未経験の技術を投入するのはリスクが伴います。ですから最初は技術検証とGo教育を兼ねて、小さな社内ツールなどから導入するのがよいでしょう。幸い、Goは非常に習得が容易な言語ですから、既に他言語の経験があるプログラマーがじゅうぶんに開発できるようになるまでには、数日と掛からないことがほとんどです。 この記事は、そんな小さなツールの導入フェーズにあたって、自らの経験から少し役に立つかもしれない情報をシェアします。 リポジトリの構成 自らの経験上、初めてGoを触れるときによく出る質問の一つは「リポジトリ構成はどうすればいいのか?」です。 結論から申し上げると、 テンプレもルールもな

    Goで社内ツールを作るならこんなふうに
  • Goでの並行処理を徹底解剖!

    並行処理をうまく使うのは難易度が高めです。 それゆえに、go文とチャネルについて基的な文法書で知った後「並行処理ちゃんとできる!」の段階まで自力でたどり着くのは大変でしょう。 このは、 *「並行処理ってやって何が嬉しいの?」 *「ゴールーチンとかチャネルとかって一体何者?」 *「ゴールーチンやチャネルを使ったうまいコードの書き方が知りたい!」 *「Goランタイムで並行処理をどううまく処理しているか知りたい!」 といった要望にお答えする、「Goでの並行処理」に関連した事柄について網羅的・徹底的に書きまくったものです。

    Goでの並行処理を徹底解剖!
  • 実務で役立つTCPクライアントの作り方

    Go Conference 2021 Spring (A9-S) のセッションで使用した資料です。 - セッションの詳細: https://gocon.jp/sessions/session-a9-s/ - 発表者: https://twitter.com/d_tutuz 資料に誤りがあればt…

    実務で役立つTCPクライアントの作り方
  • Go言語低レイヤー入門 Hello world が 画面に表示されるまで (GoConforenceTokyo2021)

    Go言語低レイヤー入門 Hello world が 画面に表示されるまで @DQNEO (ドキュネオ) Go Conference Tokyo 2021 2021-04-24

    Go言語低レイヤー入門 Hello world が 画面に表示されるまで (GoConforenceTokyo2021)
  • Goから学ぶI/O

    GoにはI/Oに関わるパッケージが数多く存在します。io, os, bufio, fmtなどなど……。これらの立ち位置や、I/O実行の裏で何が起こっているのか当に理解していますか?このでは、この問への答えをまとめました。

    Goから学ぶI/O
  • 結局、Go言語をやめる理由はなかった件 - Qiita

    この記事は Go 2 Advent Calendar 14日目の穴埋め記事です。 はじめに @okdyy75 さんによる Go 5 Advent Calendar 14日目の の記事「だから僕はGo言語を辞めた」 が「ベンチマークっていうのはこうやるんだよ」というのを説明するために反面教師的な意味で良い教材だと思ったので、反証記事を書きたいと思います。 ベンチマークを取りながらコードを改善して、最終的にGoは遅くないからやめる必要はないということ、そして、なぜ遅いという結論になってしまったのかを掘り下げていきたいと思います。 下準備 幸いなことに、ベンチマークのソースコードがGitHubにある ので、こちらを実行しながら問題点を改善していきましょう。 ちゃんとコードが上がっているのは素晴らしいですね! 一方で、元記事には測定環境が明記されていませんでしたので、同じ環境で測定することはできま

    結局、Go言語をやめる理由はなかった件 - Qiita
  • Goで作るテキストエディタ - Sansan Tech Blog

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

    Goで作るテキストエディタ - Sansan Tech Blog
  • The Go Blog - Using Go Modules / Go Modulesを使う(和訳) - Qiita

    この記事は The Go Blog - Using Go Modules の和訳です。 はじめに Go 1.11および1.12には、依存バージョン情報を明示的で管理しやすくする、Goの 新しい依存管理システム である モジュール の予備サポートが含まれています。このブログ記事は、モジュールを使い始めるために必要な基的な操作を紹介するチュートリアルです。この次の記事では、他の人が使用するためのモジュールのリリース方法について説明します。 モジュールは、そのルートに go.mod ファイルを持つファイルツリーに格納された Goパッケージ の集まりです。 go.mod ファイルは、モジュールのモジュールパス(ルートディレクトリに使用されるインポートパス)とその依存関係の要件(ビルドを成功させるために必要な他のモジュール)も定義します。各依存関係の要件は、モジュールパスと特定の セマンティックバ

    The Go Blog - Using Go Modules / Go Modulesを使う(和訳) - Qiita
  • Big Sky :: Go 言語の非同期パターン

    Gogoroutine という非同期の仕組みを提供していますが、使い方次第では色々なパターンが実装できる為、初めて goroutine を見た人はどの様な物が正解なのか分からない事があります。以前、このブログでも紹介した事がありますが Go の非同期の仕組みは一見単純な様に見えて実はとても奥深いのです。 Big Sky :: golang の channel を使ったテクニックあれこれ golang の channel は他の言語に見ない独特のパラダイムを開発者に提供します。 単純にスレッド間でメッセージングをするだけでもC言語で書けばそこそこの量になったり、慣れていない人であればど... https://mattn.kaoriya.net/software/lang/go/20160706165757.htm 2012 年に Rob Pike 氏が Google I/O で「Go

    Big Sky :: Go 言語の非同期パターン
  • 組み込みLinuxでGolangのススメ - Qiita

    一年近く、組み込みLinuxでのユーザープロセスをgolangで書くことを試していたのですが、これはいける! という感触を持ちました。 仲間を増やしたいと思うので、ここにその情報を紹介します。 #何をしたか 既存の製品をベースにして、新機能の実装をGolangで書いてみました。 既存の部分はCで書いてあります。Golangで書いた新機能部分は別プロセスになっています。 既存部分とのやりとりは場面によって以下を使い分けました。 cgoによる関数呼び出し UNIXドメインソケットの通信 シグナル Golangで書いた部分には以下の要素を含みます。 UARTやi2cで接続されたセンサーからデータを受け取る インターネット上のWebサービスAPIを使用する 2Dグラフィックスの描画 (cairoを使用) 最大性能を目指すよりも、十分な性能を手早く形にすることを重視しました。 #Golangでよか

    組み込みLinuxでGolangのススメ - Qiita
  • Big Sky :: Re: Go言語感想文

    幾らか言いたい事があったので。 Go言語感想文 - なるせにっき 序 最近、敵情視察を兼ねた仕事ととしてGoでアプリケーションを書いていた。このアプリケーションがどんなものかはそのうち id:tagomoris さんがどこかで話すと思うけれど、この コンポーネント ... http://naruse.hateblo.jp/entry/2017/06/02/203441 GoroutineとChannel Goroutineはようするにスレッドなんですが、文法と実装の支援でより気軽に使えるのが他の言語との違いでしょうか。なので、Goroutineをどれだけほいほい使うべきかというコスト感覚を身につけることがとても大事な気がします。Rubyなどとは気持ちを切り替えていく必要があるでしょう。ぼくはまだ切り替えきれていません。 Goroutine はスレッドではありません。Goroutine はコ

    Big Sky :: Re: Go言語感想文
  • Go言語感想文 - なるせにっき

    序 最近、敵情視察を兼ねた仕事ととしてGoでアプリケーションを書いていた。このアプリケーションがどんなものかはそのうちid:tagomorisさんがどこかで話すと思うけれど、このコンポーネントがOSS化される予定はいまのところないので、そこで得た知見をここにまとめておくことにする。 GoroutineとChannel さて、GoといえばGoroutineとChannelですね。 Goroutineはようするにスレッドなんですが、文法と実装の支援でより気軽に使えるのが他の言語との違いでしょうか。なので、Goroutineをどれだけほいほい使うべきかというコスト感覚を身につけることがとても大事な気がします。Rubyなどとは気持ちを切り替えていく必要があるでしょう。ぼくはまだ切り替えきれていません。 もう一つがChannelですね。これは端的にはメッセージキューです。 Goは前述の通り同時に動く

    Go言語感想文 - なるせにっき
  • Mac上にGoの開発環境を構築する〜下準備編 | おそらくはそれさえも平凡な日々

    同僚がGoを始める上で、案外まとまった資料が無さそうだったので書いてみることにしました。 Macでhomebrewが入っていることが前提です。事前に brew update をおこない formula を最新のものにしておくと躓くことが少ないでしょう。 Goのインストール % brew install go エントリ執筆時点では、1.6.2 が入ります。Goはメジャーバージョンが同じ場合は、後方互換が保たれているので、基的に新しいやつを入れて問題ありません。 環境変数の設定 $GOPATH だけを決めればOKです。$GOPATH はどこでも良いのですが、ここでは $HOME/dev を $GOPATH に設定します。また、 $GOPATH/bin に $PATH も通しておきます。 export GOPATH=$HOME/dev export PATH=$GOPATH/bin:$PATH

    Mac上にGoの開発環境を構築する〜下準備編 | おそらくはそれさえも平凡な日々
  • プログラミング言語 Go ドキュメント — プログラミング言語 Go ドキュメント v0.1 documentation

    翻訳プロジェクトについて¶ この翻訳は Sphinx を使って以下のサイトで共同で行っています。翻訳に参加ご希望の方は、 yoshiki at shibu.jp までご連絡ください。 http://bitbucket.org/shibu/golang-docjp/ 翻訳ルール¶ まずはBitbucketのアカウントを作ってご連絡ください。書き込み権限を設定します。 翻訳したいものがある方は上記のBitbucketのサイト上でチケットを発行してください。Issueタブです。大項目単位です。 翻訳は読みやすさを考えて「です・ます」調で統一します。 Sphinxディレクティブを使った相互リンクは暇なときに設定します。もしくは書き込み権限のある方は設定してもらっても構いません。 Mercurialでcloneして翻訳してからcommit、pushしてください。commit前にpull&update

  • inforno :: 個人的Go雑感&メモ

    GoogleGoという新しいプログラミング言語 を出したようで。早速、インストールして軽くドキュメントを流し読みしてみました。 英語なんて読みたくないよ、という人もいるかもしれないし、誰かの役に立つかもしれないので自分用メモおいときます。完全に自分用なんである程度他の言語の知識がある人向けな上、ざっくり流し読みなんで間違ってるかも。 どんな言語? ネイティブコードを吐く、コンパイル型。 速度はCレベル。 GC搭載。ポインタはあるけど、ポインタ演算はできません。 各種アーキに最適化された、それぞれのコンパイラセットを持ちます。例: 6g, 6l : amd64 8g, 8l : i386 linux, mac, naclに対応。 動的型言語と静的型言語のおいしいとこどり。 concurrent処理が組み込まれてます。 個人的雑感 こんな言語設計思想かなあと感じたり とにかく、シンプルな言

  • Go For C++ Programmersの勝手に和訳 — ディノオープンラボラトリ

    たかはらです。 Googleが新しいプログラム言語を発表しました。早速プログラムされている方(1 2)とか尊敬します。最近はご無沙汰ですが、C++最強説を今だに唱え続ける自分としてはGo For C++ Programmersのようなドキュメントをみるとうれしくなってしまいまして、Go For C++ Programmersの最初の”Conceptual Differences”部分を勝手に和訳しました。権利的に問題があれば削除します。 適当に訳したので致命的な誤訳はありそうです。コメント欄で指摘頂けるとありがたいです。 以下、訳となります。 GoC++のような汎用システム用のプログラム言語を目指しています。C++プログラマ向けにいくつかの注意点があります。このドキュメントでは、GoC++の違いについて説明する事であまり違わない事が判るよ。 Goのもっと一般的な紹介は、”Go tuto