package main
import "fmt"
func main(){
fmt.Println("Hello Go!")
}
これで
$ Hello Go!
できる。
ABCを解く事を目標としたレベルの内容であり、厳密に学びたい場合はA Tour of Goとかでやってください。
冒頭で書いたhelloで察しはつくかもしれないが、ABCを解く程度なら基本的に
package main
import "fmt"
func main(){
// 必要な処理
}
この形はあまり変わらないだろう。
ABCを解く上では深く考える必要は無いが、Goのプログラムはパッケージから構成される。
ここで書いたコードは、fmt
パッケージをインポートしている。
これは書式入出力に用いられるパッケージだと思って良い。
もし他にもパッケージをインポートしたい場合は
import (
"fmt"
"math"
"hoge"
"fuga"
)
といった感じで追加出来る。
外部パッケージの関数を使う際は、最初の文字を大文字にする
Goでは変数、関数の宣言時、型の指定は名前の後で行う。
func add(a int, b int) {
return a + y
}
func main() {
var a int = 2
var b int = 3
var sum int = add(a, b)
}
var
で変数を定義、名前をつけて型も決める。
上のコードは簡略化出来る
func add(a, b int) {
return a + b
}
func main() {
var a, b int = 2, 3
var sum = add(a, b)
fmt.Println(sum)
}
同じ型の宣言はまとめられる 変数の宣言はさらに簡略化できて
var a, b = 2, 3
で良い。初期化した場合は型を省略できる。
更に
a, b := 2, 3
にもできる
整数
int // 32bit環境では32bit、64bit環境では64bit
int64 // 64bit
uint // 符号なしint
uint64 // 符号なし64bit整数
浮動小数点数
float32 // 32bit
float64 // 64bit
文字列
string
var a float64 = 4.5
var b int = int(a) // 型()でキャスト
fmt.Println(a) // 4
- %d
- 10進数
- %f
- 指数なし少数
- %s
- 文字列
var array [5]int
primes := [6]int {2, 3, 5, 7, 11, 13}
みたいなの
配列とちがって可変長。配列への参照のようなもの。スライスに対する操作は配列にも反映される。
primes := [6]int{2, 3, 5, 7, 11, 13} // これは配列
var s[]int = primes[1:4] // primesの要素1~3
cに似ている
for i := 0; i < 10; i++ {
sum += 1
}
みたいに書く。
初期化と後処理はしなくても良い
for ; ratio < 100;{
ratio += pt
}
とか
while文はない。forでできるから。
for sum < 100{ // セミコロンも省略できる
sum += a
}
cに似てる。forと同じく()
は不要
if a > 0 {
hoge
}
if文でもforみたいに評価前に処理ができる
if sum := a + b + c; sum > 3 {
return sum
}
みたいに書ける elseは
if sum := a + b + c; sum > 3 {
return sum
} else if sum == 3 {
return 1
} else {
return 0
}
みたいなの
Goのswitchはbreak
がいらず、case
が定数や整数である必要もない。
switch class := student.grade; class {
case "1-1":
first ++
case "1-2":
second ++
case "1-3":
third ++
default:
others ++
}
みたいに書く
fmt.Println("文字列”,変数)
引数をデフォルトのフォーマットでフォーマットし、標準出力に出力し、改行をする
fmt.Printf("%d",変数)
指定されたフォーマットでフォーマットして標準出力に出力。改行はしない。
fmt.Scan(&変数)
標準入力からテキストを読み込み、スペースで区切られた値として、順番に引数に格納する。
fmt.Scanf("フォーマット指定子”,&変数)
フォーマット指定できるScan。
fmt.Scan(&N)
a := make([]int64, N)
for i := range a {
fmt.Scan(&a[i])
}
みたいにする