🀄

[初学者向け]Goに触れてみる

2023/11/21に公開

想定読者

  • Go言語を触ったこと無い方

はじめに

Go言語をご存知でしょうか。
公式のトップページから説明を拝借します。

Build simple, secure, scalable systems with Go
An open-source programming language supported by Google
Easy to learn and great for teams
Built-in concurrency and a robust standard library
Large ecosystem of partners, communities, and tools

私の解釈で意訳すると

  • シンプルかつ安全で拡張性のあるシステムをつくろう。
  • 簡単に学べてすごい。
  • 組み込まれている標準ライブラリがよい。
  • すごいエコシステムを形成している。(GoogleやNetflixなど有名企業が使っている)

ということで、早速触れてみましょう。

まずは触れてみる

新たなプログラミング言語に触る際、最初の環境構築で躓きがちです。
ただ、Go言語では、A Tour of Go と呼ばれるブラウザでGo言語を触れる環境があるのでそちらを利用しましょう。

文字列を出力する

hello.goとgoの拡張子でファイルを作成して、文字列を出力するコードです。
確かにシンプルですね。

hello.go
package main

import "fmt"

func main() {
	fmt.Println("Hello, 世界")
}

日時を出力する。

importに"time"を追記して、 time.Now() で現在時刻を習得できます。

sandbox.go
package main

import (
	"fmt"
	"time"
)

func main() {
	fmt.Println("Welcome to the playground!")

	fmt.Println("The time is", time.Now())
}

基礎を学ぶ

続いて、こちらでGo言語の基礎を学びましょう。

https://go-tour-jp.appspot.com/list

Packages, variables, and functions. に触れて要点だけ整理します。

Packages

importしたパッケージはパスの最後の要素名を記述する。
importした "math/rand" は rand.Intn(10) といった感じ。

packages.go
package main

import (
	"fmt"
	"math/rand"
)

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

Functions

funcと呼ばれる関数の引数は、変数名の後に型名を書く。
関数の戻り値は、関数の後ろに書く。
func add(x int, y int) int といった感じ。

functions.go
package main

import "fmt"

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

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

Multiple results

関数は、複数の戻り値を返す事ができる。
a,b := sawp("hello","world") と関数の戻り値を受け取る際は、 := と書く。
普通だとデータオブジェクトを返すみたいな実装しそう。

multiple-result.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 y, x と変数名を書いた。
しかし、return と戻り値の変数名を書かなくてもよい。
コード量を削減できそう。

named-results.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 with initializers

varと変数を宣言して初期値を与えれる。
boolと型を指定しなくても初期値の値から型を推論してくれる。

variables-with-initializers.go
package main

import "fmt"

var i, j int = 1, 2

func main() {
	var c, python, java = true, false, "no!"
	fmt.Println(i, j, c, python, java)
}

Short variable declartions

関数内であれば var と書かなくても 変数名:=初期値 で変数を定義できる。
コードを短縮できる。

short-variable-declartions.go
package main

import "fmt"

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

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

Constants

定数は const 変数 = 定数値
関数の外でも中でも使える。もちろん定数なので、値の変更はできない。

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

おわりに

Go言語に触ってみました。
.goと呼ばれる拡張子。importでライブラリの宣言。
確かにシンプルな言語で、コードの短縮でき、可読性は良さそうです。

以上。

Discussion