LoginSignup
0
0

More than 3 years have passed since last update.

A Tour of Goの学習まとめ

Posted at

サイト

Packages

Goのプログラムはパッケージで構成する。
package mainはmainパッケージから実行される
パッケージ名はimportパスの最後の要素名とする

import

他のプログラムやライブラリをimportする

Exported names

Goでは、最初の文字が大文字で始まる名前は、外部のパッケージから参照できるエクスポート(公開)された名前となる。小文字で始まる名前は、外部のパッケージから参照できない。

exportnames.go

package main

import (
    "fmt"
    "math"
)

func main() {
    fmt.Println(math.pi) // 参照できない
    fmt.Println(math.Pi) // 参照できる
}

Functions

構文

関数は、0個以上の引数を取ることができる。
型は引数名の後ろに、戻り値の型は引数の後ろに書く。

func 関数名(引数1 引数1の型, ・・・) 戻り値の型 {
    処理
}
function.go

func add(x int, y int) int {
    return x + y
}

引数

2つ以上の引数が同じ型である場合には、最後の型を残して省略できる。

function.go

func add(x, y int) int {
    return x + y
}

戻り値

関数は複数の戻り値を返すことができる。

multiresult1.go

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)
}

Named return values

戻り値となる変数に名前をつけることができる。
戻り値に名前をつけると、関数の最初で定義した変数名として扱われる。
名前をつけた戻り値の変数を使うと、 return ステートメントに何も書かずに戻すことができる。

multiresult2.go

package main

import "fmt"

func split(sum int) (x, y int) {
    x = sum * 4 / 9
    y = sum - x
    return
}

func main() {
    fmt.Println(split(17))
}

Variables

構文

varステートメントで変数を宣言する。最後の変数の後ろに型を宣言する。
変数には初期値を定義できる。

var1.go
package main

import "fmt"

var c, python, java bool
var k, j int = 1, 2

func main() {
    var i int
    fmt.Println(i, c, python, java)
    fmt.Println(k,j)
}

省略方式

関数の中では、var宣言の代わりに短い := の代入文を使い、暗黙的な型宣言ができる。
関数の外では、キーワードではじまる宣言( var, func, など)が必要で、 := での暗黙的な宣言は利用できない。
in
```var2.go
package main

import "fmt"

// 関数の外ではvarが省略できない
//n := 10

func main() {
var i, j int = 1, 2
k := 3
c, python, java := true, false, "no!"

fmt.Println(i, j, k, c, python, java)

}
```

型定義

組み込みの型

  • bool 真偽値(true/false) 初期値false
  • string 文字型 初期値""
  • int 数値型 初期値0
  • float32 浮動数値型 初期値0

型変換

Goでの型変換は明示的な変換が必要。

typeconversion.go
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)
}

型推測

明示的な型を指定せずに変数を宣言する場合( :=var = のいずれか)、変数の型は右側の変数から型推論される。
右側の変数が型を持っている場合、左側の新しい変数は同じ型になる。
右側に型を指定しない数値である場合、左側の新しい変数は右側の定数の精度に基いて int, float64, complex128 の型となる。

inference.go
package main

import "fmt"

func main() {
    i := 42
    fmt.Printf("i is of type %T\n", i)
    f := 3.14
    fmt.Printf("f is of type %T\n", f)
    c := 0.867 + 0.5i
    fmt.Printf("c is of type %T\n", c)
}

定数

定数は、constキーワードを使って変数と同じように宣言する。
定数は、文字(character)、文字列(string)、boolean、数値(numeric)のみで使える。
定数は := を使って宣言できない。

const.go
package main

import "fmt"

const Pi = 3.14

func main() {
    const World = "世界"
    fmt.Println("Hello", World)
    fmt.Println("Happy", Pi, "Day")

    const Truth = true
    fmt.Println("Go rules?", Truth)
}
0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0