Skip to content

Instantly share code, notes, and snippets.

@evalphobia
Last active August 29, 2015 14:10
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save evalphobia/5f040b4a5b6bd4ca6fa8 to your computer and use it in GitHub Desktop.
Save evalphobia/5f040b4a5b6bd4ca6fa8 to your computer and use it in GitHub Desktop.
Learning Go を読み進める

Ch.1 イントロダクション

  • Goとは
  • v1 が最初の安定版(現在はv1.3)
  • 公式ドキュメント
% go doc builtin

Hello World

package main // 0
import "fmt" // Implements formatted I/O. // 1

/* Print something */ // 2
func main(){ // 3
  fmt.Printf("Hello, world; or こんにちは世界") // 4
}
    1. package main は実行ファイルに必要
    1. mainfmt を追加。 main以外のパッケージはライブラリと呼ばれる。他の言語でいうところのライブラリと同一概念でおk。行末には//で開始されたコメントがある
    1. /* */これもコメント
    1. Goではまず最初にpackageがきて、次にimport、そして他のものが続く。Goのプログラムが実行されると、C言語みたいに最初にmain.main()が呼ばれる。
    1. ここでは、文字列を表示させる、パッケージfmtの関数を呼んでいる。文字列は " で囲まれ、非ASCII文字を使うことも出来る。

コンパイルと実行

% go build helloworld.go
% ./helloworld

本書での設定

  • Goは ~/go にインストールされていること。 $GOROOTGOROOT=~/go に設定されていること・
  • コンパイルしたいGoのソースコードは ~/g/src に置かれており、 $GOPATHGOPATH=~/g に設定されていること。この変数はパッケージを使う場面(第三章)で使用されます。

変数、型、キーワード

;セミコロンは不要。2個以上の式を一行に記述する場合はセミコロンで区切る必要あり。

Goの変数は変数名の後に型がくる。 int a ではなく a intが正しい。 変数が宣言されると、型にふさわしい空の値が格納される。var a int0が格納され、var a stringでは空文字列''が格納される。

Goでの宣言と代入は2段階に分かれているが、1つにすることもできる。

var a int
var b bool
a = 15
b - false
a := 15
b := false

:= を使って代入すれば、宣言しなくても自動的に型の類推が行われる。 15は整数値int、falseは真偽値と判定される。

複数の変数を宣言する場合は丸カッコ(パーレン)を使う。 変数以外にも、定数やimportでも複数使用可能。

var (
    x int
    b bool
)

型が同じ場合は、一行で同時に代入可能

a, b := 20, 16 // a=20; b=16;

変数名がアンダースコア_は特殊な変数で、どんな値が代入されても無視される。 次の例では、34は無視され、35だけ代入される

_, b := 34, 35 // b=35

Goでは未使用の変数が存在すると、コンパイル時にエラーが発生する。

package main func main() {
    var i int
}

Boolean(真偽値)

Boolean型は予約済み定数のtrue, falseを表します。 bool のみ存在します。

Numeral(数値)

intは実行環境によって長さが変わります。(uintも同様です) 32bit環境では32bit、64bit環境では64bitの長さになります。

int8, int16, int32, int64, byte, uint8, uint16, uint32, uint64

byteuint8のエイリアスです。

浮動小数点にはfloat32, float64があるが、floatという型は存在しない。 int系、float系は64bit環境では必ず64bitになり、32bit環境では必ず32bitになる。

注意点として、これらの型は全て、全然別のものなので、 代入時にこれらの型を組み合わせると、下記のようにコンパイルエラーが発生します。

package main

func main() {
    var a int    // 通常のintger型 
    var b int32  // 32bit integer型
    a = 15
    b = a + a    // 型違反となってしまう
    b = b + 5    // 5は定数なので大丈夫
    
}

これだと7行目でエラーが発生してしまう。

types.go:7: cannot use a + a (type int) as type int32 in assignment

代入する数値は8進数、16進数、指数表記でも可能です。 077, 0xFF, 1e3, 6.022e23 これらは全て有効な数値です。

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment