php エディターの Zimo が本日、Go vet レポートに関するニュースをお届けします。最近、Go 言語公式は、reflect.SliceHeader の悪用がある可能性があると警告を発しました。 Go vet は Go 言語の静的分析ツールで、コード内の一般的なエラーや潜在的な問題をチェックするために使用されます。レポートでは、開発者に対し、潜在的な問題を回避するために、reflect.SliceHeader を使用する際には注意するようアドバイスしています。この記事では、この問題について詳しく説明し、対応する解決策を提供します。
次のコード スニペットがあり、「go vet」は「reflect.sliceheader の誤用の可能性」という警告について文句を言います。この警告に関するこれ以上の情報はこれ以外に見つかりません。これを読んだ後、go vetを満足させるために何をする必要があるのか、そしてGCの問題が発生しないようにするために何をする必要があるのかよくわかりません。
このコード スニペットの目的は、go 関数に、不透明な C ライブラリによって管理されるメモリにデータをコピーさせることです。 go 関数にはパラメータとして []byte が必要です。
func Callback(ptr unsafe.Pointer, buffer unsafe.Pointer, size C.longlong) C.longlong { ... sh := &reflect.SliceHeader{ Data: uintptr(buffer), Len: int(size), Cap: int(size), } buf := *(*[]byte)(unsafe.Pointer(sh)) err := CopyToSlice(buf) if err != nil { log.Fatal("failed to copy to slice") } ... }
jimb は(コメントから)最も正しい答えを示唆しているようですが、答えとして投稿したり、例を含めたりしていません。以下は vet、staticcheck、golangci-lint に合格し、セグメンテーション違反も発生しないため、これが正しい答えだと思います。
リーリー以上がGo vet が「reflect.SliceHeader の誤用の可能性」を報告の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。