14章リフレクション、unsafecgo

「世界の果て」は怖いものです。古代の地図では、未踏の地をドラゴンやライオンの絵で埋めていました。さて、これまでの章ではGoが安全な言語であることを強調してきました。型付きの変数でデータの種類を明示し、ガベージコレクションによってメモリを管理します。ポインタでさえきちんと管理されており、CやC++のような変則的な使い方はできません。

開発者が書くGoコードの大部分においては、Goのランタイムが開発者を守ってくれます。しかし、「脱出用ハッチ」はあります。ときには微妙な領域に踏み込む必要があるかもしれないのです。

この章では、通常のGoのコードでは解決できないような状況に対処する方法を見ていきましょう。次の3つのツールを使います。

  • パッケージreflect——データの型がコンパイル時に決定できない場合
  • パッケージunsafe——データがメモリ上にどうレイアウトされるかを意識して何かを行う必要がある場合
  • cgo——C言語で書かれたライブラリを使いたい場合

このようなある意味高度なテクニックを、初めてGo言語を使う人が読むかもしれない本に掲載する意味があるのか、疑問に思う人がいるかもしれません。筆者が取り上げることにした理由は次の2つです。

  • 問題の解決策を探している開発者が、よく理解していない技術を発見(コピー・ペースト)することがあります。問題を引き起こす可能性のある高度な技術については、コードに追加する前に少しでも知っておいたほうがよいでしょう
  • どのツールも面白いことを実現してくれます。通常のGoではできないことができるので、これを使って何ができるかを考えるだけでもワクワクしてきます

14.1 リフレクション

Go言語について、静的に型付けされているという点が気に入っている開発者は少なくないでしょう。Goで変数や型、関数を宣言するのは基本的に単純明快で、型、変数、関数が必要なときに、それを定義すればよいのです( ...

Get 初めてのGo言語 ―他言語プログラマーのためのイディオマティックGo実践ガイド now with the O’Reilly learning platform.

O’Reilly members experience books, live events, courses curated by job role, and more from O’Reilly and nearly 200 top publishers.