Skip to content

Instantly share code, notes, and snippets.

@n01e0
Last active August 16, 2019 05:40
Show Gist options
  • Save n01e0/d9371240f56a04b0c5eb386dff9d16ba to your computer and use it in GitHub Desktop.
Save n01e0/d9371240f56a04b0c5eb386dff9d16ba to your computer and use it in GitHub Desktop.
go4abc

Hello Go!

package main

import "fmt"

func main(){
    fmt.Println("Hello Go!")
}

これで

$ Hello Go!

できる。


GoでABCを解く

ABCを解く事を目標としたレベルの内容であり、厳密に学びたい場合はA Tour of Goとかでやってください。

agenda


基礎の基礎

基本的な形

冒頭で書いた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

ループ

for

cに似ている

for i := 0; i < 10; i++ {
    sum += 1
}

みたいに書く。

初期化と後処理はしなくても良い

for ; ratio < 100;{
    ratio += pt
}

とか


while

while文はない。forでできるから。

for sum < 100{  // セミコロンも省略できる
    sum += a
}

if

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
}

みたいなの


switch

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。

N個の要素をスキャンしたい時

fmt.Scan(&N)
a := make([]int64, N)
for i := range a {
    fmt.Scan(&a[i])
}

みたいにする

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment