Golang——5、函数详解、time包及日期函数

golang时间戳格式化与解析 本文csdn博文链接:http://blog.youkuaiyun.com/screscent/article/details/53409708 本文QQ空间链接:http://user.qzone.qq.com/29185807/blog/1478769778golang中time库中格式化时间用Time.Format,解析时间用time.Parse。func Parse(layout, value str 阅读详情

1、函数

1.1、函数定义

函数是组织好的、可重复使用的、用于执行指定任务的代码块。本文介绍了Go语言中函数的相关内容。
Go语言中支持:函数、匿名函数和闭包。
Go语言中定义函数使用 func 关键字,具体格式如下:

在这里插入图片描述

定义两个函数sumFn和subFn,分别对两个整数进行求和与差值。

package main

import "fmt"

func sumFn(x int, y int) int {
	res := x + y
	return res
}

func subFn(x int, y int) int {
	res := x - y
	return res
}

func main() {
	res1 := sumFn(10, 2)
	res2 := subFn(5, 3)
	fmt.Println(res1, res2)
}

在这里插入图片描述


1.2、函数参数

类型简写,函数的参数中如果相邻变量的类型相同,则可以省略类型,例如:
在这里插入图片描述

package main

import "fmt"

func sumFn(x, y int) int {
	return x + y
}

func main() {
	fmt.Println(sumFn(5, 10))
}

在这里插入图片描述

可变参数:可变参数是指函数的参数数量不固定。Go语言中的可变参数通过在参数名后加…来标识。
注意: 可变参数通常要作为函数的最后一个参数。

package main

import "fmt"

func sumFn(x ...int) {
	fmt.Printf("值: %v, 类型: %T\n", x, x)
}

func main() {
	sumFn(1, 2, 3, 4, 5)
}

在这里插入图片描述
可以看到可变参数x的类型是切片,因此我们可以遍历切片计算出总和。

package main

import "fmt"

func sumFn(x ...int) int {
	fmt.Printf("值: %v, 类型: %T\n", x, x)
	sum := 0
	for _, v := range x {
		sum += v
	}
	return sum
}

func main() {
	res := sumFn(1, 2, 3, 4, 5)
	fmt.Println(res)
}

在这里插入图片描述

固定参数搭配可变参数使用如下:

package main

import "fmt"

func sumFn(x int, y ...int) int {
	fmt.Printf("值: %v, 类型: %T\n", y, y)
	sum := x
	for _, v := range y {
		sum += v
	}
	return sum
}

func main() {
	res := sumFn(100, 1, 2, 3, 4)
	fmt.Println(res)
}

在这里插入图片描述


1.3、函数返回值

Go语言中通过return关键字向外输出返回值。
Go语言中函数支持多返回值,函数如果有多个返回值时必须用()将所有返回值包裹起来。

例如实现一个clac函数,既计算两数之和,也计算两数之差,返回两个返回值。

package main

import "fmt"

func clac(x, y int) (int, int) {
	sum := x + y
	sub := x - y
	return sum, sub
}

func main() {
	a, b := clac(10, 2)
	fmt.Println(a, b)
}

在这里插入图片描述

返回值命名:函数定义时可以给返回值命名,并在函数体中直接使用这些变量,最后通过return关键字返回。

package main

import "fmt"

func clac(x, y int) (sum, sub int) {
	sum = x + y
	sub = x - y
	return
}

func main() {
	a, b := clac(8, 3)
	fmt.Println(a, b)
}

在这里插入图片描述


将之前我们写的选择排序和冒泡排序实现成一个函数:

package main

import "fmt"

func SelectSort(arr []int) {
	for i := 0; i < len(arr); i++ {
		for j := i + 1; j < len(arr); j++ {
			if arr[i] > arr[j] {
				tmp := arr[i]
				arr[i] = arr[j]
				arr[j] = tmp
			}
		}
	}
}

func BubbleSort(arr []int) {
	for i := 0; i < len(arr); i++ {
		for j := 0; j < len(arr)-i-1; j++ {
			if arr[j] < arr[j+1] {
				tmp := arr[j]
				arr[j] = arr[j+1]
				arr[j+1] = tmp
			}
		}
	}
}

func main() {
	var sliceA = []int{11, 3, 213, 45, 63, 0, 10}
	SelectSort(sliceA)
	fmt.Println(sliceA)
	BubbleSort(sliceA)
	fmt.Println(sliceA)
}

在这里插入图片描述

下面实现一个函数将map类型数据按照key进行排序,把key=>value添加到字符串中返回。

package main

import (
	"fmt"
	"sort"
)

func mapSort(map1 map[string]string) string {
	var arr []string
	for k, _ := range map1 {
		arr = append(arr, k)
	}
	sort.Strings(arr)
	var res string
	for _, v := range arr {
		res += fmt.Sprintf("%v=>%v", v, map1[v])
	}
	return res
}

func main() {
	m1 := map[string]string{
		"username": "张三",
		"age":      "20",
		"sex":      "男",
		"height":   "180cm",
	}
	res := mapSort(m1)
	fmt.Println(res)
}

在这里插入图片描述

函数变量作用域:
全局变量:全局变量是定义在函数外部的变量,它在程序整个运行周期内都有效 (全局作用域)
局部变量:局部变量是函数内部定义的变量,函数内定义的变量无法在该函数外使用 (局部作用域)


1.4、函数类型与变量

定义函数类型:我们可以使用type关键字来定义一个函数类型,具体格式如下:
在这里插入图片描述
上面语句定义了一个calculation类型,它是一种函数类型,这种函数接收两个int类型的参数并且返回一个int类型的返回值。

package main

import "fmt"

type clac func(int, int) int
type myInt int

func add(x, y int) int {
	return x + y
}

func sub(x, y int) int {
	return x - y
}

func main() {
	var c clac
	c = add
	fmt.Printf("值: %v, 类型: %T\n", c, c)
	fmt.Println(c(3, 6))

	f := sub
	fmt.Printf("值: %v, 类型: %T\n", f, f)
	fmt.Println(f(10, 5))

	var a int = 10
	var b myInt = 20
	fmt.Printf("a的类型: %T, b的类型: %T\n", a, b)
	fmt.Println(a + int(b))
}

在这里插入图片描述
可以看到c的类型为main.clac,而f的类型则是func(int, int) int。另外a和b的类型也是不同的,所以相加时需要进行强转。


1.5、函数作参数和返回值

函数可以作为另一个函数的参数:

package main

import "fmt"

func add(x, y int) int {
	return x + y
}

func sub(x, y int) int {
	return x - y
}

type clacType func(int, int) int

func clac(x, y int, cb clacType) int {
	return cb(x, y)
}

func main() {
	res1 := clac(10, 5, add)
	res2 := clac(10, 5, sub)
	res3 := clac(10, 5, func(x, y int) int {
		return x * y
	})
	fmt.Println(res1, res2, res3)
}

在这里插入图片描述

对于前两个计算,我们传入了已有的函数add和sub。第三个计算我们传入了一个匿名函数,通俗来说就是没有名字的函数。

函数也可以作为返回值:

package main

import "fmt"

func add(x, y int) int {
	return x + y
}

func sub(x, y int) int {
	return x - y
}

type clacType func(int, int) int

func do(op string) clacType {
	switch op {
	case "+":
		return add
	case "-":
		return sub
	case "*":
		return func(x, y int) int {
			return x * y
		}
	default:
		return nil
	}
}

func main() {
	f1 := do("+")
	f2 := do("*")
	fmt.Println(f1(3, 4), f2(3, 4))
}

在这里插入图片描述


1.6、匿名函数、函数递归和闭包

匿名函数就是没有函数名的函数, 匿名函数的定义格式如下:
在这里插入图片描述
匿名函数因为没有函数名, 所以没办法像普通函数那样调用, 所以匿名函数需要保存到某个变量或者作为立即执行函数。

package main

import "fmt"

func main() {
	// 匿名自执行函数
	func() {
		fmt.Println("test...")
	}()

	var fn = func(x, y int) int {
		return x * y
	}
	fmt.Println(fn(3, 4))

	// 匿名自执行函数接收参数
	func(x, y int) {
		fmt.Println(x + y)
	}(3, 4)
}

在这里插入图片描述

函数内部可以再调用其他函数,也可以调用本函数,调用本函数就是函数递归。
比如,利用递归计算出1 + 2 + 3 + … + 100

package main

import "fmt"

func sum(x int) int {
	if x == 1 {
		return 1
	}
	return x + sum(x-1)
}

func main() {
	fmt.Println(sum(100))
}

在这里插入图片描述


全局变量的特点:常驻内存,污染全局。
局部变量的特点:不常住内存,不污染全局。
这里的污染全局就比如,在全局定义了一个变量a,在某个函数内容又定义了一个变量a,那么在访问的时候就会优先访问局部变量a。
闭包:可以让一个变量常驻内存且不污染全局。

闭包:
1、闭包是指有权访问另一个函数作用域中的变量的函数。
2、创建闭包的常见的方式就是在一个函数内部创建另一个函数,通过另一个函数访问这个函数的局部变量。

如下:

package main

import "fmt"

func adder1() func() int {
	var x = 10
	return func() int {
		return x + 1
	}
}

func adder2() func(int) int {
	var x = 10
	return func(y int) int {
		x += y
		return x
	}
}

func main() {
	var fn1 = adder1()
	fmt.Println(fn1())
	fmt.Println(fn1())
	fmt.Println(fn1())

	fn2 := adder2()
	fmt.Println(fn2(10))
	fmt.Println(fn2(10))
	fmt.Println(fn2(10))
}

在这里插入图片描述
由于闭包里作用域返回的局部变量资源不会被立刻销毁回收,所以可能会占用更多的内存。过度使用闭包会导致性能下降,建议在非常有必要的时候才使用闭包。


1.7、defer语句

Go语言中的defer语句会将其后面跟随的语句进行延迟处理。在defer归属的函数即将返回时,将延迟处理的语句按defer定义的逆序进行执行,也就是说,先被 defer 的语句最后被执行,最后被defer的语句,最先被执行。

package main

import "fmt"

func main() {
	fmt.Println("开始")
	defer fmt.Println(1)
	defer fmt.Println(2)
	defer fmt.Println(3)
	fmt.Println("结束")
}

在这里插入图片描述
上面的中间三条打印语句被延迟执行了,并且执行的时候会逆序执行,有点像栈的结构特点。

package main

import "fmt"

func test() {
	fmt.Println("开始")
	defer func() {
		fmt.Println("aaa")
		fmt.Println("bbb")
	}()
	fmt.Println("结束")
}

func main() {
	test()
}

在这里插入图片描述


defer的执行时机:
在这里插入图片描述


defer在命名返回值和匿名返回函数中的表现不同。

package main

import "fmt"

func f1() int {
	var x = 0
	defer func() {
		x++
	}()
	return x
}

func f2() (x int) {
	defer func() {
		x++
	}()
	return x
}

func main() {
	fmt.Println(f1())
	fmt.Println(f2())
}

在这里插入图片描述
f1()的分析:
​​返回值机制​​:匿名返回值时,return x 实际上是将x的值(此时为0)​​复制到一个临时返回值变量​​中。
​​defer的执行​​:defer在return之后执行,修改的是局部变量x(从0→1),但​​临时返回值变量不受影响​​。
​​结果​​:函数返回临时变量存储的值0。

f2()的分析:
​​返回值机制​​:命名返回值时,x既是局部变量又是返回值变量。return x 直接返回x变量本身(此时值为0)。
​​defer的执行​​:defer在return之后执行,直接修改返回值变量x(从0→1)。
​​结果​​:函数返回被修改后的 x(值为 1)。


下面再来看一个例子,思考一下输出什么?

package main

import "fmt"

func f1() int {
	x := 5
	defer func() {
		x++
	}()
	return x
}

func f2() (x int) {
	defer func() {
		x++
	}()
	return 5
}

func f3() (y int) {
	x := 5
	defer func() {
		x++
	}()
	return x
}
func f4() (x int) {
	defer func(x int) {
		x++
	}(x) //defer注册要延迟执行的函数时该函数所有的参数都需要确定其值
	return 5
}

func main() {
	fmt.Println(f1())
	fmt.Println(f2())
	fmt.Println(f3())
	fmt.Println(f4())
}

f1()分析:
1、匿名返回值(未命名)
2、return x 将 x 的当前值 (5) 复制到​​临时返回值变量​​
3、defer 增加局部变量 x 的值 (5→6),但​​不影响临时返回值​​
4、返回临时变量的值 (5)

f2()分析:
1、命名返回值 x
2、return 5 等同于 x = 5
3、defer 直接修改返回值变量 x (5→6)
4、返回被修改后的x

f3()分析:
1、命名返回值 y
2、return x 等同于 y = x (将局部变量 x 的值 5 复制给 y)
3、defer 修改局部变量 x (5→6),但​​不影响返回值变量 y​​
4、返回 y (5)

f4()分析:
1、命名返回值 x
2、defer 接受参数时,​​参数值在注册时确定​​:
此时 x 还是初始零值 0(命名返回值初始化为0)
传入的 x 是值拷贝 (0)
3、return 5 将返回值变量 x 设为 5
4、defer 执行时,操作的是​​参数拷贝​​(0→1),不影响返回值变量 x
5、返回 x (5)


再来看另一个案例:

package main

import "fmt"

func calc(index string, a, b int) int {
	ret := a + b
	fmt.Println(index, a, b, ret)
	return ret
}

func main() {
	x := 1
	y := 2
	defer calc("AA", x, calc("A", x, y))
	x = 10
	defer calc("BB", x, calc("B", x, y))
	y = 20
}

在这里插入图片描述


1.8、panic和recover

在这里插入图片描述

Go 语言中目前是没有异常机制,但是可以使用panic/recover模式来处理错误。

package main

import "fmt"

func fn() {
	defer func() {
		err := recover()
		if err != nil {
			fmt.Println("err:", err)
		}
	}()
	panic("抛出一个异常")
}

func main() {
	fn()
}

在这里插入图片描述

实现一个计算两数相除的函数,如果被除数为0,那么就会程序崩溃,这时候我们就可以使用defer + recover来处理,此时程序不会直接崩溃,会继续向后执行。

package main

import "fmt"

func div(x, y int) int {
	defer func() {
		err := recover()
		if err != nil {
			fmt.Println("err:", err)
		}
	}()
	return x / y
}

func main() {
	fmt.Println(div(10, 0))
	fmt.Println(div(10, 2))
	fmt.Println(div(10, 5))
}

在这里插入图片描述


defer、panic、recover的配合使用:

package main

import (
	"errors"
	"fmt"
)

func readFile(fileName string) error {
	if fileName == "main.go" {
		return nil
	} else {
		return errors.New("读取文件失败")
	}
}

func myFn() {
	defer func() {
		err := recover()
		if err != nil {
			fmt.Println("err:", err)
		}
	}()
	err := readFile("xxx.go")
	if err != nil {
		panic(err)
	}
}

func main() {
	myFn()
	fmt.Println("继续执行...")
}

在这里插入图片描述


2、time包以及日期函数

时间和日期是我们编程中经常会用到的,在golang中time包提供了时间的显示和测量用的函数。

2.1、time.Now()获取当前时间

package main

import (
	"fmt"
	"time"
)

func main() {
	timeObj := time.Now()
	fmt.Println(timeObj)
	year := timeObj.Year()
	month := timeObj.Month()
	day := timeObj.Day()
	hour := timeObj.Hour()
	minute := timeObj.Minute()
	second := timeObj.Second()
	fmt.Printf("%d-%02d-%02d %02d:%02d:%02d\n", year, month, day, hour, minute, second)
}

在这里插入图片描述

2.2、Format方法格式化输出日期字符串

格式化的模板为Go的出生时间2006年1月2号15点04分。
2006->年
01->月
02->日
03->时, 03表示12小时制,15表示24小时制。
04->分
05->秒

package main

import (
	"fmt"
	"time"
)

func main() {
	timeObj := time.Now()
	str1 := timeObj.Format("2006-01-02 15:04:05")
	fmt.Println(str1)

	str2 := timeObj.Format("2006-01-02 03:04:05")
	fmt.Println(str2)
}

在这里插入图片描述


2.3、获取当前时间戳

时间戳是自1970年1月1日(08:00:00GMT)至当前时间的总秒数。 它也被称为Unix时间戳(UnixTimestamp)。

timeObj := time.Now()
unixtime := timeObj.Unix()
fmt.Println("当前时间戳:", unixtime)

unixNatime := timeObj.UnixNano()
fmt.Println("当前时间戳:", unixNatime)

在这里插入图片描述
Unix获取秒级别的时间戳,UnixNano获取纳秒级别的时间戳。


2.4、时间戳转换成日期字符串

unixTime := 1748842817
timeObj := time.Unix(int64(unixTime), 0)
var str = timeObj.Format("2006-01-02 15:04:05")
fmt.Println(timeObj)
fmt.Println(str)

在这里插入图片描述
使用time.Unix函数用于将时间戳转换成一个时间对象,第一个参数是int64的秒级时间戳,第二个参数是int64的纳秒级时间戳。


2.5、日期字符串转时间戳

func time.ParseInLocation(layout string, value string, loc *time.Location) (time.Time, error)

这是该函数的声明,第一个参数表示格式化模板,第二个参数表示要格式化的字符串,第三个参数传入time.Local即可,该函数有两个返回值,第一个返回值就是一个时间对象,然后我们通过这个事件对象调用Unix函数即可获取时间戳。

var str = "2025-06-03 09:00:00"
var tmp = "2006-01-02 15:04:05"
timeObj, _ := time.ParseInLocation(tmp, str, time.Local)
fmt.Println(timeObj)
fmt.Println(timeObj.Unix())

在这里插入图片描述


2.6、时间间隔和时间操作函数

time.Duration是time包定义的一个类型,它代表两个时间点之间经过的时间,以纳秒为单位。time.Duration表示一段时间间隔,可表示的最长时间段大约290年。
time 包中定义的时间间隔类型的常量如下:

const (
	Nanosecond Duration = 1
	Microsecond = 1000 * Nanosecond
	Millisecond = 1000 * Microsecond
	Second = 1000 * Millisecond
	Minute = 60 * Second
	Hour = 60 * Minute)
}

例如:time.Duration表示1纳秒,time.Second表示1秒。
上面的常量可以搭配时间操作函数来使用,例如Add函数的使用:

timeObj := time.Now()
fmt.Println(timeObj)
timeObj = timeObj.Add(time.Hour) // 增加一个小时
fmt.Println(timeObj)

在这里插入图片描述


2.7、定时器

1、使用time.NewTicker(时间间隔)来设置定时器。

ticker := time.NewTicker(time.Second)
n := 5
for t := range ticker.C {
	fmt.Println(t)
	n--
	if n == 0 {
		ticker.Stop()
		break
	}
}

在这里插入图片描述

2、time.Sleep(time.Second)实现定时器。

for i := 0; i < 5; i++ {
	fmt.Println("我正在执行定时任务...")
	time.Sleep(time.Second)
}

在这里插入图片描述

【Golang】Go语言中时间time相关处理方法 在Go语言中,time 包是处理时间和日期的核心。它提供了丰富的函数和方法,用于显示、测量、计算、格式化、解析时间等。 阅读详情

相关推荐

golang时间格式化

文章目录简介例子 简介 时间格式在程序,数据库,日志中都是非常重要的角色,go 中自带有 time 包方便我们来进行时间的格式化操作 例子 func main() { // now now := time.Now() // year year := now.Year() // month month := now.Month() // day day := now.Day() // hour hour := now.Hour() // minute minute := now.Min

abcnull 的博客 3944

golang time.Time 时间格式 format 布局字符 layout 整理

go语言中的时间格式字符串和我们常见的其他语言不太一样, 他的格式化字符串是一个时间,即2006-01-02 15:04:05 , 细心的你可能会发现,这个是一个很特别的时间, 他的每一段都是唯一的,这个特别的时间的格式和我们常见的其他语言中的时间格式字符串 Y-m-d H:i:s 的效果是一样的。

Tekin 是深耕技术 20 年的全栈实战派专家,精通 Go/Python/Java 等多语言开发。博客专注技术原理与实战结合,深度解析 Python 高阶编程、Go 语言架构、数据库优化等硬核内容。涵盖并发编程、机器学习、云原生等前沿领域,通过真实案例拆 2298

长短期记忆网络(Long Short-Term Memory networks, LSTM)

如何简单的理解LSTM——其实没有那么复杂:

weixin_39910711的博客 2万+

golang 格式化时间总结

golang 中经常需要格式化时间和日期来满足不同的业务需求,下面总结格式化时间日期中遇到的问题。 golang time包 时间日期格式化定义 go 的time package 提供了time.Format函数,用来对时间进行格式化输出;类似的还有time.Parse用来解析字符串类型的时间到time.Time。这是两个互逆的函数。 下面看golang中time包对于时间的详细定义 月份 1,0...

云淡风轻 4万+

Verilog语法之十:过程块(initial和always)

我将Verilog的语法进行了总结,写了13篇文章,让小白“快速见识猪如何跑”,每一篇讲解一类语法,结合正确的示例代码和错误的示例代码,有的章节对个别语法进行了归纳总结,帮助初学者加深理解。

航天领域资深码农,型号经验丰富,一线干货分享 1672

华中科技大学计算机组成原理-单总线CPU设计(全部通关)

【计算机组成原理】 单总线CPU实验 华中科技大学-计算机组成原理 实验三 单总线CPU设计 第1关 MIPS指令译码器设计 第2关 单总线CPU微程序入口查找逻辑 第3关 单总线CPU微程序条件判别测试逻辑 第4关 单总线CPU微程序控制器设计 第5关 采用微程序的单总线CPU设计 第6关 现代时序硬布线控制器状态机设计 第7关 现代时序硬布线控制器设计

紫荆鱼的博客 4万+

【Go】time 包

文章目录一、time 包简介二、原理三、时间的获取1. 获取当前时间 - time.Now()2. 获取时间戳 - Unix()、UnixNano()3. 获取当前是星期几 - Weekday()四、时间操作函数1. Add2. Sub3. Equal4. Before5. After五、定时器六、时间格式化七、参考链接 一、time 包简介 时间和日期是我们开发中经常会用到的,Go语言中的 time 包提供了 时间显示和测量 等所用的函数,本文介绍一下 time 包的基本用法。 二、原理 时间一般包含

weixin_44211968的博客 3267

避坑指南:LISFLOOD-FP模型数据单位、参数文件与results文件夹结果解析全攻略

本文详细解析了LISFLOOD-FP洪水模拟模型的关键应用环节,包括数据单位校验、参数文件优化及结果文件解读与可视化。特别针对常见的单位混淆问题,提供了从DEM到边界条件的全面校验方法,并深入剖析了.par参数文件的配置技巧,帮助用户避免模型崩溃和结果失真。

weixin_42533622的博客 237

Go语言的time包与math包

1.背景介绍 1. 背景介绍 Go语言的time包和math包是Go语言标准库中的两个重要包,它们提供了时间和数学计算的基本功能。time包提供了处理日期和时间的功能,包括获取当前时间、格式化时间、计算时间差等。math包提供了基本的数学计算功能,包括四则运算、三角函数、指数函数、对数函数等。 这两个包在Go语言中的应用非常广泛,它们是Go语言开发者在处理时间和数学计算时不可或缺的工具。在本...

AI天才研究院 1265

STM32电机库(ST-MC-Workbench)实战指南——三电阻电流采样电路参数配置详解

本文详细解析了STM32电机库(ST-MC-Workbench)中三电阻电流采样电路的参数配置方法,涵盖电阻选型、放大增益计算、滤波时间优化等关键步骤。通过实战案例和调试技巧,帮助工程师快速掌握电流采样技术,提升电机控制系统的精度与稳定性。特别针对ST-MC-Workbench界面参数设置提供了详细指导。

weixin_29186249的博客 509

VN5620以太网测试——环境搭建篇

CANoe(CAN open environment)VN5620 :是一个紧凑而强大的接口,用于以太网网络的分析、仿真、测试和验证。VN5620 接口支持各种可能的应用。它适用于与其他总线系统、网络参与(例如在模拟和生成帧、测试中的负载和错误)的同步以太网监控。在2021年Vector公司的以太网接口卡VN5610和VN5640设备已经陆续停产,相应被VN5620和VN5650代替。

诊断协议那些事儿's blog 8935

Golang time包

时间和日期是我们编程中经常会用到的,本文主要介绍了 Go 语言内置的 time 包的基本用法。time 包提供了一些关于时间显示和测量用的函数。time 包中日历的计算采用的是公历,不考虑润秒。

gopher9511的博客 1254

PreScan快速入门到精通第十一讲之PreScan道路标记,建筑物、抽象物体及交通标识

道路标记目的:路标是为了完善智能驾驶实验场景。用途:道路标记是附加在道路段上的。标记的大小{小、大}、颜色,以及相对于路段的位置和方向可以在属性编辑器中设置。也可以指定褪色和孔洞,类似于路段自动添加标记的配置。在GUI中的位置:作为一个预定义的库元素格式:NAMBOX: 汇编表中不知道。PreScan包含三个不同国家的标记:荷兰、日本和美国。可以通过在国家首选项中切换国家来隐藏或显示。附件道路标线附在路段上,并相对于路段原点定位。默认情况下,道路标记被固定在路段上,用小锚点表示。11.2 建筑物目...

小明师兄的博客 1805

Go 语言中的日期与时间

time包为我们提供了一个数据类型time.Time(作为值使用)以及显示和测量时间和日期的功能函数。当前时间可以使用time.Now()获取,或者使用t.Day()t.Minute()等等来获取时间的一部分;你甚至可以自定义时间格式化字符串,例如:将会输出21.07.2011。Duration类型表示两个连续时刻所相差的纳秒数,类型为int64。Location类型映射某个时区的时间,UTC 表示通用协调世界时间。包中的一个预定义函数可以根据一个格式化字符串来将一个时间ttime.ANSIC或。

栗筝i的博客 3599

Python全栈项目--手机语音远程控制智能家居系统(含嵌入式控制)

摘要:本项目实现了一个基于Python全栈的智能家居语音控制系统,支持手机端语音指令控制家居设备。系统采用FastAPI后端+Vue3前端的架构,集成Web Speech API实现语音识别,通过嵌入式设备(如ESP32)执行硬件控制。功能包括用户认证、设备管理、场景联动、指令解析和日志记录,支持HTTP轮询和直推两种命令下发模式。项目涵盖物联网全链路开发,适用于课程设计或毕业设计原型开发。

exlink2012的专栏 882

TMS_WebGMaps_1.9.8.0_Full_Source

TMS_WebGMaps_1.9.8.0_Full_Source 全源码 delphi cbuilder

Go语言 time 包详解:从基础到实战

Go语言标准库的 time 包提供了全面精准的时间处理工具,包含两个核心类型:time.Time表示具体时间点,time.Duration表示时间间隔。time包支持获取当前时间(Now())、创建指定时间(Date())和解析时间字符串(Parse/ParseInLocation)。时间解析采用独特的"2006-01-02 15:04:05"参考模板,提供纳秒级精度和时区处理能力,适用于日志记录、定时任务等场景。

莫踌躇 1354

OV9734 DATASHEET,完整规格书

OV9734完整规格书,包括电气参数,尺寸规格,寄存器配置表等

golang中级进阶(一):time包、日期函数、指针详解

一、time包 1. time包的基本使用 package main import ( "fmt" "time" ) func main() { // 1.time包引用及基本使用 now := time.Now() fmt.Println(now) // 2022-04-08 15:07:36.11502 +0800 CST m=+0.000130549 // 获取可阅读的 Y := now.Year() m := now.Month() d := now.D

genziisme的专栏 1359

复分析 阿尔福斯(Ahlfors) 第三版答案 英文

答案分为十章,有部分习题没有答案,全英文复分析阿尔福斯(Ahlfors) 第三版答案

win10 跳过U8环境检测的IE WebControls.rar

win10 安装u8的时候 提示IE WebControls 不通过,这个工具可以欺骗u8的检查。 跳过U8环境检测的IE WebControls。提示导入失败后,重新检测通过。

golang中time包用法

time包中包括两类时间:时间点(某一时刻)和时常(某一段时间) 1时间常量(时间格式化) const ( ANSIC = "Mon Jan _2 15:04:05 2006" UnixDate = "Mon Jan _2 15:04:05 MST 2006" RubyDate = "Mon Jan 02 15:04:05 -0700 2

chenbaoke的专栏 6万+

根据秒数获取时分秒_Go 使用time包获取时间戳与日期格式化

golang使用time包获取时间戳与日期格式化在开发中,不论使用什么编辑语言,都离不开日期格式化处理。先来熟悉几个时间的概念:时区:全球划分为24个时区(东、西各12个时区)。规定英国(格林尼治天文台旧址)为中时区(零时区)。时间戳:即Unix时间戳,是从1970年1月1日(UTC/GMT的午夜)开始所经过的秒数,不考虑闰秒。为什么是从1970年开始呢,因为Unix是20世纪70年代初...

weixin_36244175的博客 2995

【GO】“time“ 包基础介绍

1. 时间和日期的表示 基本时间获取 时间组件的访问 时间戳的使用 2. 时间的构造 基本的时间构造 构造不同时区的时间 使用不同的时间单位 时间和日期的边界 3. 时间格式化与解析 时间格式化(Format) 时间解析(Parse) 4. 时间的比较、计算 时间比较 时间加减 复杂的时间计算 使用 Duration 类型 5. 时间间隔和定时器 时间间隔(Duration) 使用 time.Sleep 实现延时 使用 time.Tick 创建定时器 使

Bobowen的博客 1651

Go之time包日期操作,时间戳与日期相互转换

在Go中,时间操作需要导入time包。 import "time" 获取当前时间 package main import ( "fmt" "time" ) func main() { // 获取当前时间 t := time.Now() fmt.Printf("now=%v\n", t) /* time.Now() 返回类型为time.Time 查看time包下面的Time是结构体,该结构体包含一些方法(只列出其中一些)

qczxl520的博客 9975

Golang标准库-Time 时间操作大全

平时开发过程中,时间相关的操作用的还是很多的。接下来就与大家一起总结下与时间有关的操作,主要涉及到 time 包,核心数据结构是 time.Time,如下: type Time struct { wall uint64 ext int64 loc *Location } 1.获取时间相关函数 获取当前时间 // 返回当前时间,注意此时返回的是 time.Time 类型 now := time.Now() fmt.Println(now) // 当前时间戳 fmt.Println(

weixin_44014995的博客 2740

Golang 时间和日期相关函数

分享一套我整理的面试干货,这份文档结合了我多年的面试官经验,站在面试官的角度来告诉你,面试官提的那些问题他最想听到你给他的回答是什么,分享出来帮助那些对前途感到迷茫的朋友。

2401_83817418的博客 1199

GO时间和日期函数详解

package main import ( “fmt” “time” ) func main(){ /* 说明:在编程中,程序员会经常使用到日期相关的函数,比如;统计某段代码执行花费的时间等等 1)时间和日期i昂管函数,需要导入time包 2)time.Time类型,用语表示时间 3)获取到当前时间的方法: now := time.Now()//now的类型就是time.Time 4)如何获取到其...

qq_43187004的博客 523

【GoLang基础】Go常用时间和日期函数详解

Go 语言标准库中的time包提供了丰富的时间和日期处理函数和类型。

玦尘的博客 1046

【Go 基础篇】Go语言日期与时间函数详解:时间的掌控与转化

Go语言提供了丰富的日期与时间处理函数,涵盖了从获取当前时间到格式化、时区转换、定时器和计时器的功能。通过灵活使用这些函数,结合time.Time结构体的方法,开发者可以轻松处理各种与时间相关的任务,为应用程序添加强大的时间处理能力。无论是处理日志、定时任务还是事件调度,Go语言的时间处理函数都能满足各种需求。

繁依Fanyi的博客 2753
上一篇: Golang——4、数组、切片和map
下一篇: Golang——7、包与接口详解
评论 2
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值