##概要
「処理が速い」「並行処理」が得意ということから、
今後大規模webサービスなどで重宝されると思いましたので、
学習していきたいと思います。
##参考サイト
以下を実施してみました。
##環境
GoogleChrome
※ブラウザ操作だけで学習できるため、エディタを用意する必要がありません。
※CentOS8へのGoインストール手順です。よろしければ、ご活用ください。
CentOS8へのGo言語インストール手順
##基本操作
Hello Worldの実行手順です。
##基本的な書き方
Packages, variables, and functions.
Go プログラムの基本的なコンポーネントを学びます。
- 「package main」から始まる。
すべてはここから始まる
- 関数について
引数に設定する関数には、型名を書く必要がある
//xとyが該当
func add(x int, y int) int {
return x + y
}
ただし、関数の2つ以上の引数が同じ型である場合には、最後の型を残して省略して記述できる。
//xとyが該当
func add(x, y int) int {
return x + y
}
- 関数は複数の戻り値を返すことができる
package main
import "fmt"
//関数側
func swap(x, y string) (string, string) {
return y, x
}
//呼び出す側
func main() {
a, b := swap("hello", "world")
fmt.Println(a, b)
}
//実行
go run func.go
//実行結果
world hello
- 戻り値となる変数に名前をつける
戻り値となる変数に名前をつけることができる。
戻り値に名前をつけると、関数の最初で定義した変数名として扱われます。
名前をつけた戻り値の変数を使うと、
return ステートメントに何も書かずに戻すことができる。
※長い関数で使うと読みやすさ( readability )に悪影響があるため、
注意が必要。
package main
import "fmt"
//(x, y int)の部分が名前付き変数
func split(sum int) (x, y int) {
x = sum * 4 / 9
y = sum - x
return
}
func main() {
fmt.Println(split(17))
}
//実行
go run returnValueName.go
//実行結果
7 10
##変数
- 変数の宣言
「var」ステートメントで変数の宣言を行う。
パッケージ、または、関数で利用できる。
package main
import "fmt"
//グローバルに宣言 ※boolが型
var c, python, java bool
func main() {
var i int
fmt.Println(i, c, python, java)
}
//実行
go run var.go
//実行結果
0 false false false
- 変数に初期値を与える
初期値が与えられている場合、型を省略できる。
その変数は初期値が持つ型になります。
※例: 数字->int , 文字列->stringなど
package main
import "fmt"
var i, j int = 1, 2
func main() {
//c->bool ,python->bool ,java->string
var c, python, java = true, false, "no!"
fmt.Println(i, j, c, python, java)
}
//実行
go run giveVarInitialValue.go
//実行結果
1 2 true false no!
- 変数の宣言を省略
関数の中では、 var 宣言の代わりに、短い := の代入文を使い、
暗黙的な型宣言ができる。
###※関数の外では、キーワードではじまる宣言( var, func, など)が必要で、 := での暗黙的な宣言は利用できない。
package main
import "fmt"
func main() {
var i, j int = 1, 2
//暗黙的宣言
k := 3
c, python, java := true, false, "no!"
fmt.Println(i, j, k, c, python, java)
}
//実行
go run varDeclarationOmitted.go
//実行結果
1 2 3 true false no!
- 基本の型
次のとおりです。
//型の紹介のみ
bool
string
int int8 int16 int32 int64
uint uint8 uint16 uint32 uint64 uintptr
byte // uint8 の別名
rune // int32 の別名
// Unicode のコードポイントを表す
float32 float64
complex64 complex128
- 変数に初期値を与えずに宣言
その場合、ゼロ値が与えられます。
ゼロ値は型によって以下のように与えられる。
数値型(int,floatなど): 0
bool型: false
string型: "" (空文字列( empty string ))
package main
import "fmt"
func main() {
var i int
var f float64
var b bool
var s string
fmt.Printf("%v %v %v %q\n", i, f, b, s)
}
//実行
go run go:varNoInitialVal.go
//実行結果
0 0 false ""
- 型変換
少数点→整数の変換について
※数値から文字列への変換に関しては、また別処理が必要。。
golang 文字列→数値、数値→文字列変換
package main
import (
"fmt"
"math"
)
func main() {
var x, y int = 3, 4
var f float64 = math.Sqrt(float64(x*x + y*y))
var z uint = uint(f)
fmt.Println(x, y, z)
}
//実行
go run typeConv.go
//実行結果
3 4 5
- 型推論
明示的な型を指定せずに変数を宣言する場合( := や var = のいずれか)、
変数の型は右側の変数から型推論される。
※右側の変数が型を持っている場合、左側の新しい変数は同じ型になる。
// i はint型のため、vもint型になる。
package main
import "fmt"
var i int
func main() {
v := i
fmt.Printf("v is of type %T\n", v)
}
//実行
go run typeInference.go
//実行結果
v is of type int
##定数
定数は、 constを使って変数と同じように宣言する。
定数は、文字(character)、文字列(string)、boolean、数値(numeric)のみで使える。
※定数は := を使って宣言できない。
package main
import "fmt"
const Pi = 3.14
func main() {
const World string = "世界"
fmt.Println("Hello", World)
fmt.Println("Happy", Pi, "Day")
const Truth = true
fmt.Println("Go rules?", Truth)
}
//実行
go run constant.go
//実行結果
Hello 世界
Happy 3.14 Day
Go rules? true
##まとめ
基本的なところをみていきました。
次回は、「For」や「if」といったところをみていきます。