サーバー作りたいのでGo
で書いてみる
まずはGo
の基本的な書き方を確認
実行
.go
のあるフォルダでコマンド実行
go run .
エントリーポイント
main
関数がGo
のエントリーポイントとなる
package main
import "fmt"
func main() {
fmt.Println("hello world")
}
パッケージ
標準ライブラリをパッケージとして読み込んで使う(多分)
Standard libraryに色々載ってる
import "fmt"
複数を読み込むときの書き方
// 一つずつ宣言しても良い
import "fmt"
import "reflect"
import (
"fmt"
"reflect"
)
数値型
var num int
num = 1
num1 := 1
num2 := 123
var num3 int = 12345678
浮動小数点
num4 := 1.23
var num5 float64 = 1.2233
// データ型を確認
fmt.Println(reflect.TypeOf((num5)))
文字列
var string1 string = "hello"
string2 := "good morning"
Boolean
a := 10
b := 1
var num_bool bool = a > b
配列
arry := [3]string{"Tom", "Ken", "Mary"}
arry[1] = "Jim"
// 省略記法
arryB := [...]string{"Tom", "Ken", "Mary"}
fmt.Println(arryB[0])
// 2次元配列
arryC := [2][2]string{{"1", "2"}, {"3", "4"}}
fmt.Println(arryC[0][0])
fmt.Println(arryC[0][1])
fmt.Println(reflect.TypeOf(arryC))
if 文
age := 5
if age >= 2 {
fmt.Println("adult")
} else if age == 0 {
fmt.Println(("baby"))
} else {
fmt.Println(("child"))
}
// 簡易文を使ったifステートメント(セミコロンで区切る)
if age := 30; age >= 20 {
fmt.Println("adult")
} else if age == 0 {
fmt.Println(("baby"))
} else {
fmt.Println(("child"))
}
for 文
for文しかないらしい
// for文1
for i := 0; i <= 4; i++ {
fmt.Println(i)
}
// for文2
i := 0
for i <= 4 {
fmt.Println(i)
i++
}
// for文3
i := 0
for {
fmt.Println(i)
if i == 4 {
break
}
i++
}
関数
// 引数なし
func sayHello() {
fmt.Println("hello")
}
// 引数あり
func sayHello(greeting string) {
fmt.Println(greeting)
}
// 引数が同じデータ型の場合は省略できる
// func cal(x int, y int) {
func cal(x, y int) {
fmt.Println(x * y)
}
// 戻り値があれば戻り値の型も必要
func cal2(x, y int) int {
return x * y
}
// Pythonのように戻り値を複数返せる
func cal3(x, y int) (int, int) {
return (x / y), (x * y)
}
func cal4(x, y int) (int, int) {
a := x / y
b := x * y
return a, b
}
// 戻り値を宣言している場合、returnの引数は省略可能
func cal5(x, y int) (a int, b int) {
a = x / y
b = x * y
return
}
func main() {
// 無名関数 jsの即時関数みたいな書き方
func(greeting string) {
fmt.Println(greeting)
}("hello")
}
構造体
Go
にクラスはない
// 構造体
type Person struct {
name string
age int
}
func main() {
// 構造体の初期化
var person Person
person.name = "Tom"
person.age = 20
fmt.Println((person))
// 構造体の初期化2
person2 := Person{"Ken", 15} // 順不同
fmt.Println((person2))
// 構造体の初期化3 フィールド名の指定
person3 := Person{name: "Foo", age: 30}
fmt.Println((person3))
}
メソッドの定義
type Student struct {
name string
age int
}
// 構造体にメソッドを定義
func (s Student) printName() {
fmt.Println(s.name)
}
func main() {
student := Student{name: "Make", age: 10}
student.printName() // Make
}