Maison >développement back-end >Golang >Pourquoi mon code Go échoue-t-il lors de l'utilisation de GetVolumeInformation avec unsafe.Pointer ?
Appelez la fonction WinAPI GetVolumeInformation dans Go
Problème :
En essayant de récupérer le volume nom à l'aide de la fonction WinAPI GetVolumeInformation, le code échoue avec une erreur d'erreur inattendue.
Réponse :
L'erreur provient d'une utilisation incorrecte de unsafe.Pointer. Plus précisément, l'opérateur & doit être supprimé des noms de variables lors de la conversion en unsafe.Pointer.
Solution :
Modifiez le code comme suit pour résoudre les problèmes de pointeur :
<code class="go">var nVolumeNameSize = uint32(len(VolumeNameBuffer)) ret, _, callErr := syscall.Syscall9(uintptr(getVolume), nargs, uintptr(unsafe.Pointer(syscall.StringToUTF16Ptr(RootPathName))), uintptr(unsafe.Pointer(&VolumeNameBuffer[0])), uintptr(nVolumeNameSize), uintptr(unsafe.Pointer(&VolumeSerialNumber)), uintptr(unsafe.Pointer(&MaximumComponentLength)), uintptr(unsafe.Pointer(&FileSystemFlags)), uintptr(unsafe.Pointer(&FileSystemNameBuffer[0])), uintptr(nFileSystemNameSize), 0)</code>
Ce code révisé transmet correctement les pointeurs appropriés, éliminant l'erreur de panne et permettant la récupération du nom du volume.
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!