“d50f518161317424dc3c698d19af62f33cdd1a31”上不存在“paddle/git@gitcode.net:s920243400/PaddleDetection.git”
提交 b28d0c5b 编写于 作者: 彭世瑜's avatar 彭世瑜

fix

上级 2d9aa8a7
# Golang 标准库-errors # Golang 标准库-errors
errors包实现了操作错误的函数
error结构
```go
type error interface {
Error() string
}
```
使用示例
```go
package main
import (
"errors"
"fmt"
)
func check(str string) (string, error) {
if str == "" {
err := errors.New("字符串不能为空")
return "", err
} else {
return str, nil
}
}
func main() {
s, err := check("")
if err != nil {
fmt.Printf("err: %v\n", err.Error())
} else {
fmt.Printf("s: %v\n", s)
}
// err: 字符串不能为空
}
```
自定义异常
```go
package main
import (
"fmt"
"time"
)
type MyError struct {
When time.Time
What string
}
func (err MyError) Error() string {
return fmt.Sprintf("%v: %v", err.When, err.What)
}
func oops() error {
return MyError{
time.Date(2000, 01, 02, 03, 04, 05, 0, time.UTC),
"my error",
}
}
func main() {
err := oops()
if err != nil {
fmt.Printf("err: %v\n", err.Error())
}
// err: 2000-01-02 03:04:05 +0000 UTC: my error
}
```
\ No newline at end of file
# Golang标准库-sort
sort包提供了切片排序
排序示例
```go
package main
import (
"fmt"
"sort"
)
func main() {
s := []int{3, 4, 1, 2}
sort.Ints(s)
fmt.Printf("s: %v\n", s)
// s: [1 2 3 4]
}
```
## 接口
```go
type Interface interface {
Len() int
Less(i, j int) bool
Swap(i, j int)
}
```
## 自定义排序
实现接口示例
```go
package main
import (
"fmt"
"sort"
)
type NewInts []uint
func (n NewInts) Len() int {
return len(n)
}
func (n NewInts) Less(i, j int) bool {
return n[i] < n[j]
}
func (n NewInts) Swap(i, j int) {
n[i], n[j] = n[j], n[i]
}
func main() {
s := []uint{3, 4, 1, 2}
sort.Sort(NewInts(s))
fmt.Printf("s: %v\n", s)
// s: [1 2 3 4]
}
```
## 浮点数切片
```go
package main
import (
"fmt"
"sort"
)
func main() {
s := []float64{3.1, 4.2, 1.9, 2.0}
sort.Float64s(s)
fmt.Printf("s: %v\n", s)
// s: [1.9 2 3.1 4.2]
}
```
## 字母字符串切片
```go
package main
import (
"fmt"
"sort"
)
func main() {
s := []string{"tom", "jack", "steve"}
sort.Strings(s)
fmt.Printf("s: %v\n", s)
// s: [jack steve tom]
}
```
## 数字字符串切片
```go
package main
import (
"fmt"
"sort"
)
func main() {
s := []string{"23", "12", "54"}
sort.Strings(s)
fmt.Printf("s: %v\n", s)
// s: [12 23 54]
}
```
## 中文字符串切片
```go
package main
import (
"fmt"
"sort"
)
func main() {
s := []string{"喔", "啊", "饿"}
sort.Strings(s)
fmt.Printf("s: %v\n", s)
// s: [啊 喔 饿]
for _, v := range s {
fmt.Printf("v: %v %v\n", v, []byte(v))
}
// 一个汉字占3个字节
// v: 啊 [229 149 138]
// v: 喔 [229 150 148]
// v: 饿 [233 165 191]
}
```
## 二维切片排序
```go
package main
import (
"fmt"
"sort"
)
type Array [][]int
// 实现接口
func (array Array) Len() int {
return len(array)
}
func (array Array) Less(i, j int) bool {
// 按照第二个值进行比较
return array[i][1] < array[j][1]
}
func (array Array) Swap(i, j int) {
array[i], array[j] = array[j], array[i]
}
func main() {
s := [][]int{
{1, 2},
{3, 6},
{4, 5},
}
sort.Sort(Array(s))
fmt.Printf("s: %v\n", s)
// s: [[1 2] [4 5] [3 6]]
}
```
## map切片排序
```go
package main
import (
"fmt"
"sort"
)
type MapSlice []map[string]int
// 实现接口
func (ml MapSlice) Len() int {
return len(ml)
}
func (ml MapSlice) Less(i, j int) bool {
// 按照age 年龄值进行比较
return ml[i]["age"] < ml[j]["age"]
}
func (ml MapSlice) Swap(i, j int) {
ml[i], ml[j] = ml[j], ml[i]
}
func main() {
s := MapSlice{
{"money": 10, "age": 21},
{"money": 11, "age": 20},
{"money": 12, "age": 22},
}
sort.Sort(s)
fmt.Printf("s: %v\n", s)
// s: [
// map[age:20 money:11]
// map[age:21 money:10]
// map[age:22 money:12]
// ]
}
```
## 结构体切片排序
```go
package main
import (
"fmt"
"sort"
)
type People struct {
Name string
Age int
}
type PeopleSlice []People
// 实现接口
func (s PeopleSlice) Len() int {
return len(s)
}
func (s PeopleSlice) Less(i, j int) bool {
// 按照age 年龄值进行比较
return s[i].Age < s[j].Age
}
func (s PeopleSlice) Swap(i, j int) {
s[i], s[j] = s[j], s[i]
}
func main() {
s := PeopleSlice{
{Name: "Tom", Age: 21},
{Name: "Jack", Age: 20},
{Name: "Steve", Age: 22},
}
sort.Sort(s)
fmt.Printf("s: %v\n", s)
// s: [{Jack 20} {Tom 21} {Steve 22}]
}
```
\ No newline at end of file
...@@ -58,8 +58,10 @@ ...@@ -58,8 +58,10 @@
- [Golang标准库-builtin](/blog/golang/golang-standard-builtin.md) - [Golang标准库-builtin](/blog/golang/golang-standard-builtin.md)
- [Golang标准库-bytes](/blog/golang/golang-standard-bytes.md) - [Golang标准库-bytes](/blog/golang/golang-standard-bytes.md)
- [Golang标准库-errors](/blog/golang/golang-standard-errors.md) - [Golang标准库-errors](/blog/golang/golang-standard-errors.md)
- [Golang标准库-sort](/blog/golang/golang-standard-sort.md)
https://www.bilibili.com/video/BV1ME411Y71o?p=27&spm_id_from=pageDriver&vd_source=efbb4dc944fa761b6e016ce2ca5933da https://www.bilibili.com/video/BV1ME411Y71o?p=27&spm_id_from=pageDriver&vd_source=efbb4dc944fa761b6e016ce2ca5933da
https://www.bilibili.com/video/BV1zR4y1t7Wj?p=93&spm_id_from=pageDriver&vd_source=efbb4dc944fa761b6e016ce2ca5933da
\ No newline at end of file https://www.bilibili.com/video/BV1zR4y1t7Wj/?p=95&spm_id_from=pageDriver&vd_source=efbb4dc944fa761b6e016ce2ca5933da
\ No newline at end of file
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册