Day 03 strings 和 strconv 的使用, 时间和日期类型 流程控制 函数
Day 03
strings 和 strconv 的使用
strings.HasPrefix(str string, prefix string) bool:判断字符串str是否以prefix开头strings.HasSuffix(str string, suffix string) bool:判断字符串str是否以suffix结尾strings.Index(str string, substr string) int: 判断substr在str中首次出现的位置,如果没有出现则返回-1strings.LastIndex(str string, substr string) int: 判断substr在str中最后出现的位置,如果没有出现则返回-1strings.Replace(str string, old string, new string, n int) string:将str中的old字符串替换成new字符串,n表示替换的个数,如果 $n \lt 0$ 则表示替换个数无限制。strings.Count(str string, substr string) int:字符串计数,但是str中出现的substr并不叠加。例如:eee中出现ee的次数为1strings.Repeat(str string, count int) string:重复count次strstrings.ToUpper(str string) string:字符串转为大写strings.ToLower(str string) string:字符串转为小写strings.TrimSpace(str string) string:去掉str字符串中的首尾空白字符strings.Trim(str string, cutset string):去掉str字符串中首尾在cutset中出现的字符strings.TrimLeft(str string, cutset string):去掉str字符串首部在cutset中出现的字符strings.TrimRight(str string, cutset string):去掉str字符串尾部在cutset中出现的字符strings.Fields(str string) []string:返回str字符串空格分割的所有子串的slicestrings.Split(str string, sep string) []string:返回str字符串通过sep分割的所有子串的slicestrings.Join(a []string, sep string) string:用sep把a中的所有元素连接起来strconv.Itoa(n int) string:将整数n转化成字符串strconv.Atoi(s string) (int, error):将字符串s转化成整数
时间和日期类型
(t Time) Format(layout string) string:时间格式化函数,通过layout字符串对时间进行格式化。layout字符串使用与其他语言中的不太一样。使用一个时间实例进行表示:"2006-01-02 15:04:05.000"如:time.Now().Format("2006-01-02 15:04:05.000")time.Now() Time:获取当前时间。(t Time) UnixNano() int64:获取时间对应的 Unix 时间戳,单位:纳秒。(t Time) Unix() int64:获取时间对应的 Unix 时间戳,单位:秒。
指针类型
- 普通类型,变量存的是值,也叫值类型。
- 获取变量的地址用
&,比如:var a int,获取a的地址:&a - 指针类型,变量存的是一个地址,这个地址指向的内存存的才是值。
- 获得指针所指向的值使用
*,比如:var *p int,使用*p获取p指向的内存的值。
流程控制
-
if-else分支 -
switch分支,Go语言中的switch语句不需要break进行截断。然而可以通过fallthough关键字使得进入case之后执行完继续执行后续case的语句。 -
for语句-
for` 语句外面是没有括号的。
for i := 0; i < n; i++ { } -
Go 语言中没有
while语句,使用for进行代替。for i < n { } -
for range语句for i, v := range("Hello") { fmt.Printf("i: %d v: %c\n", i, v) }
-
-
break和continue语句 -
goto和label语句
函数
-
函数的声明语法:
func 函数名 (参数列表) [(返回值参数列表)] {}func add() { }func add(a int, b int) { }func add(a int, b int) int { }func add(a int, b int) (int, int) { }func add(a, b int) (int, int) { }注意:花括号的左括号必须跟在函数声明行末
-
Go 函数的特点:
- 不支持重载,一个包不允许有两个名字一样的函数。
- 函数是一等公民,函数也是一种类型,一个函数可以赋值给变量。
- 匿名函数
- 多返回值
-
函数参数的传递方式
- 值传递
- 引用传递
注意1: 无论是值传递还是引用传递,传递给函数的都是变量副本,不过,值传递是值的拷贝,引用传递是地址的拷贝。一般来说,地址拷贝更为高效,而值拷贝取决于拷贝对象的大小。对象越大,则值拷贝的效率越低。
注意2:
map、slice、chan、指针 、interface默认以引用的方式传递。 -
命名返回值名称:
func add (a int, b int) (sum int, avg int) { sum = a + b avg = sum / 2 return sum, avg } -
_标识符,用来忽略返回值。 -
可变参数:
func sum(arg...int) int { ans := 0 for _, val := range arg { ans += val } return ans }func max(a int, arg...int) int { maxVal := a for _, item := range arg { if item > maxVal { maxVal = item } } return maxVal } -
defer的用途- 当函数返回时,执行
defer语句。因此可以用来做资源清理。 - 多个
defer语句,按先进后出的方式执行。 defer语句中的变量,在defer声明时就决定了。
用途:
- 关闭文件句柄
- 锁资源释放
- 数据库连接释放
- 当函数返回时,执行
写入自己的博客中才能记得长久

浙公网安备 33010602011771号