#はじめに
####Golang又はGo言語 とは
・コンパイル言語の中でも特に処理が高速
・2009年にGoogle開発された
・シンプルな構文
・コードの可読性が高い
・初心者はpythonやphpやRubyからのが良い
勉強中なので間違っていたら教えてください。
##開発環境
Visual Studio Code
Mac
##Goのインストール
ターミナルで実行してください
1. homebrewを最新にします
$ brew update
2. Goのインストール
$ brew install go
3. Goがインストールされたか確認バージョンが返ってくればOK
$ go version
###プログラムの基本構造
###順次進行
上から順に処理していく
###条件分岐
特定の条件の時にAかBなどに分岐する
###繰り返し
決まった回数や条件に当てはまる間は繰り返す
###Goの記述方法
package main ←Goのプログラムは1つはmainに属している必要がある
import ("fmt") ←fmtパッケージをインストールしてる
func main(){ ←関数を記述 mainからスタートする
fmt.Println("hello") ←これはfmtパッケージを用いてhelloを表示する
} 波かっこ内はブロックという
Goのプログラムはなんらかのパッケージに属している必要があります
実行するにはターミナルに
$ go run ファイル名.go
上記の例だと
$ go run test.go と記述
これでhelloが表示されます。
###変数の宣言仕方
package main
func main(){
var num int ←(var 変数名 型)
num = 1 ←1を代入
fmt.Println(num)
}
実行すると1が表示される
宣言の省略すると
package main
func main(){
num := 1 ←宣言の省略書き方
↑は var num int ←(var 変数名 型)
num = 1 この2行と一緒
fmt.Println(num)
}
実行すると1が表示される
###Goのデータ型
int 整数
float64 小数
string 文字列
bool turnかfalseが入る
###配列の宣言
変数 := [要素数]データ型{データ1、データ2、...}
package main
func main(){
a := [3]string{"sasa","sumika","takako"} ←配列の宣言
fmt.Println(a[0])
fmt.Println(a[1])
fmt.Println(a[2])
}
実行すると
こうなります
sasa
sumika
takako
配列の要素数の省略、変更
package main
func main(){
a := [...]string{"sasa","sumika","takako"} ←配列の宣言[...]で要素数を省略できる
a[0] = "aki"
fmt.Println(a[0])
fmt.Println(a[1])
fmt.Println(a[2])
}
実行するとsasaがakiに変更されています
aki
sumika
takako
###条件分岐
package main
func main(){
if a := 0 ; a >= 20{
fmt.Println("20以上")
} else if a == 0{
fmt.Println("0です")
} else {
fmt.Println("条件以外")
}
実行すると以下が表示されます。
0です
###繰り返しfor
for 変数 := 初期値; 条件; 増減式{}
package main
func main(){
for i := 0; i<=4; i++ {
fmt.Println(i)
}
実行すると以下が表示されます。
0
1
2
3
4
###関数定義
func 関数名(引数の定義なくても良い){
retuen ←戻り値がいるなら
}
package main
func say(){ ←引数なし
fmt.Println("hello")
}
func say1(say string){ ←引数あり (変数 データ型)
fmt.Println(say)
}
func say2(x,y int) int { ←引数戻り値1つあり (変数 データ型) 戻り値のデータ型{
return (x+y)
}
func say3(x,y int) (int, int) { ←引数戻り値2つあり (変数 データ型) 戻り値のデータ型{
return (x+y), (x-y)
}
func main(){
say() ←引数なし
say1("hi") ←引数あり
result := say2(5,3) ←引数戻り値1つあり
fmt.Println(result)
result2, result3 := say3(5,2) ←引数戻り値2つあり
fmt.Println(result2, result3)
}
実行すると以下が表示されます。
hello
hi
8
7 3
###構造体を定義
type 構造体名 struct {
フィールド
}
package main
type Dog struct { ←構造体
name string
age int
}
func main(){
var s Dog ←構造体の初期化 (var 変数名 構造体名)
s.name = "poko"
s.age = 5
省略バージョン上記と同じ意味
s := Dog{"poko",5}
一部部分に代入
s := Dog{name: "poko}
又は
s := Dog{age: 5}
fmt.Println(s)
}
実行すると以下が表示されます。
{ poko 5 }
###メソッド
package main
type Dog struct { ←構造体
name string
age int
}
func (s Dog) aa() { ←メソッドと構造体を関連付け (変数 構造体名) 変数() {
fmt.Println(s.name,s.age)
} こうする事で、構造体にアクセスできるようになる。
s.nameは構造体Dogのnameにアクセスして情報を取得できる
func (s Dog) aa2(name string, age int) { ←引数あり
fmt.Println(name,age)
}
func (s Dog) aa3(age int) int { ←引数あり戻り値あり
return age*2
func main(){
a1 := Dog{"poko",5}
a1.aa() ←引数なし
a1.aa2("domu",6) ←引数あり
result := a1.aa3(2) ←引数あり戻り値あり
fmt.Println(result)
}
実行すると以下が表示されます。
poko 5
domu 6
4