函数-defer

在函数中,程序员经常需要创建资源(比如:数据库连接、文件句柄、锁等),为了在函数执行完毕后,及时的释放资源,go的设计者提供defer(延时机制)。

go语言根据时间存储日志 golang日期转时间戳_字符串声明太大出现错误


go语言根据时间存储日志 golang日期转时间戳_golang 时间戳_02


细节说明:

1:当go执行到一个defer时,不会立即执行defer后的语句,而是将defer后的语句压入一个栈中,然后继续执行函数下一个语句。

2:当函数执行完毕后,再从defer栈中,一次从栈顶取出语句执行(遵守栈 先入后出的机制)

3:在defer将语句放入栈时,也会将相关的值拷贝同时入栈。

4:在go中编程创建资源(比如:数据库连接、文件句柄、锁等),之后可以执行

defer file.Close() defer connect.Close()

这样在defer后可以继续使用创建资源,当函数完毕后,系统会依次从栈中取出语句关闭资源,这种机制非常简洁,可以让程序员不用再为在什么时候关闭资源而烦心。

变量作用域

1)函数内部声明/定义的变量叫局部变量,作用域仅限于函数内部。

2)函数外部声明/定义的变量叫全局变量,作用域在整个包都有效,如果其首字母为大写,则作用域在整个程序有效。

3)如果变量时在一个代码块,比如for/if中,那么这个变量的作用域就在该代码块

字符串中常用的函数

1:统计字符串的长度,按字节 len(str)


go语言根据时间存储日志 golang日期转时间戳_golang时间戳转日期_03


2:字符串遍历,同时处理有中文的问题 r:=[]rune(str)


go语言根据时间存储日志 golang日期转时间戳_golang 时间戳_04

3:字符串转整数: n,err := strconv.Atol("12")


go语言根据时间存储日志 golang日期转时间戳_golang 时间戳_05

4:整数转字符串 str = strconv.Itoa(12345)


go语言根据时间存储日志 golang日期转时间戳_字符串声明太大出现错误_06

5: 字符串转 []byte : var bytes = []byte("hello go")

go语言根据时间存储日志 golang日期转时间戳_go语言根据时间存储日志_07


6:[]byte 转字符串 : str = string([]byte{99,22,33})


go语言根据时间存储日志 golang日期转时间戳_golang 时间戳_08


7:10进制转2,8,16进制: str = strconv.Formatlnt(123,2)
8:查找子串是否在指定的字符串中: strings.Contains("seafood","foo") //true
9:统计一个字符串有几个指定的子串 : strings.Count("cheese"."e") //3
10:不区分大小写的字符串比较(==是区分字母大小写的): fmt.Println(strings.EqualFold("abc","Abc")) //ture
11: 返回子串在字符串第一次出现的index值,如果没有就返回-1:
strings.Index("NLT_abc","abc") //4
12:返回子串在字符串最后一次出现的index,如没用返回-1。
strings.LastIndex("go_golang","go") //3
13:将指定的子串替换成 另外一个子串:
strings.Replace("go go hello","go","go语言".n) 
n可以指定你希望替换几个,如果n=-1,表示全部替换。
14:按照指定的某个字符,为分隔标识,将一个字符串拆分成字符串数组。
stings.Split("Hello,wrold,ok",",")
15:将字符串的字母进行大小写的转换:
strings.ToLower("GO") // strings.ToUpper("Go")//GO
16:将字符串左右两边的空格去掉:
strings.TrimSpace(" tn a long gopher ntrn ")
17:将字符串左右两边指定的字符去掉 : 
strings.Trim(" ! hello ! ", "!") //hello 
18:将字符串左边指定的字符去掉:
strings.TrimLeft(" ! hello ! ", "!") //hello!
19:将字符串右边指定的字符去掉:
strings.TrimRight(" ! hello ! ", "!") // !hello
20: 判断字符串是否以指定的字符串开头:
strings.HasPrefix("ftp:///321231231231","ftp") //true
20: 判断字符串是否以指定的字符串结束:
strings.HasSuffix("ftp:///321231231231.jpg","abc") //false

时间和日期相关函数


go语言根据时间存储日志 golang日期转时间戳_go语言根据时间存储日志_09


go语言根据时间存储日志 golang日期转时间戳_go语言根据时间存储日志_10

2006/01/02 15:04:05 这个字符串的各个数字是固定的,必须这样写

时间的常量


go语言根据时间存储日志 golang日期转时间戳_golang时间戳转日期_11

常量的作用;在程序中可用来获取指定时间单位的时间,比如想得到100毫秒即:

100 * time.Millisecond // time.second / 10 这种写法就是错误的

2)休眠

func Sleep (d Duration)


go语言根据时间存储日志 golang日期转时间戳_jquery字符串转数字_12

3)获取当前的unix时间戳 和 unixnano 时间戳 (作用是可以获取随机数字)

go语言根据时间存储日志 golang日期转时间戳_go语言根据时间存储日志_13

题目练习:编写一段代码来统计函数test()运行时间

go语言根据时间存储日志 golang日期转时间戳_golang时间戳转日期_14


go语言根据时间存储日志 golang日期转时间戳_golang 时间戳_15