1.error接口,panic,recover
package main
import "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 = nil
if b == 0 {
err = errors.New("除数不能为0")
} else {
result = a / b
}
return result, err
}
package main
import "fmt"
func main() {
TestA()
TestB()
TestC()
}
func TestA() {
fmt.Println("A")
}
func TestB() {
fmt.Println("B")
}
func TestC() {
fmt.Println("C")
x := [2]int{1, 2}
x[3] = 10
}
package main
import "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")
i := [2]int{1, 2}
i[x] = 10
}
func TestC() {
fmt.Println("C")
}
2.字符串处理
- Contains:是否包含
- Join:拼接
- Index:位置
- Repeat:拼接重复
- Replace:替换
- Split:分离
- Trim:两头去除
- Fieids:分离更加强大
package main
import "fmt"
import "strings"
func main() {
s := "Hello World"
fmt.Println(strings.Contains(s, "W"))
fmt.Println(strings.Contains(s, "A"))
s1 := []string{"abc", "def", "ghi", "jk"}
fmt.Println(strings.Join(s1, "&"))
fmt.Println(strings.Index(s, "W"))
s = strings.Repeat("go", 3)
fmt.Println(s)
s = "Hello World"
fmt.Println(strings.Split(s, " "))
fmt.Println(strings.Trim(" are you ok ? ", " "))
fmt.Println(strings.Fields(" are you ok ? "))
}
- Append:将整数转换成字符串并且追加
- Format:把其他类型转换成字符串
- Parse:把字符串转换成其他类型
package main
import "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))
var str string
str = strconv.FormatBool(true)
fmt.Println(str)
str = strconv.FormatFloat(3.14, 'f', -1, 32)
fmt.Println(str)
str = strconv.Itoa(6556)
fmt.Println(str)
var flag bool
var err error
flag, err = strconv.ParseBool("true")
if err == nil {
fmt.Println(flag)
} else {
fmt.Println(err)
}
i, err := strconv.Atoi("1867")
if err == nil {
fmt.Println(i + 9)
} else {
fmt.Println(err)
}
}
3.正则表达式
package main
import "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)
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)
}
}
4.JSON处理
package main
import "fmt"
import "encoding/json"
func main() {
s := IT{"大学", []string{"Java", "C/C++", "GO"}, true, 3.14}
buf, err := json.MarshalIndent(s, "", " ")
if err == nil {
fmt.Println(string(buf))
} else {
fmt.Println(err)
}
fmt.Println("-------------------------------------")
m := make(map[string]interface{}, 4)
m["company"] = "大学"
m["subjects"] = []string{"Java", "C/C++", "GO"}
m["isOk"] = true
m["price"] = 3.14
buff, errs := json.MarshalIndent(m, "", " ")
if errs == nil {
fmt.Println(string(buff))
} else {
fmt.Println(errs)
}
fmt.Println("-------------------------------------")
}
type IT struct {
Company string `json:"company"`
Subjects []string
IsOk bool `json:",string"`
Price float64
}
package main
import "fmt"
import "encoding/json"
func main() {
sJson := `{"company":"大学","isOk":true,"price":3.14,"subjects":["Java","C/C++","GO"]}`
var tmp IT
err := json.Unmarshal([]byte(sJson), &tmp)
if err == nil {
fmt.Println(tmp)
}
m := make(map[string]interface{}, 4)
json.Unmarshal([]byte(sJson), &m)
if err == nil {
fmt.Println(m)
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 main
import "fmt"
import "os"
import "bufio"
import "io"
func main() {
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)
_, 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, 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 main
import "fmt"
import "os"
import "io"
func main() {
list := os.Args
if 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")
}
}