如何将 *int64 转换为 *int32?

问题描述 投票:0回答:2

我的函数中有一个

*int64
作为参数之一,我需要将其转换为
*int32
以满足我要调用的函数的定义。

func t1(x *int64) error {
    var y *int32   
    t2(y)
}
func t2(y *int32) error {}

而且,如果我想将

*int32
转换为
*int8
,那么我还需要另一个函数吗?有没有办法解决这样的问题?

go pointers
2个回答
2
投票

[H]如何将 *int64 转换为 *int32?

你不能。

使用

var i32 int32 = int32(*x); t2(&i32); *x=int64(i32)


0
投票

现在,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)

去游乐场:https://go.dev/play/p/sRP17iFX6J6

© www.soinside.com 2019 - 2024. All rights reserved.