asp网站打不开做网站需要哪些工具
文章目录
- 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 m=+0.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 "fmt"func 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 []int -  
func 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)) } 
