2017-12 / 01 02 03 04 05 06 07 08 09 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31

2017-12-31 (日)

『Goならわかるシステムプログラミング』を読んだ [Book][golang]



11 月から『Real World HTTP』[2017-11-28-1] と同時に読んでいたのに、
読み終わったのが今日になってしまった。意外とボリュームあったのと、
あと少しで読み終えられたのに油断して読み進めなかったせい。


本書のもとになった ASCII.jp のウェブ連載では、この書籍(※)の内容
とかぶらないように、実用性よりも低レベルの説明にフォーカスしたとい
うのが実態です。

※『Real World HTTP』


P332 にこう書かれているように、『Real World HTTP』と一部内容が被る
ものの、低レイヤの話が大部分を占める。

一応私は組み込みエンジニア時代に open(3), ioctl(3), close(3) 等を
使ったデバイスドライバを書いたことがあるので(VxWorks だけど)、
ある程度想像力を働かせて読むことが出来た。

先の引用に書かれているとおり実用性は考慮されていないので、それを期
待すると期待はずれに終わると思う。あくまでエンジニアとしての知識を
深めるための技術書かと。

「第17章 Go言語とコンテナ」は面白そうだったので、あとで写経するかも。

以下、個人的なメモ。

P98

最近では、RESTful の究極形態(第4形態)として位置づけられる
HATEOAS という考え方も広まりつつあります。
(中略)
HATEOAS の原則に従った API を採用しているウェブサービスとしては
GitHub があります。


『Web API: The Good Parts』[2015-04-09-2] に書いてあったようだけ
ど頭に入ってなかった。Go言語は関係ない。

P285

Go言語の場合、ヒープに置くかスタックに置くかは、コンパイラが自動的
に判断します。new で作っても、その関数内でしか利用されなければスタッ
クに確保されます。ローカル変数として宣言しても、そのポインタを他の
関数に渡したり、関数の返り値として返すような場合にはヒープに置かれ
ます。そのためGo言語では、「ローカル変数のポインタを関数の返り値と
して返すと、呼んだ側からアクセスしに行ったときにはもうスタックのフ
レームが巻き戻されて無効なメモリになっており、実行時エラーで落ちる」
(中略)という C/C++ で起きるような問題は置きません。
Go言語で、メモリがスタックとヒープのどちらに確保されているかを知り
たい場合は、ビルド時に -gcflags -m を渡します。


C言語覚えたての頃、何度もハマったなあ...。

Go言語はコンパイラがだいぶ賢いね。その代償としてC言語よりはコンパ
イル時間が長いのだと思う。でも遅くないよね。

『スターティングGo言語』[2017-10-30-1] にも書いてあったかもしれな
いけど、ここまではっきり書かれていなかったかも?

2017-12 / 01 02 03 04 05 06 07 08 09 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31

最終更新時間: 2020-04-02 13:19 JST

検索


最近の話題
- 2020-04-02
  NHK Eテレのテキシコーメモ
- 2020-03-26
  terraform を再帰的に実行する Makefile
- 2020-02-25
  スレッドセーフでない Dir.chdir の使用を RuboCop で禁止する
- 2020-01-22
  『AWSの薄い本 IAMのマニアックな話』を読んだ
- 2020-01-12
  『私はどのようにしてLinuxカーネルを学んだか』を読んだ
- 2019-12-20
  circleci/orb-tools を使った Orb のリリースフローが良く出来ていたので紹介する
- 2019-12-17
  Heroku 上での bundler version の決められ方
最近追記された記事
- 2014-11-02-2 (12日前)
- 2020-01-22-1 (18日前)
- 2019-02-11-1 (192日前)
- 2019-02-03-1 (192日前)
- 2019-01-28-1 (192日前)
- 2019-02-03-1 (234日前)
- 2018-11-28-1 (248日前)
- 2019-05-07-1 (328日前)
- 2018-04-30-1 (343日前)
- 2018-01-28-1 (355日前)
カテゴリ
- Anthy (3)
- Apache (11)
- Apple (1)
- ATOK (4)
- au (3)
- AWS (24)
- Bazaar (1)
- Berkshelf (2)
- BigQuery (1)
- BitBar (4)
- Book (109)
- Boxen (2)
- Bugsnag (1)
- capistrano (4)
- chalow (57)
- ChatWork (1)
- Chef (17)
- Chrome (3)
- Chromecast (1)
- CircleCI (11)
- clang (26)
- Comics (2)
- Cooking (10)
- cvs (15)
- cygwin (12)
- D3.js (1)
- Debian (55)
- Docker (4)
- E-mail (9)
- elasticsearch (4)
- Emacs (223)
- Emacs講座 (10)
- English (4)
- feedforce (7)
- fetchmail (3)
- Firefox (20)
- Fluentd (4)
- ftp (2)
- Game (21)
- GCP (1)
- Gem (5)
- Git (9)
- GitHub (23)
- golang (11)
- Google (1)
- gpg (4)
- GrowthForecast (7)
- Health (6)
- Heroku (21)
- Homebrew (10)
- HTML (6)
- iBook (1)
- iPad (1)
- iPhone (17)
- IRC (1)
- Jenkins (8)
- JS (1)
- Karabiner (1)
- KeySnail (3)
- Kibana (1)
- Kindle (1)
- Kubernetes (2)
- Langrich (7)
- LDAP (6)
- Life (24)
- Linux (7)
- Mackerel (1)
- macOS (1)
- Mew (18)
- MongoDB (1)
- Mozilla (19)
- Music (1)
- MySQL (1)
- NAS (4)
- nginx (6)
- NHK (1)
- Node (1)
- ntp (4)
- OOP (2)
- OpenID (2)
- openssl (1)
- Opera (2)
- OSX (41)
- Perl (14)
- PHP (19)
- PostgreSQL (1)
- procmail (4)
- Programing (3)
- Puppet (1)
- Python (2)
- Rails (13)
- Rake (2)
- RaspberryPi (2)
- Redash (1)
- RedHat (29)
- Redmine (3)
- RSpec (2)
- Ruby (54)
- samba (3)
- screen (7)
- sed (5)
- serverspec (6)
- sh (8)
- Slack (2)
- Solaris9 (22)
- Spring (2)
- ssh (4)
- StatusNet (21)
- svn (12)
- Swift (1)
- Tablet (1)
- tdiary (3)
- Terraform (3)
- Twitter (15)
- Twmode (6)
- Ubuntu (5)
- UNIX (102)
- vagrant (8)
- Video (21)
- vim (1)
- Wercker (9)
- Windows (29)
- Wine (3)
- XML (11)
- XP (1)
- zsh (26)
- インストールメモ (33)
- クイックシェイプ (12)
- ネタ (15)
- 勉強会 (17)
- 携帯 (6)
- 正規表現 (4)
過去ログ
2020 : 01 02 03 04 05 06 07 08 09 10 11 12
2019 : 01 02 03 04 05 06 07 08 09 10 11 12
2018 : 01 02 03 04 05 06 07 08 09 10 11 12
2017 : 01 02 03 04 05 06 07 08 09 10 11 12
2016 : 01 02 03 04 05 06 07 08 09 10 11 12
2015 : 01 02 03 04 05 06 07 08 09 10 11 12
2014 : 01 02 03 04 05 06 07 08 09 10 11 12
2013 : 01 02 03 04 05 06 07 08 09 10 11 12
2012 : 01 02 03 04 05 06 07 08 09 10 11 12
2011 : 01 02 03 04 05 06 07 08 09 10 11 12
2010 : 01 02 03 04 05 06 07 08 09 10 11 12
2009 : 01 02 03 04 05 06 07 08 09 10 11 12
2008 : 01 02 03 04 05 06 07 08 09 10 11 12
2007 : 01 02 03 04 05 06 07 08 09 10 11 12
2006 : 01 02 03 04 05 06 07 08 09 10 11 12
2005 : 01 02 03 04 05 06 07 08 09 10 11 12
2004 : 01 02 03 04 05 06 07 08 09 10 11 12
2003 : 01 02 03 04 05 06 07 08 09 10 11 12
2002 : 01 02 03 04 05 06 07 08 09 10 11 12
2001 : 01 02 03 04 05 06 07 08 09 10 11 12