LoginSignup
18
18

More than 5 years have passed since last update.

Goまとめ

Last updated at Posted at 2014-10-09

言語の特徴

  • 最小限の構文
    while文やdo/whileはサポートされない

  • 危険の回避
    ポインタ演算禁止
    配列の値コピー

  • 例外の排除
    try/catch構文がない
    →関数の戻り値でエラーハンドラを返す

  • クロスコンパイルのサポート
    windowsでmacのバイナリが作れちゃう
    go tool dist install -v pkg/runtime
    set GOPATH=pwd
    set GOOS=linux
    set GOARCH=amd64
    go install

  • 並行処理のサポート
    ゴルーチンとチャネルを使って簡単並列処理

基本文法

パッケージ管理システムはない、githubが直接import出来る

import (
  "fmt"
  "github.com/nabuchi/gosample"
  "strings"
)

変数の宣言(型宣言付き)

var hoge string = "hello world"

変数の宣言(型推論)

hoge := "hello world"

forの書き方4種

いつもの

for i := 0; i < 10; i++ {
  fmt.Println(i)
}

無限ループ

for {
  fmt.Println(i)
}

while風

n := 0
for n < 10 {
  fmt.Println(n)
  n++
}

Javaの拡張for文みたいな

in Java

for(String s : arr) {
  fmt.Println(s)
}

in Go

for i, s:= range arr {
  fmt.Println(s)
}

関数

  • 引数なし、返り値なし
func hello() {
  fmt.Println("hello")
}
func main() {
  hello()
}
  • 引数あり、返り値なし
func sum(i, j int) {
  fmt.Println(i+j)
}
func main() {
  sum(1, 2)
}
  • 引数あり、返り値あり
func sum(i, j int) int {
  fmt.Println(i+j)
}
func main() {
  n := sum(1, 2)
  fmt.Println(n)
}

  • 返り値に複数の値を取れる
  • エラーを返り値で返す

  • 名前付き戻り値
    →戻り値に最初から名前を付けられる

  • 無名関数

    sum := func(i, j int) {
    fmt.Println(i+j)
    }
    func main() {
    sum(1, 2)
    }

配列

マップ

ポインタ

defer

パニック

Goでも一応例外の機構がある,panic()→defer recover()

型システム

type

構造体

インターフェース

型の埋め込み

型の変換

いいところ

  • Cみたいに、実行するサーバーでコンパイル・・・みたいなことをしなくて良い
  • バイナリがかなり簡単に作れて、サーバー側にツールのインストールが不要なので、オレオレツールとか、ちょっとしたバッチプログラムとかが書きやすい
  • (まだちゃんと見れてないけど)並行処理がやりやすそう

よくないところ

  • Javaやってるとジェネリクスがなくて不安
  • ループがダサい(rubyのmapとかfindとかselectとか使いたい)

微妙なところ

  • Javaに慣れてるから、例外処理はthrowsでまとめて投げて、一番上の処理で例外毎の処理書けた方が嬉しい気がする・・・
  • 型推論は嬉しいけど、:=がなんとなく嫌・・・
18
18
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
18
18