GO入门学习笔记
输出
fmt.Printf Print Println
格式化标识符 | 含义 |
---|---|
%d | 十进制整数 |
%e | 科学计数法e表示或复数 |
%f | 浮点数 |
%o | 八进制 |
%x | 十六进制 |
%s | 字符串 |
%t | bool类型 |
下面这一行调用了 fmt 包中的 Println 函数,可以将字符串输出到控制台,并在最后自动增加换行字符 \n:
fmt.Println("hello, world")
使用 fmt.Print("hello, world\n") 可以得到相同的结果。
Print 和 Println 这两个函数也支持使用变量,如:fmt.Println(arr)。如果没有特别指定,它们会以默认的打印格式将变量 arr 输出到控制台。
字符串
len(s)
获取字符串长度
strings包
strings.HasPrefix(str,"Th")
strings.HasSuffix(str,"love")
检查字符串str是否以Th开头,是否以love结尾,均返回一个bool类型值
strings.Contains(str,substr)
检查字符串substr是否为str的子串(连续)
strings.Index(s,str)
strings.LastIndex(s,str)
返回一个int类型值:
str在s中的索引(str第一个字符的索引)
str在s中最后出现位置的索引(str第一个字符的索引)
-1表示s中不含str
strings.Count(s,str)
返回一个int类型值:str在s中出现的非重叠次数
strings.Repeat(s,n)
返回一个字符串:n个s相接
strings.ToLower(s)
strings.ToUpper(s)
返回一个字符串:s全小/大写、
strings.TrimSpace(s)
strings.Trim(s, str)
剔除字符串开头和结尾的空白符号
剔除指定字符 注意:str中所含字符都会在开头结尾被去掉
strconv包
该包包含了一些变量用于获取程序运行的操作系统平台下 int 类型所占的位数,如:strconv.IntSize
任何类型 T 转换为字符串总是成功的。
针对从数字类型转换到字符串,Go 提供了以下函数:
strconv.Itoa(i int) string
返回数字 i 所表示的字符串类型的十进制数。strconv.FormatFloat(f float64, fmt byte, prec int, bitSize int) string
将 64 位浮点型的数字转换为字符串,其中fmt
表示格式(其值可以是'b'
、'e'
、'f'
或'g'
),prec
表示精度,bitSize
则使用 32 表示 float32,用 64 表示 float64。
针对从字符串类型转换为数字类型,Go 提供了以下函数:
strconv.Atoi(s string) (i int, err error)
将字符串转换为 int 型。strconv.ParseFloat(s string, bitSize int) (f float64, err error)
将字符串转换为 float64 型。
利用多返回值的特性,这些函数会返回 2 个值,第 1 个是转换后的结果(如果转换成功),第 2 个是可能出现的错误,因此,我们一般使用以下形式来进行从字符串到其它类型的转换:
val, err = strconv.Atoi(s)
if err!=nil
则说明出错
switch
左大括号必须同行
Go里面switch默认相当于每个case最后带有break,匹配成功后不会自动向下执行其他case,而是跳出整个switch, 但是可以使用fallthrough强制执行后面的case代码,fallthrough不会判断下一条case的expr结果是否为true。
可以同时测试多个可能符合条件的值,使用逗号分割它们,例如:case val1, val2, val3
if-else
if condition1 {
// do something
} else if condition2 {
// do something else
} else {
// catch-all or default
}
注意同行问题
if和switch后都可以接一个初始化语句 注意分号!!!
switch result := calculate(); {
case result < 0:
...
case result > 0:
...
default:
// 0
}
switch a, b := x[i], y[j]; {
case a < b: t = -1
case a == b: t = 0
case a > b: t = 1
}
if value := process(data); value > max {
...
}
if val := 10; val > max {
// do something
}
append 函数常见操作
我们在第 7.5 节提到的 append 非常有用,它能够用于各种方面的操作:
-
将切片 b 的元素追加到切片 a 之后:
a = append(a, b...)
-
复制切片 a 的元素到新的切片 b 上:
b = make([]T, len(a)) copy(b, a)
-
删除位于索引 i 的元素:
a = append(a[:i], a[i+1:]...)
-
切除切片 a 中从索引 i 至 j 位置的元素:
a = append(a[:i], a[j:]...)
-
为切片 a 扩展 j 个元素长度:
a = append(a, make([]T, j)...)
-
在索引 i 的位置插入元素 x:
a = append(a[:i], append([]T{x}, a[i:]...)...)
-
在索引 i 的位置插入长度为 j 的新切片:
a = append(a[:i], append(make([]T, j), a[i:]...)...)
-
在索引 i 的位置插入切片 b 的所有元素:
a = append(a[:i], append(b, a[i:]...)...)
-
取出位于切片 a 最末尾的元素 x:
x, a = a[len(a)-1], a[:len(a)-1]
-
将元素 x 追加到切片 a:
a = append(a, x)