0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

Go言語を学んでみる #2

Posted at

Go Tour

ブラウザ上でもできるけど、Go言語をインストールすればローカルでもGo Tourが実行できるらしい。

せっかくだからローカルでやってみようかな。

ダウンロードは済んでいるので、コマンドラインで以下のコマンドを実行。

go tool tour

動かない。
もう一つ記載されているコマンドを実行。

go get github.com/atotto/go-tour-jp/gotour
gotour

やっぱり動かない。
仕方ないので別サイトを調べてみる。

このサイトのやり方でうまくいきました。

完了すると、ブラウザ上にA Tour og Goが立ち上がる。

Go言語の構成

パッケージ(package)で構成されていて、mainパッケージからプログラムが実行される。

package main

ファイルの一番上に書いているのがそれかな?

でもって次の行から、実行したいパッケージの名前を記載してインポートしている。

import (
	"fmt"
	"math/rand"
)

これでこのパッケージのメソッドとかを使えるって感じっぽい。

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

// 実行結果

My favorite number is 7

割とシンプルそう。

個別でインポートすることも可能。

import "fmt"
import "math"

外部のパッケージへのエクスポート方法

export ~みたいな前置きは必要なくて、大文字から始めればいいだけ。シンプル過ぎん?

package main

import (
	"fmt"
	"math"
)

func main() {
	fmt.Println(math.pi)
}

// 実行結果
./prog.go:9:19: undefined: math.pi

func main()内のpiは大文字で始まっていないのでエラーになってしまう。

Piに置き換えれば実行可能。

関数(メソッド)

基本的な書き方は、ほかの言語とだいたい一緒。

package main

import "fmt"

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

func main() {
	fmt.Println(add(42, 13))
}

引数とることもできる。

型宣言は変数名の後ろに書けばOK。

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

2つ以上の引数が同じ型なら、最後の型だけ残せばいい。

func swap(x, y string) (string, string) {
	return y, x
}

複数の戻り値を返すことも可能。なんと…
最初のカッコに引数を、そのあとのカッコに戻り値を記載できるみたい。

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

戻り値に変数名を記載し、その変数名を関数内で使用すると、returnに何も書かずとも変数を自動的に戻り値として認識してくれる。便利。。。

ただし長い関数で使うのは非推奨。可読性が悪くなるので。

変数

他の言語にもあるように、変数の頭にはverを付ければOK。

var c, python, java bool

一気にいろんな変数に代入することもできる。

var c, python, java = true, false, "no!"

変数宣言と一緒に値も代入すれば、型を省略して書くこともできる。
その場合、最初に代入された値が持つ型が自動で設定される。

k := 3

関数の中だけは:=を使って、暗黙的な型宣言ができる。

Go言語の基本型

bool

string

int  int8  int16  int32  int64
uint uint8 uint16 uint32 uint64 uintptr

byte // uint8 の別名

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

float32 float64

complex64 complex128

bool string int辺りは分かるけど、それ以外がよくわからんな…floatは小数点?

i1 int    = 10  // 符号あり	実行アーキテクチャに依存(32bit or 64bit)
i2 int    = 1e9 // 10の9乗(=1000000000)
i3 int16  = 10  // 符号あり	最小:-32768                  最大:32767
i4 int32  = 10  // 符号あり	最小:-2147483648             最大:2147483647 (約20億)
i5 int64  = 10  // 符号あり	最小:-9223372036854775808    最大:9223372036854775807 (約900京)
i6 uint   = 10  // 符号なし	実行アーキテクチャに依存(32bit or 64bit)
i7 uint32 = 10  // 符号なし	最小:0                       最大:4294967295 (約40億)

変数に初期値を与えない場合、ゼロ値が与えられる。

数値型(int,floatなど): 0
bool型: false
string型: "" (空文字列( empty string ))

型名(変数名)で型変換ができる。

var z uint = uint(f)

もし型名を指定しない場合、代入した値の型から型推論がおこなわれる。

var i int
j := i // j is an int

定数

おなじみconstで定義。

const World = "世界"

基本的な定義とかはこのあたりで終わりかな。

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

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?