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
的好处包括:
一致性:
os
包是处理文件和目录的标准方式,使用它可以使你的代码与 Go 语言的其他部分保持一致。未来的兼容性:虽然
ioutil.ReadFile
在当前版本的 Go 中仍然可用,但它在未来的版本中可能会被完全移除。使用os.ReadFile
可以确保你的代码在未来版本的 Go 中仍然有效。性能:在某些情况下,
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), ) }