go言語の基礎入門について解説します。
レッスン1
Goに触れてみよう Goに触れてみよう Goの基礎を学ぼう GoのFormat Goの基本 数値 数値の計算 文字列の連結 変数を使ってみよう 変数の基本 変数の更新 色々な変数の作り方 変数とエラー 変数と自己代入 真偽値と条件分岐 if文を使ってみよう 真偽値 else else if 条件式を組み合わせよう
switch
Goに触れてみよう
//コンソールには「Hello, Go」と表示される
package main func main() { // 下記の「世界」の部分を「Go」に書き換えてください println("Hello, Go") }
Goの基礎を学ぼう
GoのFormat
コードの整形 プログラムは人が読み書きするものなので「読みやすいように書く」ことが大切です。左と右の図を比べると、右のように空白やインデント(文頭の字下げ)が統一されている方が読みやすいことがわかると思います。 Goにはこの統一の仕方にもルールがあり、自動でそれに合わせて整形するためのボタンを演習画面に用意しています。ぜひ活用してみましょう。
Goの基本
//で一行コメントアウトされる //文字列はダブルクオーテーションで囲う
package main func main() { // 「こんにちは、世界」と出力してください println("こんにちは、世界") // この行をコメントにしてください }
数値の計算1
package main func main() { // 数値の7を出力してください println(7) // 9に3足した値を出力してください println(9 + 3) // 「9 + 3」を文字列として出力してください println("9 + 3") }
ターミナルには以下のように表示される。
7 12 93
数値の計算2
package main func main() { // 12を3で割った値を出力してください println(12 / 3) // 3に6を掛けた値を出力してください println(3 * 6) // 8を3で割った時の余りを出力してください println(8 % 3) }
ターミナルには以下のように表示される。
4 18 2
文字列の連結
package main func main() { //「こんにちは世界」となるように文字列を連結して出力してください println("こんにちは" + "世界") // 文字列"38"と"19"を連結して出力してください println("38" + "19") // 数値38に19を足して出力してください println(38 + 19) }
ターミナルには以下のように表示される。
こんにちわ世界 3819 57
変数の基本
package main func main() { // 変数messageを定義し、「Hello, 世界」を代入してください var message string = "Hello, 世界" // 変数messageの値を出力してください println(message) }
ターミナルには以下のように表示される。
Hello, 世界
変数の更新
package main func main () { var message string = "Hello, 世界" // 変数messageの値を、文字列"Hello, Go"に更新してください message = "Hello, Go" println(message) }
ターミナルには以下のように表示される。
Hello, Go
色々な変数の作り方
package main func main() { // 変数messageを省略して定義し、"Hello, 世界"を代入してください message := "Hello, 世界" // 変数numberを省略して定義し、100を代入してください number := 100 // 変数messageと変数numberを同時に出力してください println(message, number) }
ターミナルには以下のように表示される。
Hello, 世界 100
変数とエラー
package main func main() { // s1とs2の定義がまだされていなく、出力できないので消してください s1 := "Hello" s2 := "世界" // 変数定義から代入に変更してください s1 = "こんにちは" // 変数s1はString型なので、消してください // 変数s1とs2を同時に出力してください println(s1, s2) }
ターミナルには以下のように表示される。
こんにちわ 世界
変数と自己代入
package main func main() { n := 100 // nから10を引いてnに代入しましょう n -= 10 println(n) m := 10 // mに1を足してmに代入しましょう m++ println(m) }
ターミナルには以下のように表示される。
90 11
真偽値と条件分岐
package main func main() { x := 123 y := 5 * 6 // xが100以上の場合に「xは100以上です」と出力してください if x >= 100 { println("xは100以上です") } // yが40より小さい場合に「yは40より小さいです」と出力してください if y < 40 { println("yは40より小さいです") } }
if文を使ってみよう
package main func main() { x := 123 y := 5 * 6 // xが100以上の場合に「xは100以上です」と出力してください if x >= 100 { println("xは100以上です") } // yが40より小さい場合に「yは40より小さいです」と出力してください if y < 40 { println("yは40より小さいです") } }
ターミナルには以下のように表示される。
xは100以上です
yは40より小さいです
真偽値
package main func main() { x := 7 * 10 y := 5 * 6 // xの値が70と等しい場合のif文を作成してください if x == 70 { println("xは70です") } // yの値が40と等しくない場合のif文を作成してください if y != 40 { println("yは40ではありません") } }
ターミナルには以下のように表示される。
xは70です yは40ではありません
else
package main func main() { money := 100 price := 200 // elseで条件分岐を追加してください if money >= price { println("商品を買うことができます") } else { println("お金が足りません") } }
ターミナルには以下のように表示される。
お金が足りません
else if
package main func main() { money := 200 price := 200 // else ifとelseの条件分岐を追加してください if money > price { println("商品を買うことができます") } else if money == price { println("商品を買うことができますが所持金が0円になります") } else { println("お金が足りません") } }
ターミナルには以下のように表示される。
商品を買うことができますが所持金が0円になります
条件式を組み合わせよう
package main func main() { x := 20 // xが10以上30以下の場合に「xは10以上30以下です」と出力してください if x >= 10 && x <= 30 { println("xは10以上30以下です") } y := 60 // yが10未満または30より大きい場合に「yは10未満または30より大きいです」と出力してください if y < 10 || y > 30 { println("yは10未満または30より大きいです") } // zが77ではない場合に「zは77ではありません」と出力してください z := 55 if !(z == 77) { println("zは77ではありません") } }
ターミナルには以下のように表示される。
"xは10以上30以下です" yは10未満または30より大きいです zは77ではありません"
switch
package main func main() { n := 3 switch n { // caseを追加し、nが0の場合、"凶です"と出力してください case 0: println("凶です") // caseを追加し、nが1または2の場合、"吉です"と出力してください case 1, 2: println("吉です") // caseを追加し、nが3または4の場合、"中吉です"と出力してください case 3, 4: println("中吉です") // caseを追加し、nが5の場合、"大吉です"と出力してください case 5: println("大吉です") } }
ターミナルには以下のように表示される。
中吉です
Go 学習コース II コース詳細へ 目標物を確認しよう 1. 目標物を確認しよう 標準パッケージを使ってみよう 2. fmtパッケージ 3. 書式付き出力 4. 書式付き出力(整数) 5. 改行文字 繰り返し処理 6. for おみくじアプリを改良しよう 7. randパッケージ 8. 完全な乱数を生成しよう
9. おみくじアプリを改良しよう
1. 目標物を確認しよう
//コンソールには「Hello, Go」と表示される
package main import "fmt" import "math/rand" import "time" func main() { rand.Seed(time.Now().Unix()) for i := 1; i <= 3; i++ { fmt.Printf("%d回目のおみくじ結果: ", i) number := rand.Intn(6) switch number { case 0: fmt.Println("凶です") case 1, 2: fmt.Println("吉です") case 3, 4: fmt.Println("中吉です") case 5: fmt.Println("大吉です") } } }
2. fmtパッケージ
package main
// 「fmt」パッケージをインポートしてください import "fmt"
func main() { // fmtパッケージを使って、「Hello, 世界」と出力するように書き換えてください fmt.Println("Hello, 世界") }
3. 書式付き出力
//で一行コメントアウトされる //文字列はダブルクオーテーションで囲う
package main import "fmt" func main() { weather := "晴れ" // fmt.Printfと変数weatherを用いて「今日の天気は◯◯です」と表示してください fmt.Printf("今日の天気は%sです", weather) }
ターミナルには以下のように表示される。
今日の天気は晴れです
4. 書式付き出力(整数)
package main import "fmt" func main() { month := 6 day := 19 // fmt.Printfと、変数month・dayを用いて、「今日は、◯月◯日です」と表示してください fmt.Printf("今日は、%d月%d日です", month, day) }
ターミナルには以下のように表示される。
今日は、6月19日です
5. 改行文字
package main import "fmt" func main() { name1 := "にんじゃわんこ" name2 := "ひつじ仙人" name3 := "ベイビーわんこ" // 改行文字を用いて、それぞれの文字列の末尾で改行してください fmt.Printf("ようこそ、%sさん\n", name1) fmt.Printf("ようこそ、%sさん\n", name2) fmt.Printf("ようこそ、%sさん\n", name3) }
ターミナルには以下のように表示される。
4 18 2
6. for
package main import "fmt" func main() { // 1から100までの整数を出力してください for i := 1; i <= 100; i++ { fmt.Println(i) } }
ターミナルには以下のように表示される。
1から100が順に表示される。
7. randパッケージ
package main import "fmt" //「math/rand」パッケージをインポートしてください import "math/rand" func main() { for i := 1; i <= 5; i++ { // 0~9のランダムな整数を生成し、出力してください fmt.Println(rand.Intn(10)) } }
ターミナルには以下のように表示される。
0~9のランダムな整数が5回出力される
8. 完全な乱数を生成しよう
package main import "fmt" import "math/rand" //「time」パッケージをインポートしてください import "time" func main() { // 指定されたコードを追加してください rand.Seed(time.Now().Unix()) for i := 1; i <= 5; i++ { fmt.Println(rand.Intn(10)) } }
ターミナルには以下のように表示される。
0~9のランダムな整数が5回出力される
9. おみくじアプリを改良しよう
package main import "fmt" // 「math/rand」パッケージと「time」パッケージをインポートしてください import "math/rand" import "time" func main() { // 指定されたコードを貼り付けてください rand.Seed(time.Now().Unix()) // for文を作成してください for i := 1; i <= 3; i++ { fmt.Printf("%d回目のおみくじ結果: ", i) number := rand.Intn(6) switch number { case 0: fmt.Println("凶です") case 1, 2: fmt.Println("吉です") case 3, 4: fmt.Println("中吉です") case 5: fmt.Println("大吉です") } } }
ターミナルには以下のように表示される。
0から6までの乱数で4のif条件に解れる処理を 3回の繰り返し処理行う。
}
---------------------------------------- ##if文を使ってみよう
package main
func main() { x := 123 y := 5 * 6
// xが100以上の場合に「xは100以上です」と出力してください
if x >= 100 {
println("xは100以上です")
}
// yが40より小さい場合に「yは40より小さいです」と出力してください
if y < 40 {
println("yは40より小さいです")
}
}
###ターミナルには以下のように表示される。 xは100以上です yは40より小さいです ---------------------------------------- ##真偽値
package main
func main() { x := 7 * 10 y := 5 * 6
// xの値が70と等しい場合のif文を作成してください
if x == 70 {
println("xは70です")
}
// yの値が40と等しくない場合のif文を作成してください
if y != 40 {
println("yは40ではありません")
}
}
###ターミナルには以下のように表示される。 xは70です yは40ではありません ---------------------------------------- ##else
package main
func main() { money := 100 price := 200
// elseで条件分岐を追加してください
if money >= price {
println("商品を買うことができます")
} else {
println("お金が足りません")
}
}
###ターミナルには以下のように表示される。 お金が足りません ---------------------------------------- ##else if
package main
func main() { money := 200 price := 200
// else ifとelseの条件分岐を追加してください
if money > price {
println("商品を買うことができます")
} else if money == price {
println("商品を買うことができますが所持金が0円になります")
} else {
println("お金が足りません")
}
}
###ターミナルには以下のように表示される。 商品を買うことができますが所持金が0円になります ---------------------------------------- ##条件式を組み合わせよう
package main
func main() { x := 20 // xが10以上30以下の場合に「xは10以上30以下です」と出力してください if x >= 10 && x <= 30 { println("xは10以上30以下です") }
y := 60
// yが10未満または30より大きい場合に「yは10未満または30より大きいです」と出力してください
if y < 10 || y > 30 {
println("yは10未満または30より大きいです")
}
// zが77ではない場合に「zは77ではありません」と出力してください
z := 55
if !(z == 77) {
println("zは77ではありません")
}
}
###ターミナルには以下のように表示される。 "xは10以上30以下です" yは10未満または30より大きいです zは77ではありません" ---------------------------------------- ##switch
package main
func main() { n := 3 switch n { // caseを追加し、nが0の場合、"凶です"と出力してください case 0: println("凶です") // caseを追加し、nが1または2の場合、"吉です"と出力してください case 1, 2: println("吉です") // caseを追加し、nが3または4の場合、"中吉です"と出力してください case 3, 4: println("中吉です") // caseを追加し、nが5の場合、"大吉です"と出力してください case 5: println("大吉です") } }
###ターミナルには以下のように表示される。 中吉です -------------------------------------------------------------------------------- -------------------------------------------------------------------------------- -------------------------------------------------------------------------------- Go 学習コース III コース詳細へ 目標物を確認しよう 1. 目標物を確認しよう 文字列の入力 2. fmt.Scan関数を使ってみよう 3. 関数とは 4. 関数の基本 引数と戻り値 5. 引数 6. 問題番号を出す 7. 戻り値とは 8. 計算をしよう 9. 引数と戻り値 スコープを学ぼう 10. 関数に値を渡すときの注意点(1) 11. 関数に値を渡すときの注意点(2) ---------------------------------------- ##1. 目標物を確認しよう //タイピングゲームを作ります
package main
import "fmt"
func main() { totalScore := ask(1, "dog") totalScore += ask(2, "cat") totalScore += ask(3, "fish")
fmt.Println("スコア", totalScore)
}
func ask(number int, question string) int { var input string fmt.Printf("[質問%d] 次の単語を入力してください: %s\n", number, question) fmt.Scan(&input)
score := 0
if question == input {
fmt.Println("正解!")
score = 10
} else {
fmt.Println("不正解!")
}
return score
}
---------------------------------------- ##2. fmt.Scan関数を使ってみよう
package main
import "fmt"
func main() { // 変数inputを定義してください var input string
// 「次の単語を入力してください: dog」と出力してください
fmt.Println("次の単語を入力してください: dog")
// Scanで入力を受け取ってください
fmt.Scan(&input)
// 受け取った値を出力してください
fmt.Printf("%sと入力されました", input)
}
---------------------------------------- ##3. 関数とは
package main
import "fmt"
func main() { // 以下のコードを切り取ってください // ここから上を切り取ってください
// ask関数を呼び出してください
ask()
}
// ask関数を定義してください func ask() { var input string fmt.Println("次の単語を入力してください: dog") fmt.Scan(&input) fmt.Printf("%sと入力されました", input) }
###ターミナルには以下のように表示される。 7 12 93 ---------------------------------------- ##4. 関数の基本
package main
import "fmt"
func main() { ask() // もう一度ask関数を呼び出してください ask() }
func ask() { var input string fmt.Println("次の単語を入力してください: dog") fmt.Scan(&input) fmt.Printf("%sと入力されました\n", input) }
###ターミナルには以下のように表示される。 ---------------------------------------- ##5. 引数
package main
import "fmt"
func main() { // 引数を使って、3回askを呼んでください ask("dog") ask("cat") ask("fish") }
// 引数questionを追加してください func ask(question string) { var input string // 以下の内容をfmt.Printfを使用して、修正してください fmt.Printf("次の単語を入力してください: %s\n", question) fmt.Scan(&input) fmt.Printf("%sと入力されました\n", input) }
###ターミナルには以下のように表示される。 ---------------------------------------- ##6. 問題番号を出す
package main
import "fmt"
func main() { // 引数に1を渡してください ask(1, "dog")
// 引数に2を渡してください
ask(2, "cat")
// 引数に3を渡してください
ask(3, "fish")
}
// 引数numberを追加してください func ask(number int, question string) { var input string // 下の1行を削除し、指定されたコードを貼り付けてください fmt.Printf("[質問%d] 次の単語を入力してください: %s\n", number, question)
fmt.Scan(&input)
fmt.Printf("%sと入力されました\n", input)
}
###ターミナルには以下のように表示される。 ---------------------------------------- ##7. 戻り値とは
package main
import "fmt"
func main() { // totalScoreにask関数からの戻り値を代入してください totalScore := ask(1, "dog")
// 指定されたコードを貼り付けてください
fmt.Println("スコア", totalScore)
}
// 戻り値の型を定義してください func ask(number int, question string) int { var input string fmt.Printf("[質問%d] 次の単語を入力してください: %s\n", number, question) fmt.Scan(&input) fmt.Printf("%sと入力されました\n", input) // 戻り値の値を追加してください return 10
}
###ターミナルには以下のように表示される。 ---------------------------------------- ##8. 計算をしよう
package main
import "fmt"
func main() { totalScore := ask(1, "dog") // totalScoreにask関数からの戻り値を足してください totalScore += ask(2, "cat") totalScore += ask(3, "fish")
fmt.Println("スコア", totalScore)
}
func ask(number int, question string) int { var input string fmt.Printf("[質問%d] 次の単語を入力してください: %s\n", number, question) fmt.Scan(&input) fmt.Printf("%sと入力されました\n", input)
return 10
}
###ターミナルには以下のように表示される。 ---------------------------------------- ##9. 引数と戻り値
package main
import "fmt"
func main() { totalScore := ask(1, "dog") totalScore += ask(2, "cat") totalScore += ask(3, "fish")
fmt.Println("スコア", totalScore)
}
func ask(number int, question string) int { var input string fmt.Printf("[質問%d] 次の単語を入力してください: %s\n", number, question) fmt.Scan(&input)
if question == input {
// 問題文の単語と入力値が一致するときの処理を追加してください
fmt.Println("正解!")
return 10
} else {
// 問題文の単語と入力値が一致しないときの処理を追加してください
fmt.Println("不正解!")
return 0
}
}
###ターミナルには以下のように表示される。 こんにちわ 世界 ---------------------------------------- ##10. 関数に値を渡すときの注意点(1)
package main
import "fmt"
func main() { totalScore := 0 ask(1, "dog") ask(2, "cat") ask(3, "fish")
fmt.Println("スコア", totalScore)
}
func ask(number int, question string) { var input string fmt.Printf("[質問%d] 次の単語を入力してください: %s\n", number, question) fmt.Scan(&input)
if question == input {
fmt.Println("正解!")
// totalScoreに10を加算代入してください
totalScore += 10
} else {
fmt.Println("不正解!")
}
}
###ターミナルには以下のように表示される。 error22 ---------------------------------------- ##11. 関数に値を渡すときの注意点(2)
package main
import "fmt"
func main() { totalScore := 0 ask(1, "dog", totalScore) ask(2, "cat", totalScore) ask(3, "fish", totalScore)
fmt.Println("スコア", totalScore)
}
// 引数としてint型のtotalScoreを追加してください func ask(number int, question string, totalScore int) { var input string fmt.Printf("[質問%d] 次の単語を入力してください: %s\n", number, question) fmt.Scan(&input)
if question == input {
fmt.Println("正解!")
totalScore += 10
} else {
fmt.Println("不正解!")
}
}
----------------------------------------