golang学习笔记第二部分:8.时间、内置函数、错误处理

15、时间和日期相关函数

  1. 需要导入time包…
  2. 获取当前时间 time.Now()
  3. 时间信息now.Year() Month Day Hour Minute Second
  4. 格式化日期时间 方法1:fmt.Printf(“当前年月日 %d-%d-%d %d:%d:%d \n”, now.Year(), now.Month(), now.Day(), now.Hour(), now.Minute(),
    now.Second())
    方法2:fmt.Printf(now.Format(“2006/01/02 15:04:05”)) 固定数字位置,如01代表月份,04代表分钟
  5. 时间的常量 :在程序中可以获取指定单位的时间
    const (
    Hour Minute Second // 1000millisecond Millisecond //毫秒 1000Microsecond Microsecond //微秒 1000*Nanosecond Nanosecond
    //纳秒
    )
  6. time的Unix 和 UnixNano的使用:返回1970年7月1号到现在的秒、纳秒数:now.Unix(), now.UnixNano()
package main

import (
	"fmt"
	"strconv"
	"time"
)

func test03() {
	str := ""
	for i := 0; i < 100000; i++ {
		str += "aaa" + strconv.Itoa(i)
	}
}

func main() {
	//看看日期和时间相关函数和方法使用
	//1、获取当前时间
	now := time.Now()
	fmt.Printf("now=%v now type=%T\n", now, now)
	fmt.Printf("年=%v\n", now.Year())
	fmt.Printf("月=%v\n", int(now.Month())) //默认是英文月份缩写
	fmt.Printf("日=%v\n", now.Day())
	fmt.Printf("时=%v\n", now.Hour())
	fmt.Printf("分=%v\n", now.Minute())
	fmt.Printf("秒=%v\n", now.Second())

	//格式化日期时间
	fmt.Printf("当前年月日 %d-%d-%d %d:%d:%d \n", now.Year(), now.Month(), now.Day(), now.Hour(), now.Minute(), now.Second())
	//也可以格式化后赋值给变量
	datastr := fmt.Sprintf("当前年月日 %d-%d-%d %d:%d:%d \n", now.Year(), now.Month(), now.Day(), now.Hour(), now.Minute(), now.Second())
	fmt.Printf("datastr=%v\n", datastr)

	//2006/01/02 15:04:05 这串数字必须固定,顺序、样式可以调整
	fmt.Printf(now.Format("2006/01/02 15:04:05"))
	fmt.Println()
	fmt.Printf(now.Format("2006/01/02"))
	fmt.Println()
	fmt.Printf(now.Format("15:04:05"))
	fmt.Println()

	//Unix和UnixNano的使用
	fmt.Println(now.Unix(), now.UnixNano())

	//计算一个函数执行耗时
	//start := time.Now().Unix()
	//test03()
	//end := time.Now().Unix()
	//fmt.Println(start, end, end-start)
	//取当天0点和昨天0点
	//20190626152337870
	//20211207000000
	tm1 := time.Date(time.Now().Year(), time.Now().Month(), time.Now().Day(), 0, 0, 0, 0, time.Now().Location())
	tm2 := tm1.AddDate(0, 0, -1)
	fmt.Println(tm1.Format("20060102150405"), tm2.Format("20060102150405"))
}

16、内置函数

len:获取长度 new:用来分配内存,主要用来分配值类型,比如int、float32、struct,返回的是指针 make:用来分配内存,主要用来分配引用类型,比如chan、map、slice

package main

import "fmt"

func main() {
	num1 := 100
	//int类型、地址
	fmt.Printf("num1的类型%T,num1的值%v,num1的地址%v\n", num1, num1, &num1)

	//指针类型、地址,默认是0
	num2 := new(int)
	fmt.Printf("num2的类型%T,num2的值%v,num2的地址%v,*num2的值%v\n", num2, num2, &num2, *num2)
	//指针赋值,操作的是同一个内存地址,值改变了
	*num2 = 100
	fmt.Printf("num2的类型%T,num2的值%v,num2的地址%v,*num2的值%v\n", num2, num2, &num2, *num2)

}

17、错误处理

1)默认情况下,发生panic错误后,程序会退出 2)一般我们希望发生错误后,能捕获到错误,同时代码可以继续执行,因此需要错误处理机制:defer、recover 3)自定义错误,使用errors.New和panic内置函数

package main

import (
	"errors"
	"fmt"
)

func test() {
	//使用defer+recover捕获和处理异常
	defer func() {
		err := recover() //内置函数,可以捕获异常
		if err != nil {  //如果有错误
			fmt.Println("err=", err)
		}
	}()
	num1 := 10
	num2 := 0
	res := num1 / num2
	fmt.Println("res=", res)
}

//函数读取配置文件init.conf信息,如果文件名错误,抛出一个自定义错误
func readConf(name string) (err error) {
	if name == "config.ini" {
		return nil
	} else {
		return errors.New("读取配置文件错误.")
	}
}

func test02() {
	err := readConf("xxx.ini")
	if err != nil {
		//如果发生错误,输出错误及终止程序
		panic(err)
	}
	fmt.Println("test02后面的代码111")
}

func main() {
	test()
	// //加入错误处理后,后面的代码可以正常执行
	fmt.Println("后面的代码")

	//test02()
	//fmt.Println("test02后面的代码222")
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值