string
什么是string
Go中的字符串是一个字节的切片,可以通过将其内容封装在""中来创建字符串,Go中的字符串是 Unicode 兼容的,并且是 UTF-8 编码。
字符串是一些字节的集合。
package main
import "fmt"
func main() {
str := "hello world"
println(str)
//获取字符串的长度
println("字符串的长度为:", len(str))
//获取指定字节
println("字节打印:", str[0])
fmt.Printf("%c\n", str[0])
//for循环 range循环,遍历数组、切片等
for i, v := range str {
fmt.Printf("%c", str[i])
fmt.Printf("%c", v)
}
}
什么是函数
- 函数是基本的代码块,用于执行一个任务。
- Go 语言最少有个 main()函数。
- 你可以通过函数来划分不同功能,逻辑上每个函数执行的是指定的任务。
- 函数声明告诉了编译器函数的名称,返回类型和参数。
函数的声明
Go语言函数的定义格式如下:
func function_name ( [param list] ) [return_types] {
函数体
}
- 无参无返回值函数
- 有一个参数的函数
- 有两个参数的函数
- 有一个返回值的函数
- 有多个返回值的函数
实例:
package main
func main() {
println(add(1, 2))
println(test1(1, "rrr"))
}
func add(a, b int) int {
c := a + b
return c
}
func test1(a int, str string) (int, string) {
return a, str
}
形式参数和实际参数
可变参数
概念:一个函数的参数类型确定,但是个数不确定,就可以使用可变参数。
func funcName(arg ...int) {}
//arg ... int 告诉go这个函数接收不定数量的参数,类型全部是int
实例:
package main
func main() {
println(sums(1, 2, 3, 4, 5))
}
func sums(nums ...int) int {
sum := 0
for i := range nums {
sum = sum + nums[i]
}
return sum
}
注意事项:
- 如果一个函数的参数是可变参数,同时还有其他的参数,可变参数要放在列表的最后。
- 一个函数的参数列表中最多只能有一个可变参数。
参数传递
按照数据的存储特点来分:
- 值类型的数据:操作的是数据本身、int 、string、bool、float64、array…
- 引用类型的数据: 操作的是数据的地址 slice、map、chan…
defer
defer语义:推迟,延迟
在go语言中,使用defer关键字来延迟一个函数或者方法的执行。
package main
func main() {
print("a")
println("b")
defer print("c")
println("d")
println("e")
}
func print(s string) {
println(s)
}
defer函数或者方法:一个函数或者方法的执行被延迟了
- 你可以在函数中添加多个defer语句,当函数执行到最后时,这些defer语向会按照逆序执行,最后该函数返回,特别是当你在进行一些打开资源的操作时,遇到错误需要提前返回,在返回前你需要关闭相应的资源,不然很容易造成资源泄露等问题。
- 如果有很多调用 defer,那么 defer 是采用后进先出 (栈) 模式。