Those constants are untyped; They only have a type where they are used, so when they’re passed as the trap parameter, they are passed as uintptr. They can also have a default type, which would be int, so if you were to assign them to a variable, then you’d have to convert it:
Using an int directly as the syscall trap value can work because Go allows implicit conversions from int to uintptr when calling Syscall, It simplifies the code and aligns with the convention of system calls using integer values for traps. Using uintptr(unsafe.Pointer(callNum)) would add unnecessary complexity in most cases. Stick with the more common and straightforward approach.