LoginSignup
0
0

More than 3 years have passed since last update.

go修行7日目 loggingとか

Last updated at Posted at 2020-06-18

宿題

問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)
    }
}

image.png

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