関数を引数にとる関数 func CallFunction(f func()){ f() } func main() { CallFunction(func(){ fmt.Println('call function') )}
関数を返す関数 func ReturnFunc() func() { return func() { fmt.Println('function') } } func main() { f:= ReturnFunc() f() }
無名関数 func main() { f := func(x, y int) int { return x + y } i := f(1, 2) fmt.Println(i) i2 := func(x,y int) int { return x + y }(1,2) fmt.Println(i2) }
関数 func Plus( x int, y int) int { return x + y } func Div (x, y int) {int, int} { q := x / y r := x % y return q, r } func main(){ i := Plus(1,2) fmt.Println(i) } returnで返し、戻り値の型等を指定しなければ戻り値なしになる
論理演算子 かつ && または ||
比較演算子 同じかどうか? == 違うかどうか? != 以上かどうか? <= 以下かどうか? >= 大きいかどうか? < 小さいかどうか? >
算術演算子 足し算 + 例 1 + 2 "ABC" + "DE" 引き算 - 例 5 - 1 掛け算 * 例 5 * 4 割り算 / 例 60 / 3 剰余 % 例 9 % 4
定数 const 定数名 = 値 例 定数名の最初が大文字だと他のパッケージからも呼び出せる const Pi = 3.14 定数名の最初が小文字だと他のパッケージから呼び出せない const pi = 3.14
Dockerfile イメージの指定 FROM ホストからファイルをイメージにコピー COPY シェルコマンドを実行 RUN
Dockerfile Docker Image Docker Container イメージ Dockerfile UMLのクラス図のイメージ Docker Image クラス(設計書)のイメージ Docker Container インスタンス(実体)のイメージ
dockerコマンド DockerRegistryからイメージをダウンロード docker pull イメージ名 コンテナをイメージから起動 docker run -p ポート番号 イメージ名 起動中のコンテナの一覧を表示 docker ps コンテナを停止 docker stop コンテナID 停止中のコンテナも全…
型変換 数値型を浮動小数点型へ var i int = 1 fl64 := float64(i) 浮動小数点型から数値型へ i2 := int(fl64) 浮動小数点型から数値型へ型変換すると小数点以下が切り捨てになる 文字列型から数値型へ var s string = "100" i := strconv.Atoi(s) 数値型か…
interface型 var 変数名 interface {} {}に何も書かないと初期値はnil あらゆる型を代入することができる 演算はできない
配列型 var 変数名 [要素数] 型 例 var arr1 [3]int 値を持たせて定義 var arr2 [要素数] 型 = [要素数] 型{値} 例 var arr2 [3]string = [3]string{"A", "B", "C"} intの初期値は0 stringの初期値は空文字 省略形 arr3 := [3]int{1, 2, 3} 可変長 arr4 := […
byte(uint8)型 変数名 := []byte{値} byte型をstring型に変換 string(変数名) string型をbyte型に変換 []byte(値)
string型 文字列型 var 変数名 string = 値 例 var s stirng = "Go"
bool型 論理値型 var 変数名 bool = true or false 例 var t bool = true var f bool = false
float型 浮動小数点型 var 変数名 float64 = 値 以下の暗黙的変換では環境依存ではなくfloat64になる 変数名 := 値 以下のようにfloat32を指定できるが基本的にあまり使われない var 変数名 float32 = 値
型の調べ方 fmt.Printf("%T \n", 変数) 例 var i int64 = 100 fmt.Printf("%T \n", i)
int型 整数型 var i int = 100 上記の場合はPCの環境依存のバイト 以下のように明示的に指定することが可能 int8 int16 int32 int64 以下の場合は同じバイトでもエラーになる fmt.PrintIn(i + iを明示的にバイトを指定したもの)
暗黙的な変数定義 変数名 := 値 i := 100 再定義はできない i := 200 違う型を入れることもできない i = "GO" 暗黙的な変数定義は関数以外では使用不可
変数の明示的な定義 var 変数名 型 = 値 例 var i int = 100 var s string = "Hello Go" 同じ型をまとめて定義 var 変数名1, 変数名2 型 = 値1, 値2 違う型をまとめて定義 var ( i2 int = 200 s2 string = "Hello Go2" ) 型だけで値を定義しない場合 var i3 …
Hello World出力 package main import "fmt" func main() { fmt.PrintIn("Hello World") } ターミナルでgo run ファイル名
分割代入 let a, b, rest; [a, b ] = [10, 20]; console.log(a); #=> 10 console.log(b); #=> 20
スプレット構文 function sum(x, y, z) { return x + y + z; } const numbers = [1, 2, 3]; sum(...nubers);
テンプレート構文 let name = 'sai'; テンプレート構文なし console.log('はじめまして' + name + 'です。'); テンプレート構文 console.log(`はじまして${name}です。`);
implements クラスに対してinterfaceの条件を適用 interface Human { name: string; age: number; greeting(message: string): void; } class Developer implements Human { constructor(public name: string, pulic age: number) greeting(message: string)…
メソッドをオブジェクトの型に指定する方法 interface Human { name: string; age: number; greeting(message: string): void; } const human = { name: 'Quill', age: 38, greeting(message: string) { console.log(message); } }
interface インターフェイスの特徴はオブジェクトのみ取り扱うこと interface Human { name: string; age: number; } const human: Human = { name: 'Quill', age: 38 } let developer: Human;
Abstractクラスを使用して継承のみ使えるクラスを作成 Abstractクラスはインスタンス化はできない abstract class 継承のみ使える親クラス{ constructor(){ } abstract 関数名() : タイプ型; } class 継承先 extends 継承のみ使える親クラス { abstractで書…