PHP 편집자 Zimo가 오늘 Go vet 보고서에 대한 소식을 전해 드립니다. 최근 Go 언어 관계자는 Reflect.SliceHeader의 남용이 있을 수 있다는 경고를 발표했습니다. Go vet은 Go 언어의 정적 분석 도구로, 코드의 일반적인 오류와 잠재적인 문제를 확인하는 데 사용됩니다. 보고서는 잠재적인 문제를 피하기 위해 Reflect.SliceHeader를 사용할 때 개발자에게 주의를 기울일 것을 권고합니다. 이번 글에서는 이 문제를 자세히 설명하고 그에 따른 해결책을 제시하겠습니다.
다음 코드 조각이 있고 "go vet"가 "reflect.sliceheader의 오용 가능성"이라는 경고에 대해 불평합니다. 이 경고 외에는 이 경고에 대한 더 많은 정보를 찾을 수 없습니다. 이 글을 읽은 후에는 go vet를 행복하게 만들고 gc 문제가 발생하지 않도록 하기 위해 무엇을 해야 할지 잘 모르겠습니다.
이 코드 조각의 목표는 go 함수가 불투명 C 라이브러리에서 관리하는 메모리에 데이터를 복사하도록 하는 것입니다. go 함수에는 []바이트가 매개변수로 필요합니다.
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를 통과하고 segfault를 수행하지 않으므로 이것이 정답이라고 생각합니다.
으아악위 내용은 Go vet은 'reflect.SliceHeader의 오용 가능성'을 보고합니다.의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!