LoginSignup
0
0

More than 3 years have passed since last update.

Go言語の便利なところ

Last updated at Posted at 2019-10-22

はじめに

長年JAVAをやってきました。JAVAと比較してGoでは便利だと思うのは、まず2点があります。
・変数の値交換
・関数に複数戻り値の定義可能

変数の値交換

JAVA例

int a = 10;
int b = 20;

// 一時変数が必要です。
int temp = a;
a = b;
b = temp

Go例

a := 10
b := 20

// 値交換:一時変数不要。バブルソート (bubble sort) の交換処理など
a, b = b, a

変数は減らすことでコードは見やすくなります。

JAVAでは関数の戻り値について

戻り値がない場合

private void doSomething() {
    // return句省略可
}

戻り値がある場合

private String getSomething() {
    // return句が必須
    return "xxx"; 
}

戻りは一回一つしか設定できません。複数戻りたい時はArray、List、Map、INFOクラス作成するなどが必要です。

Goの関数の戻りについて

戻り値がない場合 ※戻り値関連記載不要

func doSomething() {
    // doSomething
}

一つ戻り値の場合: 戻りの型だけ定義

func main() {
    result := doSomething()
    fmt.Println(result)
}

func doSomething() string {
    // doSomething
    return "テストです"
}

一つ戻り値の場合: 戻りの型と変数名両方定義

func main() {
    result := doSomething()
    fmt.Println(result)
}

func doSomething() (result string) {
    // doSomething
    result = "テストです"
    return
}

複数戻り値の場合: 戻りの型だけ定義

func main() {
    userName, age, gender := doSomething()
    fmt.Println(userName, age, gender)
}

func doSomething() (string, int, bool) {
    // doSomething
    return "田中", 20, true
}

複数戻り値の場合: 戻りの型と変数名両方定義

func main() {
    userName, age, gender := doSomething()
    fmt.Println(userName, age, gender)
}

func doSomething() (userName string, age int, gender bool) {
    // doSomething
    userName = "田中"
    age = 20
    gender = true
    return
}

また、複数戻りに対して「_」で戻り値が使わないようにするという書き方は便利です。

userName, age, _ := doSomething()

例えば、JAVAのMapに値を取得する際に、キーの存在しない場合、値はnullの場合は区別できないため、
それぞれのメソッドを利用する必要あります。
存在チェック例:map.containsKey("userName")
値取得例: map.get("userName")

よくあるMapからの取得サンプルコード:

String userName = "";
if (map.containsKey("userName")) {
    userName = map.get("userName")
}

Goの場合は、同時に存在チェックの結果を帰ってくるので、便利です。

func main() {
    m := map[string]string{"user1": "1", "user2": "2"}
    value, ok := m["user1"]
        // 存在する場合はok=true   存在しない場合はok=false
    fmt.Println(value, ok)
}

Goの便利なところの一例でした。

以上

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