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-10-31 14:59 JST

検索


最近の話題
- 2020-10-30
  CircleCI の旧 UI で設定した Slack Integration の設定を確認も変更も削除もできない件への対応方法
- 2020-09-03
  Looker User Meetup in Tokyo #4(BEACON Japan 前夜祭)に参加した #lookermeetup
- 2020-09-02
  CircleCI の orb を fork して PR を送る前の動作確認方法
- 2020-08-21
  テレビ用に HDMI 切替器を買った
- 2020-08-16
  Emacs-27.1 がリリースされたので elscreen.el を tab-bar.el に移行した
- 2020-08-14
  Chromecast を第1世代から第3世代に買い替えた
- 2020-07-24
  何年も続いている私の Emacs パッケージ管理方法
最近追記された記事
- 2014-11-02-2 (224日前)
- 2020-01-22-1 (230日前)
- 2019-02-11-1 (404日前)
- 2019-02-03-1 (404日前)
- 2019-01-28-1 (404日前)
- 2019-02-03-1 (446日前)
- 2018-11-28-1 (460日前)
- 2019-05-07-1 (540日前)
- 2018-04-30-1 (555日前)
- 2018-01-28-1 (567日前)
カテゴリ
- Android (2)
- 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 (13)
- clang (26)
- Comics (2)
- Cooking (10)
- cvs (15)
- cygwin (12)
- D3.js (1)
- Debian (55)
- Docker (5)
- E-mail (9)
- elasticsearch (4)
- Emacs (225)
- 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 (7)
- Heroku (21)
- Homebrew (10)
- HTML (6)
- iBook (1)
- iOS (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 (4)
- 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)
- 勉強会 (19)
- 携帯 (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