質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
Go

Go(golang)は、Googleで開発されたオープンソースのプログラミング言語です。

Google

Googleは、アメリカ合衆国に位置する、インターネット関連のサービスや製品を提供している企業です。検索エンジンからアプリケーションの提供まで、多岐にわたるサービスを提供しています。

Q&A

解決済

2回答

2932閲覧

Goのif文について

退会済みユーザー

退会済みユーザー

総合スコア0

Go

Go(golang)は、Googleで開発されたオープンソースのプログラミング言語です。

Google

Googleは、アメリカ合衆国に位置する、インターネット関連のサービスや製品を提供している企業です。検索エンジンからアプリケーションの提供まで、多岐にわたるサービスを提供しています。

0グッド

0クリップ

投稿2017/11/12 04:04

まだGo初心者なので教えていただきたいです。

以下のメソッドでbool値を返したいのですが

func main(){ result := result(message string) print(result) } func result(m string) string { if string == "hello" { back := "done" } else { back := "undone" } return back }

としたいのですが、このようにしてgo run すると

undifined:back

とでます。どのようなgo言語の使用でこんなエラーが出ているのでしょうか?

また

func result(m string) string { if string == "hello" { back := "done" return back } else { back := "undone" return back } }

としても、エラーがでます。
どのようにしたら、綺麗なコードが枯れるのでしょうか。
よろしくお願いします。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答2

0

ベストアンサー

以下のように修正していただくと動くと思われます。
2つ目のコードのif string ==の部分を変えました。

go

1func main() { 2 var m = "hello" 3 fmt.Println(result(m)) 4} 5func result(m string) string { 6 if m == "hello" { //if stringとするとダメです 7 back := "done" 8 return back 9 } else { 10 back := "undone" 11 return back 12 } 13}

追記

ifの中で変数を初期化すると、スコープがif文内だけになってしまいます。
なので

go

1func result(m string) string { 2 var back string //ifの外でbackを初期化 3 if m == "hello" { 4 back = "done" 5 } else { 6 back = "undone" 7 } 8 return back 9}

このようにするとreturnが一つですみます。

投稿2017/11/12 04:19

編集2017/11/12 15:04
退会済みユーザー

退会済みユーザー

総合スコア0

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

退会済みユーザー

退会済みユーザー

2017/11/12 04:22

returnが二つあることに違和感を持ってしまい、if文をぬけたあとにreturnをしたいのですが、どのようにすればいいでしょうか?
退会済みユーザー

退会済みユーザー

2017/11/12 04:36

追記しました
退会済みユーザー

退会済みユーザー

2017/11/12 04:45

ありがとうございます!
guest

0

質問者さんのコードに1点、DDxlk さんのコードですが、1点修正があります。

質問者さんのコードはおそらく、result という関数を呼び出した結果を表示したいのだと思います。であれば以下の様に呼び出す必要があります。

go

1func main() { 2 var m = "hello" 3 fmt.Println(result(m)) 4}

また DDxlk さんのコードですが、Go のスタイルでは if/else 両方で return するのは、最後の return を忘れてしまう可能性がある為、あまり良いコードではないという事になっています。試しに golint というツールを入れて

golint xxx.go

※xxx.go はファイル名

を実行してみて下さい。

bad.go:13:9: if block ends with a return statement, so drop this else and outdent its block

この様に、else で return する場合には以下の様に書くのが Go のスタイルとされています。

go

1package main 2 3import "fmt" 4 5func main() { 6 var m = "hello" 7 fmt.Println(result(m)) 8} 9 10func result(m string) string { 11 if m == "hello" { 12 return "done" 13 } 14 return "undone" 15}

どうしても back という変数を使われたいならば、以下の様に宣言を行うと良いです。

go

1package main 2 3import "fmt" 4 5func main() { 6 var m = "hello" 7 fmt.Println(result(m)) 8} 9 10func result(m string) string { 11 var back string 12 if m == "hello" { 13 back = "done" 14 } else { 15 back = "undone" 16 } 17 return back 18}

投稿2017/11/12 14:51

mattn

総合スコア5030

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

退会済みユーザー

退会済みユーザー

2017/11/12 15:04

あああああ main関数の var m = "hello" fmt.Println(result) の部分は完全に打ち間違えだと思います! ご指摘ありがとうございます。修正しておきます!
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問