On Fri, Dec 7, 2018 at 10:50 AM roger peppe <rogpe...@gmail.com> wrote:
> On Fri, 7 Dec 2018, 3:26 pm 'Bryan Mills' via golang-nuts < > golang-nuts@googlegroups.com wrote: > >> On Monday, December 3, 2018 at 12:02:07 AM UTC-5, Ian Lance Taylor wrote: >>> >>> On Sat, Dec 1, 2018 at 9:39 AM <leeo...@gmail.com> wrote: >>> > >>> > I am using swig wrap a c++ module , the generated go code is like >>> this: >>> > >>> > type MediaFrame interface { >>> > GetLength() uint >>> > GetData() (*byte) >>> > } >>> > >>> > I want to convert the *byte to []byte, How to do this? >>> >>> One approach is >>> >>> s := >>> (*[1<<30]byte)(unsafe.Pointer(mf.GetData())[:mf.GetLength():mf.GetLength()] >>> >>> Ian >>> >> >> If you need to handle slices larger than 2³⁰ bytes, a more robust version >> of this same approach is described in >> https://golang.org/issue/13656#issuecomment-303216308. >> >> > > Unfortunately this approach is vulnerable to a memory leak due to > https://golang.org/issue/28783 (and I suspect it will be quite a bit > slower too, if performance is important). I wonder if it might be better to > use reflect.SliceHeader guarded with some suitable regression checks. > Check the code at the link: it uses only one array type per element type, so as long as the set of element types is fixed (as it usually is) it introduces only a constant number of new types. (It is indeed somewhat slower, but compared to the overhead of the C/Go transition it's not terrible.) -- You received this message because you are subscribed to the Google Groups "golang-nuts" group. To unsubscribe from this group and stop receiving emails from it, send an email to golang-nuts+unsubscr...@googlegroups.com. For more options, visit https://groups.google.com/d/optout.