Help us understand the problem. What is going on with this article?

Go言語の便利なところ

はじめに

長年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の便利なところの一例でした。

以上

Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Comments
No comments
Sign up for free and join this conversation.
If you already have a Qiita account
Why do not you register as a user and use Qiita more conveniently?
You need to log in to use this function. Qiita can be used more conveniently after logging in.
You seem to be reading articles frequently this month. Qiita can be used more conveniently after logging in.
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
ユーザーは見つかりませんでした