Open14

GO

melsmels

goについて

go言語を始めようと思います
ネットワークからos、モバイルなどgoで出来ることはとっても広いです
初学からどこまで行けるかがんばります^^

melsmels

関数について

関数はpythonみたいな感じがします...触ったことないけど..
戻り地などは珍しく関数名の後に記述するタイプ

func add() (int){
    x := 1
    y := 2
    return x + y
}

面白いことに変数名と戻り地が同じ場合は暗黙的に返却される

func ret() (x,y int){ //ちなこれも暗黙的に初期化される var x int = 0 var y int 0
    x = 1
    y = 2
    return //暗黙的に返却される
}

あっ こんな感じにすればファイルのエラーチェックできますよー

func file_check() error { //errorという方があるらしいstring
	path := os.Args[1]
	fileInfo, err := os.Stat(path) //Statでfile情報を取得
	if err != nil {
		return err //存在しないとき
	}
	if fileInfo.IsDir(){ //fileinfoがディレクトリなら
		fmt.Printf("%s is a directory\n",path)
	}
	return nil
}

melsmels

コマンドライン引数について

自動的にargsにれられる cも一緒

os.Args
len(os.Args) //cで言うargc
os.Args[1] //1個目
melsmels

statとopenの違い

特徴 Head Head
エラー 存在しない、権限なし、パス不正など 存在しない権限なし、ロック中など
リソース ファイルハンドルを開かない ファイルハンドルを開く(Close()必須)
melsmels

エラー文の返却

戻り地について CPPのtry chatchみたいな感じ

import(
"errors"
)
//戻り値はerror
return errors.New("エラーメッセージ")

fmt.Println("error: %v" error)//戻り値
melsmels

deferについて

これは動作の前に記述します

defer inputFile.close() //ファイルが閉じる処理を遅延実行する

バッファのクリーンなどでとても使えるもの。

melsmels

権限に関しては実行エラーを見たほうが良い

file.Mode()関数があるあが、一般的ではない。むしろ実行エラーの際に返すと良い

melsmels

goの常識

・パッケージは一個しか宣言できない
・グローバル変数は暗黙的な宣言だと使用できない ※明示的な場合は可能
・明示的と暗黙的(環境依存)のint型は、同じ型だとしても計算は不可能
・%Tは型表示

・要素の自動カウント[...]

arr := [...]string{"A","B"}

・同じ要素は配列ごと代入できる
・interface型は演算などはできない、けど色んな値が入る
・大文字か小文字かでprivateかpublicを分離できる 大文字の場合別のパッケージから読み込める
・変数は型を超えて宣言できない、だが定数の場合は超えて宣言が可能
・iotaは連番を生成 コンパイル時に決まるためケースバイケース
・runeは一文字や記号を表すのに使われる型

melsmels

同時宣言時の初期化について

const (
    A = 1
    B
    C
    D = "A"
    E
    F
)

この場合のBCは1で初期化される EFは”A”で初期化される

melsmels

Goのルール

変数名は短いほうがいい
requestはreqなど ※別の場所で使用する場合はわかりやすく説明もつける必要がある。

melsmels

無名関数と関数について

無名関数は変数に代入する形で使うことができる

f := func(x,y int) int {
    return x + y
}

fmt.Println(f(1,2)) // 3
melsmels

goのconstは優秀

固定値なので、算術演算を許されないが

const (
    a = 1
    b = 9223372036854775807 + 1 // unist64を超える数値でも定義可能
    c = iota + 10 //iotaが使える
)

だが

const(
       d int 32 = 4294967295 + 1  //型の範囲を超えるためエラー
        e []int    = []int{1,2,3} //配列やスライスはエラー
        f  map[string]int = map[string]int{ //mapもエラー
            "tokyo": 10
    }
)
melsmels

typeとは

めちゃくちゃいいねこれ 自分で型を作れちゃう

type Myint = int

var num1 Myint = 10
var num2 int = 10
result := a + b //同じ型なので計算可能
fmt.Println(result)
melsmels

初期化しなくても型が使える

intは0
stringは""
boolはfalse
errorはnil