企业做网站分哪几种,把wordpress集成进,网站建设实习心得,5网站开发之美文章目录 Go学习-Day4函数值传递#xff0c;引用传递常用的函数 异常处理数组Slice切片 Go学习-Day4
个人博客#xff1a;CSDN博客
函数
值传递#xff0c;引用传递
值传递直接拷贝值#xff0c;一般是基本数据类型#xff0c;数组#xff0c;结构体也是引用传递传递… 文章目录 Go学习-Day4函数值传递引用传递常用的函数 异常处理数组Slice切片 Go学习-Day4
个人博客CSDN博客
函数
值传递引用传递
值传递直接拷贝值一般是基本数据类型数组结构体也是引用传递传递地址 效率高指针slice切片map管道interface等
常用的函数 len(string str)//求字符串长度自带的不用包中文一个字三字节转成[]rune来处理 []byte转string str string([]byte{...})查找子串是否存在 若干字符函数 strings.Contains(aaa, aaa) //bool
strings.Index(aaa, aaa)//返回下标
strings.LastIndex(aaa, aaa)//返回最后一个下标,没有就返回-1
strings.Replace(str, str1, str2, n)//把1中str1替换成str2,n是替换个数-1表示全部替换
strings.Split(str, 某字符)//分割字符串
strings.TrimSpace(str)//裁剪空格,去掉前导和后导空格
strings.Trim(str, 字符集)//去掉指定字符
strings.TrimLeft()//同上去掉左侧并且还有TrimRight
strings.HasPrefix(str, 后缀)//前缀匹配
strings.HasSuffix()//同上但是后缀若干时间函数 now : time.Now()//返回时间类型当前时间
//2023-08-23 16:37:07.5402748 0800 CST m0.001148901 大概是这样
//时间类型是结构体可以使用.运算符来获取其他时间信息,now.Year()
//月份可以直接转int
time.Sleep(time.Millisecond * 100)//只能用乘法不能有浮点数利用时间单位常量
time.Unix()//获取unix秒时间戳
time.UnixNano()//unix纳秒时间戳内置函数built-in len()//统计字符串长度数组大小
new(Type) *Type //参数为类型返回一块对应大小的清空的内存块的指针异常处理 Go中没有try catch Go利用defer panic recover来处理异常 抛出一个panic的异常在defer中通过recover捕获异常 package mainimport fmtfunc test() {defer func() {err : recover() //捕获异常if err ! nil {fmt.Println(err)}}()num1 : 10num2 : 0res : num1 / num2fmt.Println(res)
}
func main() {test()fmt.Println(ok)
} 通过捕获异常可以使得程序不崩溃停止main函数的其他部分照常运行 自定义错误 func myError(x int) (err error) {if x 0 {return nil} else {return errors.New(错误)}
}func test() {err : myError(1)if err ! nil {panic(err)}
}func main() {test()
}panic会终止程序 捕获自定义错误 func myError(x int) (err error) {if x 0 {return nil} else {return errors.New(错误)}
}func test() {defer func() {err : recover() //捕获异常if err ! nil {fmt.Println(err)}}()err : myError(1)if err ! nil {panic(err)}
}func main() {test()fmt.Println(ok)
}数组 定义 func main() {var arr [10]intarr[0] 1fmt.Println(arr)}数组名地址arr 初始化 var arr [3]int [3]int{1, 2, 3}var arr [3]int{1, 2, 3}var arr [...]int{1, 2, 3}var arr [...]int{1: 800, 0: 900, 2: 999}//指定下标var arr : [...]int{1, 2, 3} //自动推导遍历for-range 同string 不赘述 数组中的元素可以是任何合法的类型但是不能混用 Go中数组是值类型会进行拷贝要想修改原数组需要使用指针写法类似C语言的行指针
Slice切片 切片是引用类型传递地址 切片和数组类似但是长度是可以变化的 声明 var a []intfunc main() {var arr [5]int [...]int{1, 2, 3, 4, 5}slice : arr[1:3] //从下标1与下标3,左闭右开的区间fmt.Println(slice)
}通过make声明 func main() {slice : make([]int, 2, 4)fmt.Println(slice)
}make在底层维护一个数组这个数组对外不可见 直接声明 var slive []string []string 遍历和数组类似不再赘述 简写 var slice arr[:end] // var slice arr[0:end]前缀不含end
var slice arr[start:]//var slice arr[start:]后缀
var slice arr[:]//var slice arr[0:len(arr)]全长切片可以继续切片 切片可以追加可以追加多个数可以追加多个切片利用append将追加后的切片赋值给原来的切片 slice1 append(slice1, 1, 2, 3)//追加数
slice1 append(slice1, slice1...)//要三个点Go底层会创建一个新的数组然后切片这个新的数组这些过程均不可见 string可以进行切片处理 str : sssssss
slice : str[2:]//从下标2开始切后缀string底层也指向一个byte数组我们用切片来拷贝这个只读的byte数组再进行操作 通过切片能够改变字符串 arr : byte[](str)
arr[0] a
str string(arr)
//但是不支持中文
arr : rune[](str)
arr[0] 好
str string(arr)
//弄中文
func main() {str : ?????arr : []rune(str)arr[0] 好fmt.Println(string(arr))
}