04.条件语句

 if 语句

  • if 的条件里可以赋值
  • if 的条件里赋值的变量作用域就在这个 if 语句里

使用 if 语句打开 txt 文件

package main

import (
    "fmt"
    "io/ioutil"
)

func main() {
    const filename = "test.txt"
    //返回两个值([]byte, error)文件内容和出错形式
    contents, err := ioutil.ReadFile(filename)
    if err != nil {
        fmt.Println(err)
    } else {
        fmt.Printf("%s\n", contents)
    }
}

运行结果:

 若无此文件会输出:

open test1.txt: The system cannot find the file specified.

if 可以像 for 一样写

package main

import (
    "fmt"
    "os"
)

func main() {
    const filename = "test.txt"
    //返回两个值([]byte, error)文件内容和出错形式
    if contents, err := os.ReadFile(filename); err != nil {
        fmt.Println(err)
    } else {
        fmt.Println(string(contents))
    }
}

ioutil.ReadFile 中的 ReadFile 函数被画上了删除线(通常是灰色或斜体),这通常意味着该函数或包在较新版本的 Go 语言中已经被标记为废弃(deprecated)或者已经有更推荐的替代方式。

对于 ioutil.ReadFile 来说,确实,从 Go 1.16 版本开始,io/ioutil 包中的许多函数,包括 ReadFile,都被认为是过时的,并推荐使用 os 和 io 包中的函数作为替代。具体来说,ioutil.ReadFile 的功能现在可以通过 os.ReadFile 直接实现,后者提供了相同的功能但属于更现代的 API。

使用 os.ReadFile 而不是 ioutil.ReadFile 的好处包括:

  1. 一致性:os 包是处理文件和目录的标准方式,使用它可以使你的代码与 Go 语言的其他部分保持一致。

  2. 未来的兼容性:虽然 ioutil.ReadFile 在当前版本的 Go 中仍然可用,但它在未来的版本中可能会被完全移除。使用 os.ReadFile 可以确保你的代码在未来版本的 Go 中仍然有效。

  3. 性能:在某些情况下,os.ReadFile 可能提供了更好的性能,因为它直接利用了 Go 的内部机制来优化文件读取操作。

switch

  • 会自动 break ,除非使用 fallthrough 
  • switch 后可以没有表达式,case里面写明即可
package main

import (
    "fmt"
)

func grade(score int) string {
    g := ""
    switch {
    case score < 0 || score > 100:
        panic(fmt.Sprintf("Wrong score: %d", score))
    case score < 60:
        g = "F"
    case score < 80:
        g = "C"
    case score < 90:
        g = "B"
    case score <= 100:
        g = "A"
    }
    return g
}
func main() {
    fmt.Println(
        grade(0),
        grade(50),
        grade(70),
        grade(80),
        grade(90),
        grade(100),
    )
}

 

posted @ 2024-07-06 23:16  JJJhr  阅读(3)  评论(0编辑  收藏  举报