| [!GOOS:windows] skip |
| |
| go run . |
| stdout 'ws2_32.dll: not found' |
| |
| go run -tags net . |
| stdout 'ws2_32.dll: found' |
| |
| -- go.mod -- |
| module m |
| |
| go 1.21 |
| |
| -- utils.go -- |
| package main |
| |
| import ( |
| "fmt" |
| "syscall" |
| "unsafe" |
| ) |
| |
| func hasModuleHandle() { |
| const ws2_32 = "ws2_32.dll" |
| getModuleHandle := syscall.MustLoadDLL("kernel32.dll").MustFindProc("GetModuleHandleW") |
| mod, _, _ := getModuleHandle.Call(uintptr(unsafe.Pointer(syscall.StringToUTF16Ptr(ws2_32)))) |
| if mod != 0 { |
| fmt.Println(ws2_32+":", "found") |
| } else { |
| fmt.Println(ws2_32+":", "not found") |
| } |
| } |
| -- net.go -- |
| //go:build net |
| package main |
| |
| import _ "net" |
| |
| func main() { |
| hasModuleHandle() |
| } |
| -- nonet.go -- |
| //go:build !net |
| package main |
| |
| func main() { |
| hasModuleHandle() |
| } |