编辑代码

package main

import (
    "fmt"
    "reflect"
    "unsafe"
)

type kv struct {
    key []byte
    value []byte
}

type sliceMap []kv

func (sm *sliceMap) Add(k, v []byte) {
    kvs := *sm
    fmt.Printf("cap(kvs) = %d, len(kvs) = %d, kvs = %s\n", cap(kvs), len(kvs), kvs)
    if cap(kvs) > len(kvs) {
        fmt.Println(1111111)
        kvs = kvs[:len(kvs)+1]
    } else {
        fmt.Println(2222222)
        kvs = append(kvs, kv{})
    }
    kv := &kvs[len(kvs)-1]
    kv.key = append(kv.key[:0], k...)
    kv.value = append(kv.value[:0], v...)
    fmt.Println(kvs)
    *sm = kvs
}


func b2s(b []byte) string {
	return *(*string)(unsafe.Pointer(&b))
}

func s2b(s string) (b []byte) {
	bh := (*reflect.SliceHeader)(unsafe.Pointer(&b))
	sh := (*reflect.StringHeader)(unsafe.Pointer(&s))
	bh.Data = sh.Data
	bh.Cap = sh.Len
	bh.Len = sh.Len
	return b
}

func main() {
    // // 初始化 sliceMap
    // by := []byte("key1")
    // fmt.Println(b2s(by))
    
    // str := "zifuchuan"
    // fmt.Println(b2s(s2b(str)))

    var sm sliceMap
    // 使用 Add 方法添加键值对
    sm.Add([]byte("key1"), []byte("value1"))
    sm.Add([]byte("key2"), []byte("value2"))
    sm.Add([]byte("key3"), []byte("value3"))
    sm.Add([]byte("key4"), []byte("value4"))
    sm.Add([]byte("key5"), []byte("value5"))
    sm.Add([]byte("key6"), []byte("value6"))

    // 遍历并打印 sliceMap 中的内容
    for _, kv := range sm {
        fmt.Printf("Key: %s, Value: %s\n", kv.key, kv.value)
    }
}