>  기사  >  백엔드 개발  >  Go vet은 "reflect.SliceHeader의 오용 가능성"을 보고합니다.

Go vet은 "reflect.SliceHeader의 오용 가능성"을 보고합니다.

WBOY
WBOY앞으로
2024-02-11 12:09:241030검색

Go vet 报告“可能滥用reflect.SliceHeader”

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 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
이 기사는 stackoverflow.com에서 복제됩니다. 침해가 있는 경우 admin@php.cn으로 문의하시기 바랍니다. 삭제