宿題
問1: continueとbreakの違いは?
- continue → ループ中の今差し掛かっている処理は実行されず、次のループへ
- break → ループ終了
問2: Go言語におけるスイッチ文ではケース式に合致したらそのケースしか実行されない。しかし他の言語ではどうなっているか?複数のケースが実行されてしまうことがある。この言語仕様の名称はなにか?
- 名称 fallthrough(落ちるという意味)
- bashだとGoと同じな気がします
問3: 問2における機能をGo言語で実装する方法を答えよ。
package main
import "fmt"
func main() {
i := 1
switch {
case i < 5:
fmt.Println("<5")
fallthrough
case i < 7:
fmt.Println("<7")
default:
fmt.Println("")
}
}
<5
<7
遅延実行
- 関数内の最後に実行される
package main
import "fmt"
func getOsName() string {
return "windows"
}
func main() {
// os := "windows"
os := getOsName()
switch os {
case "mac":
fmt.Println("Mac")
case "windows":
fmt.Println("Windows")
// defaultなくても大丈夫
default:
fmt.Println("Default")
}
}
hello foo
world foo
hello
world
ファイルを開く処理などで使う
package main
import (
"fmt"
"os"
)
func main() {
// ファイルを開く
file, _ := os.Open("./test.go")
// 処理終了後にファイルを閉じる必要があるのでdeferを使う
defer file.Close()
data := make([]byte, 100)
file.Read(data)
fmt.Println(string(data))
}
package main
import (
"fmt"
"os"
)
func main() {
// ファイルを開く
file, _ :=
ロギング
package main
import (
"log"
"os"
)
func main() {
// でたらめなファイルを開く
_, err := os.Open("aaaaa")
// エラー処理
if err != nil {
log.Fatalln("exit", err)
}
log.Println("logging")
log.Println("%T %v", "test", "test")
// Fatalが実行されると処理が終了する
log.Fatalf("%T %v", "test", "test")
log.Fatalln("error")
}
2020/06/18 21:50:01 exit open aaaaa: The system cannot find the file specified.
ファイル書き込み
package main
import (
"io"
"log"
"os"
)
// loggin関数
func LoggingSettings(logFile string) {
// 666、読み書き追記できるように作る
logfile, _ := os.OpenFile(logFile, os.O_RDWR|os.O_CREATE|os.O_APPEND, 0666)
// Stdoutで標準出力もしつつlogging
multilogFile := io.MultiWriter(os.Stdout, logfile)
// 時間とか、Llongfileは絶対パス表記
log.SetFlags(log.Ldate | log.Ltime | log.Llongfile)
log.SetOutput(multilogFile)
}
func main() {
LoggingSettings("test.log")
// でたらめなファイルを開く
_, err := os.Open("aaaaa")
// エラー処理
if err != nil {
log.Fatalln("exit", err)
}
}