search
LoginSignup
99

More than 3 years have passed since last update.

posted at

updated at

【Go】基本文法①(基礎)

概要

プログラミング言語Goの基本文法を学習シリーズです。
A Tour of Goの順番に沿ってGoの基本を学習します。

No 記事
1 〜〜【Go】基本文法①(基礎)「今ココ」〜〜
2 【Go】基本文法②(フロー制御文)
3 【Go】基本文法③(ポインタ・構造体)
4 【Go】基本文法④(配列・スライス)
5 【Go】基本文法⑤(Maps・ Range)
6 【Go】基本文法⑥(インターフェース)
7 【Go】基本文法⑦(並行処理)
8 【Go】基本文法総まとめ

パッケージ

Goのプログラムはpackageによって成り立っています。
import内に必要なpackageを明示します。

package main

import (
    "fmt"
    "math/rand"
)

func main() {
  fmt.Println("My favorite number is", rand.Intn(10)) // => My favorite number is 1
}

packageは以下の様に個別にインポートすることもできます。

import "fmt"
import "math/rand"

Exported names(エクスポートされた名前)

Goでは最初の文字が大文字で始まるものは、外部パッケージから参照できるExported namesです。
例えば以下のPimathパッケージからエクスポートされたものです。

package main

import (
    "fmt"
    "math"
)

func main() {
   fmt.Println(math.Pi) //=> 3.141592653589793
}

Functions(関数)

関数は 0〜複数 の引数を取ることができます。
関数は以下のように定義されます。

func  <関数名>([引数]) [戻り値の型] {
    [関数の本体]
}

引数の後, 戻り値の値に型名を書く必要があります。


package main 

import "fmt"

func greetings(arg string) string{
     return arg
}

func main(){
   fmt.Println(greetings("Hello World")) //=> Hello World
}

引数の型の省略

関数が2つ以上の同種類の引数を伴う場合、以下の様に型の省略ができます。

package main

import "fmt"

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

func main() {
    fmt.Println(add(1, 2)) //=> 3
}

複数の返り値

Goの関数は複数の値を返すことができます。


package main

import "fmt"

func multipleArgs(arg1, arg2 string)(string, string){
    return arg2, arg1
}

func main(){
  a, b := multipleArgs("Hello", "World")
  fmt.Println(a, b) // => World Hello
}

Variables(変数)

varによって変数を宣言します。
関数の引数と同様に複数の変数の後に型を書くことで複数の変数を同時に定義できます。

package main

import "fmt"

var var1, var2, var3 bool

func main() {
    var num int
    fmt.Println(num, var1, var2, var3) //=> 0 false false false
}

変数の初期値

変数宣言時に初期値を設定することができます。
初期値が与えられている場合、変数の型宣言は必要はありません。
その変数は初期化子が持つ型になります。

package main 

import "fmt"

var str = "Go Programming Language"
var num = 2

func main(){
   fmt.Println(str, num) // => Go Programming Language 2
}

以下の様に複数の変数を同時に定義することも可能です。

package main 

import "fmt"

var str, num, bool = "Go language", 23, true

func main(){
  fmt.Println(str, num, bool) //=> Go language 23 true
}

変数に初期値を与えないとゼロ値(Zero values)が設定されます。
(数値型には0、bool型にはfalse、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) //=> 0 0 false ""
}

関数内での短い変数の宣言

関数内では:=を利用することでより短いコードで変数の宣言を行うことが可能です。
※関数の外では:=を利用した変数宣言はできません。


package main 

import "fmt"

func main(){
   str := "Hello World"
   fmt.Println(str) //=> Hello World
}

基本型

Goの基本型(組み込み型)は以下の通りです。

bool

string

int  int8  int16  int32  int64
uint uint8 uint16 uint32 uint64 uintptr

byte // uint8 の別名
rune // int32 の別名
     // Unicode のコードポイントを表す

float32 float64

complex64 complex128

int, uint, uintptr 型は、32-bitのシステムでは32 bitで、64-bitのシステムでは64 bitです。 特別な理由がない限り、整数の変数が必要な場合はintを使うようにしましょう。

Type conversions(型の変換)

Goでは暗黙的な型変換は許されていないため、下記のような異なる型の変数への代入はエラーになります。

var i int = 100
var f float64 = i  // cannot use i (type int) as type float64

型変換を行うには変数を丸括弧で囲み、手前に型名を書きます。

var a uint32 = 1234567890
var b uint8 = uint8(a)
fmt.Println(b)  // 210(情報が欠落する)

Constants(定数)

定数は、constキーワードを使用して宣言します。
定数は、文字(character)文字列(string)boolean数値(numeric)のみで使えます。
定数は:=を使用して宣言することはできません。

package main 
import "fmt"

const Num = 2

func main(){
    const Greetings = "Hello World"
    fmt.Println(Greetings) // => Hello World
    fmt.Println(Num) // => 2
}

参考

My Journey of Go①
A Tour of Go
型のキャストと、型アサーションによる型変換

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
What you can do with signing up
99