> 文档中心 > Go语言学习教程(六)

Go语言学习教程(六)

一、switch结构介绍

* switch也属于条件判断的语句

* 支持多种写法,和if .. else if ...else 结构的功能类似,但是里面的细节需要注意的地方更多

* switch基本语法

switch [定义变量;] [变量]{

  case [条件/具体值]:

      //代码

  case [条件/具体值]:

      //代码

  default:

    //代码

}

* switch每个case分支默认只执行一个且是从上向下执行

* default上下位置没有影响,当且仅当所有case都不成立时才执行default

* 当变量只有固定的几个值时可以使用switch结构

func main() {

    num := 16

    switch num {

    case 2:

        fmt.Println("2进制")

    case 8:

        fmt.Println("8进制")

    case 10:

        fmt.Println("10进制")

    case 16:

        fmt.Println("16进制")

    default:

        fmt.Println("内容不正确")

    }

    fmt.Println("程序结束")

}

* switch也支持在条件位置定义变量,变量有效范围为当前switch

func main() {

    switch num := 16; num {

    case 2:

        fmt.Println("2进制")

    case 8:

        fmt.Println("8进制")

    case 10:

        fmt.Println("10进制")

    case 16:

        fmt.Println("16进制")

    default:

        fmt.Println("内容不正确")

    }

    fmt.Println("程序结束")

}

* 当条件是范围而不是固定值时

func main() {

    score := 71

    switch {

    case score >= 90:

        fmt.Println("优秀")

    case score >= 80:

        fmt.Println("良好")

    case score >= 70:

        fmt.Println("中等")

    case score >= 60:

        fmt.Println("及格")

    default:

        fmt.Println("不及格")

    }

    fmt.Println("程序结束")

}

* case条件支持多个值,每个值使用逗号分开

func main() {

    month := 5

    switch month {

    case 1, 3, 5, 7, 8, 10, 12:

        fmt.Println("31天")

    case 2:

        fmt.Println("28或29天")

    default:

        fmt.Println("30天")

    }

    fmt.Println("程序结束")

}

* switch结构中最多只能执行一个case,使用fallthrough可以让下一个case/default继续执行

* break可以用在switch和循环中,表示立即结束,无论当前结构后面还有多少代码

二、时间类型概述

* 时间类型在实际开发中使用频率很高,代表现实世界的时间

* 在Go语言中时间类型不是关键字而是使用time包下的Time结构体

* 时间类型默认显示为UTC,所以经常需要把时间类型转换为字符串,显示成我们所熟悉的格式

* 声明Time时,默认时间是无意义的

func main() {

    var t time.Time

    fmt.Println(t)//输出:0001-01-01 00:00:00 +0000 UTC

}

* 可以通过time包下的Now()函数获取操作系统当前时间

t := time.Now()

* 也可以通过时间戳创建时间类型变量(距离1970年1月1日的纳秒差)

/*

    1秒(s)=1000毫秒(ms)

    1秒(s)=1000000微秒(μs)

    1秒(s)=1000000000纳秒(ns)

     */

    t := time.Now()

    t1 := time.Unix(0, t.UnixNano()) //根据时间戳创建时间.第二个值[0, 999999999]外合法

    fmt.Println(t.String())

    fmt.Println(t1)

* 可以根据自己要求创建时间

* 在time包下提供了大量的函数或方法获取时间的某一项

    t := time.Now()

    fmt.Println(t)

    fmt.Println(t.Year())       //年

    fmt.Println(int(t.Month())) //月

    fmt.Println(t.Day())        //日

    fmt.Println(t.Date())       //三个参数,分别是:年,月,日

    fmt.Println(t.Hour())       //小时

    fmt.Println(t.Minute())     //分钟

    fmt.Println(t.Second())     //秒

    fmt.Println(t.Clock())      //三个参数,分别是:小时,分钟,秒

    fmt.Println(t.Nanosecond()) //纳秒

    fmt.Println(t.Unix())       //秒差

    fmt.Println(t.UnixNano())   //纳秒差

* Time转换为string

    t := time.Now()

    //参数必须是这个时间,格式任意

    s := t.Format("2006-01-02 15:04:05", )

    fmt.Println(s)

* string转换为Time

    s:="2022-02-04 22:02:04"

    t,err:=time.Parse("2006-01-02 15:04:05",s)

    fmt.Println(t,err)

三、常用数学函数

* math包提供了基本数学常数和数学函数

* math包提供的数学常数

* 列举出常用的数学函数

    var i, j float64 = 12.3, 9.6

    //向下取整,

    fmt.Println(math.Floor(i)) //输出:12

    //向上取整

    fmt.Println(math.Ceil(i)) //输出:13

    //绝对值

    fmt.Println(math.Abs(i)) //输出:12.3

    //返回值分别整数位和小数位,小数位可能出现误差

    num, decimal := math.Modf(i)

    fmt.Println(num, decimal)

    //返回两个变量中大的值

    fmt.Println(math.Max(i, j)) //输出:12.3

    //返回两个变量中小的值

    fmt.Println(math.Min(i, j)) //输出:9.6

    //x的y次方

    fmt.Println(math.Pow(3, 2)) //输出:输出9

    //四舍五入

    fmt.Println(math.Round(i)) //输出:12

四、随机数

* math/rand实现了伪随机数生成器

* 在Go语言中随机数需要设置种子,如果不设置种子随机数的结果每次运行都相同。

* 默认种子是1,且相同种子产生的随机数是相同的.

* 可以使用当前时间的纳秒差计算随机数,在一定程度上保证了种子的唯一性

    rand.Seed(time.Now().UnixNano())

    fmt.Println(rand.Int63n(10))

开发者涨薪指南 Go语言学习教程(六) 48位大咖的思考法则、工作方式、逻辑体系