我的函数中有一个
*int64
作为参数之一,我需要将其转换为 *int32
以满足我要调用的函数的定义。
func t1(x *int64) error {
var y *int32
t2(y)
}
func t2(y *int32) error {}
而且,如果我想将
*int32
转换为 *int8
,那么我还需要另一个函数吗?有没有办法解决这样的问题?
[H]如何将 *int64 转换为 *int32?
你不能。
使用
var i32 int32 = int32(*x); t2(&i32); *x=int64(i32)
。
现在,Golang 有了泛型类型,可以帮助你拥有泛型转换功能:
type IntNumber interface {
int | int8 | int16 | int32 | int64
}
func IntNumberPointersToPointers(T IntNumber, K IntNumber)(from *T) *K {
if from == nil {
return nil
}
result := K(*from)
return &result
}
您可以通过以下方式调用该函数:
// The result will be int
input := int32(100)
result := util.IntNumberPointersToPointers[int32, int](&input)