首頁>技術>

是一個非常精典的例子。實現,要求是 zero-copy。想一下,一般的做法,都需要遍歷字串或 bytes 切片,再挨個賦值。

完成這個任務,我們需要了解 slice 和 string 的底層資料結構:

 1      2      3      4      5      6      7      8      9     10

type   StringHeader struct {             Data uintptr             Len  int     }

type   SliceHeader struct {             Data uintptr             Len  int             Cap  int     }

上面是反射包下的結構體,路徑:src/reflect/value.go。只需要共享底層 Data 和 Len 就可以實現 zero-copy。

1     2     3     4     5     6

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

原理上是利用指標的強轉,程式碼比較簡單,不作詳細解釋。

8
最新評論
  • BSA-TRITC(10mg/ml) TRITC-BSA 牛血清白蛋白改性標記羅丹明
  • 零信任原則:將監控重點放在使用者、裝置和服務上