1
0
mirror of https://github.com/duke-git/lancet.git synced 2026-02-04 12:52:28 +08:00

doc: add doc for DeepClone function

This commit is contained in:
dudaodong
2023-02-12 19:24:56 +08:00
parent 4b196a72b1
commit c383719496
4 changed files with 217 additions and 45 deletions

View File

@@ -246,6 +246,8 @@ import "github.com/duke-git/lancet/v2/convertor"
- **<big>DecodeByte</big>** : decode byte slice data to target object.
[[doc](https://github.com/duke-git/lancet/blob/main/docs/convertor.md#DecodeByte)]
[[play](https://go.dev/play/p/zI6xsmuQRbn)]
- **<big>DeepClone</big>** : creates a deep copy of passed item, can't clone unexported field of struct.
[[doc](https://github.com/duke-git/lancet/blob/main/docs/convertor.md#DeepClone)]
### 5. Cryptor package is for data encryption and decryption.

View File

@@ -245,6 +245,9 @@ import "github.com/duke-git/lancet/v2/convertor"
- **<big>DecodeByte</big>** : 解码字节切片到目标对象,目标对象需要传入一个指针实例。
[[doc](https://github.com/duke-git/lancet/blob/main/docs/convertor_zh-CN.md#DecodeByte)]
[[play](https://go.dev/play/p/zI6xsmuQRbn)]
- **<big>DeepClone</big>** : 创建一个传入值的深拷贝, 无法克隆结构体的非导出字段。
[[doc](https://github.com/duke-git/lancet/blob/main/docs/convertor_zh-CN.md#DeepClone)]
### 5. cryptor 加密包支持数据加密和解密,获取 md5hash 值。支持 base64, md5, hmac, aes, des, rsa。

View File

@@ -1,15 +1,17 @@
# Convertor
Package convertor contains some functions for data type convertion.
<div STYLE="page-break-after: always;"></div>
## Source:
- [https://github.com/duke-git/lancet/blob/main/convertor/convertor.go](https://github.com/duke-git/lancet/blob/main/convertor/convertor.go)
- [https://github.com/duke-git/lancet/blob/main/convertor/convertor.go](https://github.com/duke-git/lancet/blob/main/convertor/convertor.go)
<div STYLE="page-break-after: always;"></div>
## Usage:
```go
import (
"github.com/duke-git/lancet/v2/convertor"
@@ -19,28 +21,31 @@ import (
<div STYLE="page-break-after: always;"></div>
## Index
- [ColorHexToRGB](#ColorHexToRGB)
- [ColorRGBToHex](#ColorRGBToHex)
- [ToBool](#ToBool)
- [ToBytes](#ToBytes)
- [ToChar](#ToChar)
- [ToChannel](#ToChannel)
- [ToFloat](#ToFloat)
- [ToInt](#ToInt)
- [ToJson](#ToJson)
- [ToMap](#ToMap)
- [ToPointer](#ToPointer)
- [ToString](#ToString)
- [StructToMap](#StructToMap)
- [MapToSlice](#MapToSlice)
- [EncodeByte](#EncodeByte)
- [DecodeByte](#DecodeByte)
- [ColorHexToRGB](#ColorHexToRGB)
- [ColorRGBToHex](#ColorRGBToHex)
- [ToBool](#ToBool)
- [ToBytes](#ToBytes)
- [ToChar](#ToChar)
- [ToChannel](#ToChannel)
- [ToFloat](#ToFloat)
- [ToInt](#ToInt)
- [ToJson](#ToJson)
- [ToMap](#ToMap)
- [ToPointer](#ToPointer)
- [ToString](#ToString)
- [StructToMap](#StructToMap)
- [MapToSlice](#MapToSlice)
- [EncodeByte](#EncodeByte)
- [DecodeByte](#DecodeByte)
- [DeepClone](#DeepClone)
<div STYLE="page-break-after: always;"></div>
## Documentation
### <span id="ColorHexToRGB">ColorHexToRGB</span>
<p>Convert color hex to color rgb.</p>
<b>Signature:</b>
@@ -48,6 +53,7 @@ import (
```go
func ColorHexToRGB(colorHex string) (red, green, blue int)
```
<b>Example:</b>
```go
@@ -78,6 +84,7 @@ func main() {
```go
func ColorRGBToHex(red, green, blue int) string
```
<b>Example:</b>
```go
@@ -110,6 +117,7 @@ func main() {
```go
func ToBool(s string) (bool, error)
```
<b>Example:</b>
```go
@@ -150,6 +158,7 @@ func main() {
```go
func ToBytes(data any) ([]byte, error)
```
<b>Example:</b>
```go
@@ -182,6 +191,7 @@ func main() {
```go
func ToChar(s string) []string
```
<b>Example:</b>
```go
@@ -217,6 +227,7 @@ func main() {
```go
func ToChannel[T any](array []T) <-chan T
```
<b>Example:</b>
```go
@@ -253,6 +264,7 @@ func main() {
```go
func ToFloat(value any) (float64, error)
```
<b>Example:</b>
```go
@@ -297,6 +309,7 @@ func main() {
```go
func ToInt(value any) (int64, error)
```
<b>Example:</b>
```go
@@ -338,6 +351,7 @@ func main() {
```go
func ToJson(value any) (string, error)
```
<b>Example:</b>
```go
@@ -372,6 +386,7 @@ func main() {
```go
func ToMap[T any, K comparable, V any](array []T, iteratee func(T) (K, V)) map[K]V
```
<b>Example:</b>
```go
@@ -412,6 +427,7 @@ func main() {
```go
func ToPointer[T any](value T) *T
```
<b>Example:</b>
```go
@@ -424,8 +440,8 @@ import (
func main() {
result := convertor.ToPointer(123)
fmt.Println(*result)
fmt.Println(*result)
// Output:
// 123
}
@@ -440,6 +456,7 @@ func main() {
```go
func ToString(value any) string
```
<b>Example:</b>
```go
@@ -487,6 +504,7 @@ func main() {
```go
func StructToMap(value any) (map[string]any, error)
```
<b>Example:</b>
```go
@@ -524,6 +542,7 @@ func main() {
```go
func MapToSlice[T any, K comparable, V any](aMap map[K]V, iteratee func(K, V) T) []T
```
<b>Example:</b>
```go
@@ -544,7 +563,6 @@ func main() {
}
```
### <span id="EncodeByte">EncodeByte</span>
<p>Encode data to byte slice.</p>
@@ -554,6 +572,7 @@ func main() {
```go
func EncodeByte(data any) ([]byte, error)
```
<b>Example:</b>
```go
@@ -582,6 +601,7 @@ func main() {
```go
func DecodeByte(data []byte, target any) error
```
<b>Example:</b>
```go
@@ -595,15 +615,80 @@ import (
func main() {
var result string
byteData := []byte{6, 12, 0, 3, 97, 98, 99}
err := convertor.DecodeByte(byteData, &result)
if err != nil {
return
}
fmt.Println(result)
// Output:
// abc
}
```
### <span id="DeepClone">DeepClone</span>
<p>Creates a deep copy of passed item, can't clone unexported field of struct.</p>
<b>Signature:</b>
```go
func DeepClone[T any](src T) T
```
<b>Example:</b>
```go
package main
import (
"fmt"
"github.com/duke-git/lancet/v2/convertor"
)
func main() {
type Struct struct {
Str string
Int int
Float float64
Bool bool
Nil interface{}
unexported string
}
cases := []interface{}{
true,
1,
0.1,
map[string]int{
"a": 1,
"b": 2,
},
&Struct{
Str: "test",
Int: 1,
Float: 0.1,
Bool: true,
Nil: nil,
// unexported: "can't be cloned",
},
}
for _, item := range cases {
cloned := convertor.DeepClone(item)
isPointerEqual := &cloned == &item
fmt.Println(cloned, isPointerEqual)
}
// Output:
// true false
// 1 false
// 0.1 false
// map[a:1 b:2] false
// &{test 1 0.1 true <nil> } false
}
```

View File

@@ -1,11 +1,12 @@
# Convertor
convertor转换器包支持一些常见的数据类型转换
convertor 转换器包支持一些常见的数据类型转换
<div STYLE="page-break-after: always;"></div>
## 源码:
- [https://github.com/duke-git/lancet/blob/main/convertor/convertor.go](https://github.com/duke-git/lancet/blob/main/convertor/convertor.go)
- [https://github.com/duke-git/lancet/blob/main/convertor/convertor.go](https://github.com/duke-git/lancet/blob/main/convertor/convertor.go)
<div STYLE="page-break-after: always;"></div>
@@ -21,29 +22,30 @@ import (
## 目录
- [ColorHexToRGB](#ColorHexToRGB)
- [ColorRGBToHex](#ColorRGBToHex)
- [ToBool](#ToBool)
- [ToBytes](#ToBytes)
- [ToChar](#ToChar)
- [ToChannel](#ToChannel)
- [ToFloat](#ToFloat)
- [ToInt](#ToInt)
- [ToJson](#ToJson)
- [ToMap](#ToMap)
- [ToPointer](#ToPointer)
- [ToString](#ToString)
- [StructToMap](#StructToMap)
- [MapToSlice](#MapToSlice)
- [EncodeByte](#EncodeByte)
- [DecodeByte](#DecodeByte)
- [ColorHexToRGB](#ColorHexToRGB)
- [ColorRGBToHex](#ColorRGBToHex)
- [ToBool](#ToBool)
- [ToBytes](#ToBytes)
- [ToChar](#ToChar)
- [ToChannel](#ToChannel)
- [ToFloat](#ToFloat)
- [ToInt](#ToInt)
- [ToJson](#ToJson)
- [ToMap](#ToMap)
- [ToPointer](#ToPointer)
- [ToString](#ToString)
- [StructToMap](#StructToMap)
- [MapToSlice](#MapToSlice)
- [EncodeByte](#EncodeByte)
- [DecodeByte](#DecodeByte)
- [DeepClone](#DeepClone)
<div STYLE="page-break-after: always;"></div>
## 文档
### <span id="ColorHexToRGB">ColorHexToRGB</span>
<p>颜色值十六进制转rgb。</p>
<b>函数签名:</b>
@@ -51,6 +53,7 @@ import (
```go
func ColorHexToRGB(colorHex string) (red, green, blue int)
```
<b>示例:</b>
```go
@@ -81,6 +84,7 @@ func main() {
```go
func ColorRGBToHex(red, green, blue int) string
```
<b>示例:</b>
```go
@@ -113,6 +117,7 @@ func main() {
```go
func ToBool(s string) (bool, error)
```
<b>示例:</b>
```go
@@ -153,6 +158,7 @@ func main() {
```go
func ToBytes(data any) ([]byte, error)
```
<b>示例:</b>
```go
@@ -185,6 +191,7 @@ func main() {
```go
func ToChar(s string) []string
```
<b>示例:</b>
```go
@@ -220,6 +227,7 @@ func main() {
```go
func ToChannel[T any](array []T) <-chan T
```
<b>示例:</b>
```go
@@ -256,6 +264,7 @@ func main() {
```go
func ToFloat(value any) (float64, error)
```
<b>示例:</b>
```go
@@ -300,6 +309,7 @@ func main() {
```go
func ToInt(value any) (int64, error)
```
<b>示例:</b>
```go
@@ -341,6 +351,7 @@ func main() {
```go
func ToJson(value any) (string, error)
```
<b>示例:</b>
```go
@@ -375,6 +386,7 @@ func main() {
```go
func ToMap[T any, K comparable, V any](array []T, iteratee func(T) (K, V)) map[K]V
```
<b>示例:</b>
```go
@@ -415,6 +427,7 @@ func main() {
```go
func ToPointer[T any](value T) *T
```
<b>示例:</b>
```go
@@ -427,8 +440,8 @@ import (
func main() {
result := convertor.ToPointer(123)
fmt.Println(*result)
fmt.Println(*result)
// Output:
// 123
}
@@ -443,6 +456,7 @@ func main() {
```go
func ToString(value any) string
```
<b>示例:</b>
```go
@@ -490,6 +504,7 @@ func main() {
```go
func StructToMap(value any) (map[string]any, error)
```
<b>示例:</b>
```go
@@ -527,6 +542,7 @@ func main() {
```go
func MapToSlice[T any, K comparable, V any](aMap map[K]V, iteratee func(K, V) T) []T
```
<b>示例:</b>
```go
@@ -556,6 +572,7 @@ func main() {
```go
func EncodeByte(data any) ([]byte, error)
```
<b>示例:</b>
```go
@@ -584,6 +601,7 @@ func main() {
```go
func DecodeByte(data []byte, target any) error
```
<b>示例:</b>
```go
@@ -597,15 +615,79 @@ import (
func main() {
var result string
byteData := []byte{6, 12, 0, 3, 97, 98, 99}
err := convertor.DecodeByte(byteData, &result)
if err != nil {
return
}
fmt.Println(result)
// Output:
// abc
}
```
### <span id="DeepClone">DeepClone</span>
<p>创建一个传入值的深拷贝, 无法克隆结构体的非导出字段。</p>
<b>函数签名:</b>
```go
func DeepClone[T any](src T) T
```
<b>示例:</b>
```go
package main
import (
"fmt"
"github.com/duke-git/lancet/v2/convertor"
)
func main() {
type Struct struct {
Str string
Int int
Float float64
Bool bool
Nil interface{}
unexported string
}
cases := []interface{}{
true,
1,
0.1,
map[string]int{
"a": 1,
"b": 2,
},
&Struct{
Str: "test",
Int: 1,
Float: 0.1,
Bool: true,
Nil: nil,
// unexported: "can't be cloned",
},
}
for _, item := range cases {
cloned := convertor.DeepClone(item)
isPointerEqual := &cloned == &item
fmt.Println(cloned, isPointerEqual)
}
// Output:
// true false
// 1 false
// 0.1 false
// map[a:1 b:2] false
// &{test 1 0.1 true <nil> } false
}
```