GoにはI/Oに関わるパッケージが数多く存在します。io, os, bufio, fmtなどなど……。これらの立ち位置や、I/O実行の裏で何が起こっているのか本当に理解していますか?この本では、この問への答えをまとめました。
Introduction to Go 1.16 The latest Go release, version 1.16, arrives six months after Go 1.15. Most of its changes are in the implementation of the toolchain, runtime, and libraries. As always, the release maintains the Go 1 promise of compatibility. We expect almost all Go programs to continue to compile and run as before. Changes to the language There are no changes to the language. Ports Darwin
この所更新とかあまりしてませんでしたが、最近はちまちまとhugoという静的サイトジェネレーターを使ってこのgithub.ioを書き直したりしました。 表ページとか体裁が良くなったかなと思います。 実は今までサイトジェネレーターなるものは使ったことがなくて、一応はCSSもHTMLも理解は出来るので手でタグを打って記事を更新しておりました。 しかしながらちょっと何か書こうと思うとやっぱり途端にめんどくさくなって「もうええかな…」みたいになるという大きな欠点がありました。 記事だけなら良いんですがMainページやら分類ページも自分で編集しないといけないですしね… で、タグをあまり打たなくて更新できるといえば、真っ先に思い浮かぶのがWordpress等の動的なジェネレーターなわけですが、Githubのページだと当然ながらサーバが動かせないのでWordpressなどは要件から外れてしまうんですよね…
他の言語になれた人が、初めてGoを書いた時にわかりにくいな、と思った部分はどのようなところがあるのか、難しいポイントはどこか、という情報を自分の経験や、会社の内外の人に聞いたりしてまとめてみました。まだまだたくさんあるのですが、多すぎるのでまずはこんなところで。コンテナで開発することがこれからますます増えていくと思われますし、その時にコンテナとの相性が抜群なGoをこれから使い始める人もどんどん増えていくと思います。 Goは特に言語のコアをシンプルに、何かを実現するときはそのシンプルな機能を組み合わせて実現しよう、というコンセプトです。つまり、他の言語で実現したいこと・できていることに比べて、Goは組み合わせ(イディオム)でカバーする領域が広くなります。そのあたりのとっかかりになる情報を提供することが、これからGoを触る人にとってつまずきを減らすことになると思います。 Go Conferen
業務でGoプログラミングをする必要があった。過去にTerraform に貢献をしたこともあったが、ちゃんと理解しているかはとても怪しいものだ。この際しっかりと理解して生産性を高めたい。 業務では、複数の構造体が入れ子構造になったもので、頻繁に出てくるタイプのものだ。 type Team struct { Id string Challenges *[]Challenge } type Challenge struct { Id string Histories *[]History Logs []Log } type History struct { Id string } type Log struct { Message string } 大抵のインターネットのコードでは、Challenge の Histories のようにポインタ渡しになっている。どういうときに値渡しとポインタ渡しを
Getting Started Installing Go Instructions for downloading and installing Go. Tutorial: Getting started A brief Hello, World tutorial to get started. Learn a bit about Go code, tools, packages, and modules. Tutorial: Create a module A tutorial of short topics introducing functions, error handling, arrays, maps, unit testing, and compiling. Tutorial: Getting started with multi-module workspaces Int
丸山です。今年もアドベントカレンダーの季節がやってきましたね。個人的にはScalaのアドベントカレンダーと、PostgreSQLのアドベントカレンダーを楽しみにしています。 弊社も技術ブログを持っているのだから、せっかくならばアドベントカレンダーをやろうじゃないか、というわけで、これから25日まで、毎日様々な記事が書かれていきます。 ScalaやAndroid Java,SwiftやJavaScriptなど、様々なプログラミング系の話題のほかにも、弊社らしくプログラマ向けのストレッチの話など健康にまつわる話題も飛び出す予定なので、ぜひ興味のある話題のときは読んでやってください。 さて、一発目のネタはghqです。 ghqは非golangプログラマ向けにも便利なリポジトリ管理ツール ghqは、id:motemen さんが開発した、リモートリポジトリを便利にfetchしてきたり管理するためのコマ
This is the sequel to Writing An Interpreter In Go. We're picking up right where we left off and write a compiler and a virtual machine for Monkey. Runnable and tested code front and center, built from the ground up, step by step — just like before. But this time, we're going to define bytecode, compile Monkey and execute it in our very own virtual machine. It's the next step in Monkey's evolution
Writing A Compiler In Goを読みました。 本書は、Writing An Interpreter In Go(邦訳:Go言語でつくるインタプリタ)の続編で、前作で開発したプログラミング言語MonkeyのコンパイラとVirtual Machine(以下、VM)を実装する内容となっています。 本書を読む前に、2018年後半にGo言語でつくるインタプリタを読み始めました。 Lexer、Parserを実装し、抽象構文木ASTを構築して、evalする流れを、自分の手でなぞり、ちゃんと動いたときには「Monkeyちゃん」と呼び出すほどに愛着が湧いていました。 これまで「すごそうだけどよくわからない」「いつか挑戦してみたい」と思っていた言語実装を一から自分の手でできたことに感動を覚え、 「Lexerは他にも使えそうだな」と、12月にはGo2 Advent Calendar 2018
はじめに こんにちは。DSOC 研究開発部 Architect Group Data Direction Teamの有山です。 気温が上がってきて夏っぽくなってきましたね。毎年夏用にTシャツを集めるのが趣味なのですが、今年は個人的にブームが再燃してるGOODENOUGH*1を古着で集めようかなと考えています。 ところで皆さんは普段何の言語を書いていますか? Data Direction Groupでは主にPythonを使用していますが、ある時から四則演算の計算順序やif文の条件分岐はどうして正しく動くのだろうと疑問に思うようになり、実際に正しく動かしているシステムを理解してみたくなりました。色々検討した結果、「Go言語で作るインタプリタ」という本が内容的にも分量的にもちょうどよく、これを読み進めることにしました。 初めは読みながらコードを写経していましたが、複雑なロジックについては理解した
Go言語開発での makeコマンド と Makefile Go言語の開発ではmakeコマンドをタスク自動化ツールとしてよく使います。 よく使うコマンド、自動化したいタスクをMakefileに記述しておくと、開発に使う複雑なコマンドをすぐに実行したり、チームで共有出来ます。 Makefileに対して、難しいイメージを持っているかもしれませんが、超基本のMakefileの書き方はとてもシンプルなものです。 この記事の目的 Makefileの超基本がわかる Go言語開発のタスク自動化ツールとしてのMakefileの書き方がわかる 前提知識 シェルスクリプト についての知識 書き始める前の準備 EditorConfigを設定して、タブ / スペース によるインデントのトラブルに会わないようにしましょう。 公式サイトにあなたのエディタが、EditorConfigをサポートしているか、プラグインの追加
This series of blog posts is intended for those who are already familiar with the basics of Go and would like to get a deeper insight into its internals. This tutorial is dedicated to the structure of the Go source code and some internal details of the Go compiler. After reading this, you should be able to answer the following questions: What is the structure of the Go source code?How does the Go
Go言語にジェネリクスを導入するために,その形式的な議論を研究した論文「Featherweight Go」が6月頭に発表されました. せっかくなので(久々に)全訳をしながら丁寧に読んでみたので,それを簡単にまとめることにします. 可能な限りGo言語に馴染みのない人や,プログラミング言語の形式的な議論に馴染みのない人でも理解できるようにしてみます. 注意 僕は英語がとても苦手です(DeepLを駆使しても3週間かかりました) 僕はGoでアプリケーションを少し書いていますがコアについては全く詳しくありません 僕は言語の形式的な議論を院生時代にやってましたが卒業して数年経ちます なので間違ってる可能性も十分に考慮してください. TL;DR Goにジェネリクスを導入する新しいデザインを提案: インターフェースと型アサーションを駆使する方法 新デザインを形式的に議論するために FG と FGG を定義
cmd/compile contains the main packages that form the Go compiler. The compiler may be logically split in four phases, which we will briefly describe alongside the list of packages that contain their code. You may sometimes hear the terms "front-end" and "back-end" when referring to the compiler. Roughly speaking, these translate to the first two and last two phases we are going to list here. A thi
はじめに 本記事は、 DeNA Advent Calendar 2020 の 11 日目の記事です。 突然ですが、「コンパイラのコードを読んでみよう」なんて言われても、「どうせ巨大で難解で複雑なロジックを理解しないと読めないんでしょ?」と思いませんか。 コンパイラの構造を理解しようとしても聞いたことのないような専門用語がずらりと並び、コードを読もうとしたらそれらをすべて完全に理解してないと一行も理解できないんじゃないか...。Go のコンパイラ gc のソースコードを読むまでは、私もそう思っていました。 しかし、あまりにも暇な休日のある日、思い立って gc のコードを読んでみました。すると、「コンパイル」という難解な響きの処理も、一つひとつを小さなタスクに分解することで、少しずつ読み進めることができると分かったのです! 何よりも感動したことは、 gc そのものが全て Go で書かれていて、
Go 1.3+ Compiler Overhaul 共有ログインお使いのブラウザのバージョンはサポートが終了しました。 サポートされているブラウザにアップグレードしてください。閉じる ファイル編集表示ツールヘルプユーザー補助機能デバッグ
はじめに みなさんこんにちは。Sansan事業部プロダクト開発部のiOSエンジニア荒川です。 以前はRDBMSの記事*1を寄稿し、好評いただいたこともあり、定期的に車輪の再発明系の記事を書いていこうと思います。 さて本日はタイトルの通り、VimやEmacsに代表されるターミナルで動作するインラインテキストエディタをGoで開発してみました。 ソースコードは以下のリポジトリに置いているため、ぜひ参考にしてください。 github.com 完成品 文字だけだとイメージも湧きにくいので、まずは完成品をお見せします。 最低限エディタの動きは出来ている、というレベルの完成度ですね🙏 特徴 1000行インラインエディタ 文字入力/挿入/削除 画面スクロール キーボードショートカット ファイル読み込み/保存 Goのコードハイライト機能 実装の方針 今回はただ開発するだけではなく、いくつかのこだわりポイン
リリース、障害情報などのサービスのお知らせ
最新の人気エントリーの配信
処理を実行中です
j次のブックマーク
k前のブックマーク
lあとで読む
eコメント一覧を開く
oページを開く