1.error接口,panic,recover

  • error:输出错误信息
package mainimport "fmt"
import "errors"func main() {err1 := fmt.Errorf("ERROR")fmt.Println(err1)err2 := errors.New("THIS IS ERROR")fmt.Println(err2)result, err := Div(10, 2)if err != nil {fmt.Println(err)} else {fmt.Println(result)}
}//相除
func Div(a, b int) (result int, err error) {err = nilif b == 0 {err = errors.New("除数不能为0")} else {result = a / b}return result, err
}
  • panic

    • 致命错误
package mainimport "fmt"func main() {TestA()TestB()TestC()
}func TestA() {fmt.Println("A")
}func TestB() {fmt.Println("B")//panic会直接中断程序//panic("Error")
}func TestC() {fmt.Println("C")//模拟数组越界x := [2]int{1, 2}x[3] = 10
}
  • recover

    • 出错但不停止程序
package mainimport "fmt"func main() {TestA()TestB(3)TestC()defer func() {if err := recover(); err != nil {fmt.Println(err)}}()
}func TestA() {fmt.Println("A")
}func TestB(x int) {fmt.Println("B")//panic会直接中断程序//panic("Error")//模拟数组越界i := [2]int{1, 2}i[x] = 10
}func TestC() {fmt.Println("C")
}

2.字符串处理

  • 字符串操作

    • Contains:是否包含
    • Join:拼接
    • Index:位置
    • Repeat:拼接重复
    • Replace:替换
    • Split:分离
    • Trim:两头去除
    • Fieids:分离更加强大
package mainimport "fmt"
import "strings"//字符串操作
func main() {s := "Hello World"fmt.Println(strings.Contains(s, "W"))//truefmt.Println(strings.Contains(s, "A"))//falses1 := []string{"abc", "def", "ghi", "jk"}fmt.Println(strings.Join(s1, "&"))//abc&def&ghi&jkfmt.Println(strings.Index(s, "W"))//6s = strings.Repeat("go", 3)fmt.Println(s)//gogogos = "Hello World"fmt.Println(strings.Split(s, " "))//[Hello World]fmt.Println(strings.Trim("    are you ok ? ", " "))//are you ok  ?fmt.Println(strings.Fields("    are you ok ?  "))//[are you ok ?]
}
  • 字符串转换

    • Append:将整数转换成字符串并且追加
    • Format:把其他类型转换成字符串
    • Parse:把字符串转换成其他类型
package mainimport "fmt"
import "strconv"//字符串转换
func main() {slice := make([]byte, 0, 1024)slice = strconv.AppendBool(slice, true)//十进制方式追加slice = strconv.AppendInt(slice, 1234, 10)fmt.Println(string(slice))//true1234var str stringstr = strconv.FormatBool(true)fmt.Println(str)//truestr = strconv.FormatFloat(3.14, 'f', -1, 32)fmt.Println(str)//3.14str = strconv.Itoa(6556)fmt.Println(str)//6556var flag boolvar err errorflag, err = strconv.ParseBool("true")if err == nil {fmt.Println(flag)//true} else {fmt.Println(err)}i, err := strconv.Atoi("1867")if err == nil {fmt.Println(i + 9)//1876} else {fmt.Println(err)}}

3.正则表达式

package mainimport "fmt"
import "regexp"func main() {buf := "abc azc a7c aac 888 a9c tac"reg := regexp.MustCompile(`a.c`)if reg == nil {fmt.Println("error")return}result := reg.FindAllStringSubmatch(buf, -1)fmt.Println(result)//[[abc] [azc] [a7c] [aac] [a9c]]//提取有效的小数buff := "3.14 ddd wr5 6. 7.12 www 92.1"rege := regexp.MustCompile(`\d+\.\d+`)if rege != nil {result := rege.FindAllStringSubmatch(buff, -1)fmt.Println(result)//[[3.14] [7.12] [92.1]]}}

4.JSON处理

  • Json生成
package mainimport "fmt"
import "encoding/json"//Json 生成
func main() {//1.通过结构体生成s := IT{"大学", []string{"Java", "C/C++", "GO"}, true, 3.14}//buf, err := json.Marshal(s)//格式化打印buf, err := json.MarshalIndent(s, "", " ")if err == nil {fmt.Println(string(buf))//{"Company":"大学","Subjects":["Java","C/C++","GO"],"IsOk":true,"Price":3.14}} else {fmt.Println(err)}fmt.Println("-------------------------------------")//2.通过Map生成m := make(map[string]interface{}, 4)m["company"] = "大学"m["subjects"] = []string{"Java", "C/C++", "GO"}m["isOk"] = truem["price"] = 3.14buff, errs := json.MarshalIndent(m, "", " ")if errs == nil {fmt.Println(string(buff))//{"company":"大学","isOk":true,"price":3.14,"subjects":["Java","C/C++","GO"]}} else {fmt.Println(errs)}fmt.Println("-------------------------------------")
}//成员变量名首字母必须大写
type IT struct {//需要小写字段 二次编码Company  string `json:"company"`Subjects []string//二次编码转换stringIsOk  bool `json:",string"`Price float64
}
  • Json解析
package mainimport "fmt"
import "encoding/json"//Json 解析
func main() {sJson := `{"company":"大学","isOk":true,"price":3.14,"subjects":["Java","C/C++","GO"]}`//1.解析到结构体var tmp ITerr := json.Unmarshal([]byte(sJson), &tmp)if err == nil {fmt.Println(tmp)//{大学 [Java C/C++ GO] true 3.14}}//2.解析到mapm := make(map[string]interface{}, 4)json.Unmarshal([]byte(sJson), &m)if err == nil {fmt.Println(m)//map[subjects:[Java C/C++ GO] company:大学 isOk:true price:3.14]fmt.Println(m["company"])//大学}
}type IT struct {Company  string   `json:"company"`Subjects []string `json:",subjects"`IsOk     bool     `json:",isOK"`Price    float64  `json:",price"`
}

5.文件操作

  • 设备文件:屏幕(标准输出设备),键盘(标准输入设备)
  • 磁盘文件:放在存储设备上的文件
package mainimport "fmt"
import "os"
import "bufio"
import "io"//Json 解析
func main() {//关闭后无法输出//os.Stdout.Close()fmt.Println("Hello")os.Stdout.WriteString("World\n")path := "./test.txt"//文件的写WhiteFile(path)//文件的读ReadFile(path)//换行读取ReadLineFile(path)
}func ReadLineFile(path string) {file, err := os.Open(path)if err == nil {buf := make([]byte, 1024*2)//n代表读取内容的长度_, err1 := file.Read(buf)if err1 == nil {//新建一个缓冲区,内容先放在缓冲区r := bufio.NewReader(file)for {bufs, err2 := r.ReadBytes('\n')if err2 == nil {fmt.Println(string(bufs))} else {//文件结束if err2 == io.EOF {break}fmt.Println(err2)}}} else {fmt.Println(err)}} else {fmt.Println(err)}defer file.Close()
}func ReadFile(path string) {file, err := os.Open(path)if err == nil {buf := make([]byte, 1024*2)//n代表读取内容的长度n, err1 := file.Read(buf)if err1 == nil {fmt.Println(string(buf[:n]))} else {fmt.Println(err)}} else {fmt.Println(err)}defer file.Close()
}func WhiteFile(path string) {file, err := os.Create(path)if err == nil {for i := 0; i < 10; i++ {file.WriteString("Hello")}} else {fmt.Println(err)}defer file.Close()
}

6.拷贝文件案例

package mainimport "fmt"
import "os"
import "io"func main() {//获取命令行参数list := os.Argsif len(list) == 3 {srcFileName := list[1]dstFileName := list[2]fmt.Println("srcFileName:", srcFileName, "dstFileName:", dstFileName)if srcFileName != dstFileName {//只读方式打开源文件sF, err1 := os.Open(srcFileName)if err1 == nil {dF, err2 := os.Create(dstFileName)defer sF.Close()defer dF.Close()if err2 == nil {//从源文件读 写入buf := make([]byte, 1024*4)for {n, err3 := sF.Read(buf)fmt.Println("n:", n)if err3 == nil {//写入dF.Read(buf[:n])} else {fmt.Println(err3)if err3 == io.EOF {break}}}} else {fmt.Println(err2)}} else {fmt.Println(err1)}} else {fmt.Println("name == name")}} else {fmt.Println("xxx srcFile dstFile")}
}

GO 学习笔记——第五天 / 异常,文本文件处理相关推荐

  1. Windows异常学习笔记(五)—— 未处理异常

    Windows异常学习笔记(五)-- 未处理异常 要点回顾 最后一道防线 实验一:理解最后一道防线 实验二:新线程的最后一道防线 总结 UnhandledExceptionFilter 实验三:理解U ...

  2. Programming Entity Framework-dbContext 学习笔记第五章

    ### Programming Entity Framework-dbContext 学习笔记 第五章 将图表添加到Context中的方式及容易出现的错误 方法 结果 警告 Add Root 图标中的 ...

  3. OpenCV学习笔记(五十一)——imge stitching图像拼接stitching OpenCV学习笔记(五十二)——号外:OpenCV 2.4.1 又出来了。。。。。 OpenCV学习笔记(五

    OpenCV学习笔记(五十一)--imge stitching图像拼接stitching stitching是OpenCV2.4.0一个新模块,功能是实现图像拼接,所有的相关函数都被封装在Stitch ...

  4. 软件调试学习笔记(五)—— 软件断点内存断点

    软件调试学习笔记(五)-- 软件断点&内存断点 调试的本质 软件断点 软件断点的执行流程 分析INT 3执行流程 实验:处理软件断点 内存断点 内存断点的执行流程 实验:处理内存断点 调试的本 ...

  5. 《Go语言圣经》学习笔记 第五章函数

    <Go语言圣经>学习笔记 第五章 函数 目录 函数声明 递归 多返回值 匿名函数 可变参数 Deferred函数 Panic异常 Recover捕获异常 注:学习<Go语言圣经> ...

  6. OpenCV学习笔记(五十四)——概述FaceRecognizer人脸识别类contrib

    在最新版的2.4.2中,文档的更新也是一大亮点,refrence manual扩充了200多页的内容,添加了contrib部分的文档.contrib就是指OpenCV中新添加的模块,但又不是很稳定,可 ...

  7. HiveQL学习笔记(五):Hive练习题

    本系列是本人对Hive的学习进行一个整理,主要包括以下内容: 1.HiveQL学习笔记(一):Hive安装及Hadoop,Hive原理简介 2.HiveQL学习笔记(二):Hive基础语法与常用函数 ...

  8. 黑马程序员Java教程学习笔记(五)

    学习视频:https://www.bilibili.com/video/BV1Cv411372m 如侵权,请私信联系本人删除 文章目录 黑马程序员Java教程学习笔记(五) 日期时间:Date.Sim ...

  9. JavaScript学习笔记(五)

    JavaScript学习笔记(五) ①Array类 本地对象 ②Date类 ①Global对象 对象的类型   内置对象 ②Math对象 宿主对象 今天继续学习JS中的对象,昨天内置对象Global对 ...

最新文章

  1. [zz]三权鼎立形式的软件开发方式
  2. Day 4 - PB级规模数据的Elasticsearch分库分表实践
  3. HUD - 4463 Outlets
  4. Exchange2003启用web页面登陆(表单型身份验证)
  5. 线程:synchronized方法
  6. IDEA解决maven多module出现多root的问题
  7. 数据库对象之存储过程
  8. 【转】Netty那点事(一)概述
  9. 65. 雇员管理系统(2)
  10. windows cmd命令行添加mysql环境变量
  11. python开源IP代理池--IPProxys
  12. 计算机裸机的功能,计算机中裸机是指什么
  13. 网络安全[脚本小子] -- SSI注入
  14. 关于曼哈顿距离下的最小生成树
  15. Payssion确认参加2019年ChinaJoy游戏展
  16. uniapp+uniCloud实现批量上传图片到云端(解决h5端跨域问题)
  17. PHP快手直播弹幕采集,获取斗鱼弹幕php版(原创)
  18. Linux服务器NTP客户端时钟同步配置方法
  19. Python中pip,pip3,虚拟环境(venv)三者的关系,如何在pycharm中使用虚拟环境,以及安装依赖包所遇到的问题。
  20. 什么是高防服务器,高防服务器的原理

热门文章

  1. 论文阅读:(ICLR 2021) MULTIPLICATIVE FILTER NETWORKS
  2. 等一等!看一看!缓一缓!
  3. pandas爬取数据示例网页
  4. 测试地图最短路径搜索(二):换个稍微复杂点的路径模板
  5. 不格式化移动硬盘(u盘)做成pe
  6. java下载网络文件+Illegal character in path at index 135错误解决方法
  7. YC创业课:如果你只有一年可活,还要不要来我司工作?
  8. VUE DIFF算法之双端DIFF
  9. BG22蓝牙——第四弹 联调单片机,蓝牙点灯Demo
  10. 网络安全的威胁与解决方案