Golang基础学习笔记05

day05

一、异常处理

1. error接口

 

不致命的错误多用error接口

 

 

import (

"errors"

"fmt"

)

 

func main() {

//var error1 error= fmt.Errorf("%s", "this is a normal error")

error1 := fmt.Errorf("%s", "this is a normal error1")

fmt.Println(error1)

 

error2 := errors.New("this is a normal error2")

fmt.Println(error2)

fmt.Println(error2.Error())

}

 

2. error接口的应用

func div(a, b int) (result int, err error) {

if b == 0 {

err = errors.New("除数不能为0")

} else {

result = a / b

}

return

}

 

func main() {

result, err := div(9, 3)

if err != nil {

fmt.Printf(err.Error())

} else {

fmt.Println(result)

}

}

 

3. panic函数

func testA() {

fmt.Println("aaaaaaaaaaaa")

}

 

func testB() {

 

//显示调用panic,中断程序执行

panic("this is a panic test")

}

 

func testC() {

fmt.Println("cccccccccccc")

}

 

func main() {

testA()

testB()

testC()

}

 

//aaaaaaaaaaaa

//panic: this is a panic test

 

//goroutine 1 [running]:

//main.testB()

// D:/Project/GoProject/005/src/03显示调用panic函数.go:14 +0x40

//main.main()

// D:/Project/GoProject/005/src/03显示调用panic函数.go:23 +0x2c

//exit status 2

 

4. 数组下标越界panic(内部panic)

func testA(x int) {

var a [10]int

a[x] = 999

}

 

func main() {

testA(10)

}

 

//这里的panic是系统内部机制实现的

//panic: runtime error: index out of range

 

//goroutine 1 [running]:

//main.testA(...)

// D:/Project/GoProject/005/src/04panic数组下标越界.go:5

//main.main()

// D:/Project/GoProject/005/src/04panic数组下标越界.go:9 +0x31

//exit status 2

 

5. recover函数

recover只有在defer调用的函数中有效

 

func testA() {

fmt.Println("aaaaaaaaaaaa")

}

 

func testB(x int) {

//设置recover

defer func() {

// recover()

// fmt.Println(recover())

if err := recover(); err != nil {

fmt.Println(err)

}

}() //不能忘了(),调用此匿名函数

//显示调用panic,中断程序执行

var a [10]int

a[x] = 999

}

 

func testC() {

fmt.Println("cccccccccccc")

}

 

func main() {

testA()

testB(20)

testC()

}

 

二、文本文件处理(字符串操作)

6. 字符串操作(Contains)

fmt.Println(strings.Contains("hello world go", "hello")) // true

fmt.Println(strings.Contains("hello world go", "asd")) // false

fmt.Println(strings.Contains("hello world go", " ")) // true

fmt.Println(strings.Contains("hello world go", " ")) // false

fmt.Println(strings.Contains("hello world go", "")) // true

fmt.Println(strings.Contains("", ""))

7. 字符串操作(Join)

s := []string{"hello", "world", "go", "abc"}

str := strings.Join(s, "@")

fmt.Println(str) //hello@world@go@abc

 

 

8. 字符串操作(Index)

工查询字符位置从0开始,不包含返回-1

 

fmt.Println(strings.Index("hello world go", "he")) //0

fmt.Println(strings.Index("hello world go", "o")) //4

fmt.Println(strings.Index("hello world go", "or")) //7

fmt.Println(strings.Index("hello world go", "abs")) //-1

fmt.Println(strings.Index("hello world go", "")) //0

 

 

9. 字符串操作(Repeat)

 

str := strings.Repeat("go", 3)

fmt.Println(str) //gogogo

str = strings.Repeat("go", 1)

fmt.Println(str) //go

str = strings.Repeat("go", 0)

fmt.Println(str) //

 

 

 

10. 字符串操作(Replace)

 

 

11. 字符串操作(Split)

 

str := "hello@world@go"

s := strings.Split(str, "@")

fmt.Println(s) //[hello world go]

str = "hello world go"

s = strings.Split(str, " ")

fmt.Println(s) //[hello world go]

str = "helloworldgo"

s = strings.Split(str, "")

fmt.Println(s) //[h e l l o w o r l d g o]

str = "helloworldgo"

s = strings.Split(str, "|")

fmt.Println(s) //[helloworldgo]

 

 

 

12. 字符串操作(Trim)

去掉两边指定字符

 

 

str := " ab c d e "

s := strings.Trim(str, " ")

fmt.Println(s) //ab c d e

 

 

 

13. 字符串操作(Fields)

s := strings.Fields(" are you ok ")

 

for _, data := range s {

fmt.Println(data)

}

// are

// you

// ok

//

 

14. 字符串转换(Append)

 

15. 字符串转换(Format)

 

16. 字符串转换(Parse)

 

把字符串转换为其它类型

 

 

17. 正则表达式

 

 

三、文本文件处理(json操作)

20. Json处理

 

21. 结构体生成Json

import (

"encoding/json"

"fmt"

)

 

type IT struct {

Company string

Subjects []string //切片

IsOK bool

Price float64

}

 

func main() {

s := IT{"ZhaoShiJiTuan", []string{"go", "c++", "java", "python"}, true, 16.55}

//编码,根据内容生成Json

// buff, err := json.Marshal(s) //生成json

buff, err := json.MarshalIndent(s, "", " ") //生成的同时格式化

if err != nil {

fmt.Println(err)

} else {

// fmt.Println(buff) //反回的byte切片,所以显示出来是数字,转换成字符串类型就可以正常显示了

// fmt.Println(string(buff)) //{"Company":"ZhaoShiJiTuan","Subjects":["go","c++","java","python"],"IsOK":true,"Price":16.55}

fmt.Println(string(buff))

// {

// "Company": "ZhaoShiJiTuan",

// "Subjects": [

// "go",

// "c++",

// "java",

// "python"

// ],

// "IsOK": true,

// "Price": 16.55

//}

}

}

 

21. struct_tag的使用

type IT struct {

Company string `json:"-"` //此字段不会输出到屏幕

Subjects []string `json:"subjects"` //两次编码,输入的名字就是小写的了,记住是反引号,不是单引号

IsOK bool `json:",string"` //以字符串形式输出

Price float64 `json:",string"`

}

 

func main() {

s := IT{"ZhaoShiJiTuan", []string{"go", "c++", "java", "python"}, true, 16.55}

//编码,根据内容生成Json

// buff, err := json.Marshal(s) //生成json

buff, err := json.MarshalIndent(s, "", " ") //生成的同时格式化

if err != nil {

fmt.Println(err)

} else {

 

fmt.Println(string(buff))

// {

// "subjects": [

// "go",

// "c++",

// "java",

// "python"

// ],

// "IsOK": "true",

// "Price": "16.55"

//}

 

}

 

 

22. Map生成json

import (

"encoding/json"

"fmt"

)

 

func main() {

//创建map

m := make(map[string]interface{}, 4)

m["company"] = "ZhaoShiJiTuan"

m["subjects"] = []string{"go", "c++", "java", "python"}

m["isOK"] = true

m["price"] = 16.55

 

//生成json

mapstring, err := json.MarshalIndent(m, "", " ")

if err != nil {

fmt.Println(err)

} else {

fmt.Println(string(mapstring))

}

//{

// "company": "ZhaoShiJiTuan",

// "isOK": true,

// "price": 16.55,

// "subjects": [

// "go",

// "c++",

// "java",

// "python"

// ]

//}

}

 

23. Json解析到结构体和map

import (

"encoding/json"

"fmt"

)

 

type IT struct {

Company string `json:"company"` //此字段不会输出到屏幕

Subjects []string `json:"subjects"` //两次编码,输入的名字就是小写的了,记住是反引号,不是单引号

IsOK bool `json:",price"` //以字符串形式输出

Price float64 `json:",price"`

}

 

func main() {

jsonBuf := `

{

"company": "ZhaoShiJiTuan",

"isOK": true,

"price": 16.55,

"subjects": [

"go",

"c++",

"java",

"python"

]

}`

var temp IT //定义一个结构体变量

// m := make(map[string]interface{}, 2) //定义一个map(map大小不影响)

err := json.Unmarshal([]byte(jsonBuf), &temp) //第二个参数要传指针

// err := json.Unmarshal([]byte(jsonBuf), &m)

if err != nil {

fmt.Println("error", err)

} else {

fmt.Println(temp) //{ZhaoShiJiTuan [go c++ java python] true 16.55}

// fmt.Println(m) //map[subjects:[go c++ java python] company:ZhaoShiJiTuan isOK:true price:16.55]

//map解析时要做类型断言

}

 

}

 

四、文本文件处理(文件操作)

设备文件:

屏幕(标准输入设备) fmt.Println() 往标准输出设备写内容

键盘(标准输入设备) fmt.Scan() 从标准输入设备读取内容

磁盘文件(放在存储设备上的文件):

1>文本文件 (以记事本打开能看到内容,不是乱码)

2>二进制文件 (以记事本打开能看到内容,是乱码)

 

24. 设备文件文件的操作

 

import (

"fmt"

"os"

)

 

func main() {

 

// os.Stdout.Close() //关闭标准设备文件的输出设备文件

// fmt.Println("ara u ok ?") //往标准输出设备(屏幕)写内容 如果关闭标准设备输出文件,不输出

 

//标准设备文件(os.Stdout),默认已经打开,用户可直接使用

os.Stdout.WriteString("are you ok?\n") //在屏幕上打字字符

//我看了下源码fmt.print应该也是使用的os.stdout.的一些写入

 

os.Stdin.Close() //关闭标准设备文件的输入设备文件

var a int

fmt.Println("请输入a")

fmt.Scan(&a) //从标准输入设备读取内容 如果关闭标准设备输入文件,不输入

fmt.Println("您输入的是", a)

//我看了下源码fmt.Scan应该也是使用的os.stdin.的一些读取方法

 

25. 建立、打开文件

文件操作需要使用os包

Create新建文件时,如果文件不存在就新建,如果文件存在就清空原文件,参数names是文件名(其中可以包括路径),返回值是一个文件批针和错误信息。内部其实调用了打开文件的openfile函数

 

NewFile不常用

 

Open函数打开的方式是只读

 

 

26. 写文件

 

Write是处理二进制的,参数是切片

WriteString写入string到文本文件,参数是string。返回值 ret是写入了多长的字符,err是错误信息

 

import (

"fmt"

"os"

)

 

func WriteFile(filePath string) {

//新建文件,同时打开了文件

file, err := os.Create(filePath)

if err != nil {

fmt.Println("error:", err)

return

}

 

//使用完闭需要关闭文件

defer file.Close()

 

//写入内容

file.WriteString("haha")

}

 

func main() {

filePath := "./demo.txt"

WriteFile(filePath)

}

 

 

27. 读文件

 

import (

"fmt"

"io"

"os"

)

 

func ReadFile(filePath string) {

//打开文件

file, err := os.Open(filePath)

if err != nil {

fmt.Println("error:", err)

return

}

 

//使用完闭需要关闭文件

defer file.Close()

 

var b []byte = make([]byte, 1024*2)

num, readErr := file.Read(b)

 

if readErr != nil && readErr != io.EOF { //判断条件:文件出错和没有读到结尾 io.EOF 代表结束符

fmt.Println(readErr)

return

}

 

content := string(b[:num])

fmt.Println(content)

}

 

func main() {

filePath := "./demo.txt"

ReadFile(filePath)

}

28. 删除文件

 

29. 通过bufio实现整行读取

 

30. 文件拷贝

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

a

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
GoLang学习笔记主要包括以下几个方面: 1. 语法规则:Go语言要求按照语法规则编写代码,例如变量声明、函数定义、控制结构等。如果程序中违反了语法规则,编译器会报错。 2. 注释:Go语言中的注释有两种形式,分别是行注释和块注释。行注释使用`//`开头,块注释使用`/*`开头,`*/`结尾。注释可以提高代码的可读性。 3. 规范代码的使用:包括正确的缩进和空白、注释风格、运算符两边加空格等。同时,Go语言的代码风格推荐使用行注释进行注释整个方法和语句。 4. 常用数据结构:如数组、切片、字符串、映射(map)等。可以使用for range遍历这些数据结构。 5. 循环结构:Go语言支持常见的循环结构,如for循环、while循环等。 6. 函数:Go语言中的函数使用`func`关键字定义,可以有参数和返回值。函数可以提高代码的重用性。 7. 指针:Go语言中的指针是一种特殊的变量,它存储的是另一个变量的内存地址。指针可以实现动态内存分配和引用类型。 8. 并发编程:Go语言提供了goroutine和channel两个并发编程的基本单位,可以方便地实现多线程和高并发程序。 9. 标准库:Go语言提供了丰富的标准库,涵盖了网络编程、文件操作、加密解密等多个领域,可以帮助开发者快速实现各种功能。 10. 错误处理:Go语言中的错误处理使用`defer`和`panic`两个关键字实现,可以有效地处理程序运行过程中出现的错误。 通过以上内容的学习,可以掌握Go语言的基本语法和编程思想,为进一步学习和应用Go语言打下坚实的基础。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* [Golang学习笔记](https://blog.csdn.net/weixin_52310067/article/details/129467041)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_1"}}] [.reference_item style="max-width: 50%"] - *2* *3* [golang学习笔记](https://blog.csdn.net/qq_44336275/article/details/111143767)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_1"}}] [.reference_item style="max-width: 50%"] [ .reference_list ]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值