将`interface{}`转换为`int64`。

huangapple go评论85阅读模式
英文:

assert interface{} to int64

问题

我正在使用gin框架,使用c.shouldBind将数据绑定到结构体,然后使用c.set将参数设置到上下文中。当我使用c.getInt64获取参数时,它无法返回我在上下文中设置的值(我设置为1),而是返回0。它无法将float64类型的1断言为int64类型的0。

我已经搜索了谷歌,但没有找到我想要的答案。

以下是我的调试代码:

// GetInt64返回与键关联的值作为整数。
func (c *Context) GetInt64(key string) (i64 int64) {
	if val, ok := c.Get(key); ok && val != nil {
		i64, _ = val.(int64)
	}
	return
}

val的值是1,但它返回0。

所以有人可以告诉我为什么以及如何解决吗?

英文:

i am using gin, i use c.shouldBind to bind the data to the struct, the use c.set to set the params in the context. when i use c.getInt64 to get the params, it can't return the value i set in the context(i set a 1), it return a zero. it failed to assert a float64 1 to a int64 0.

i have google it but can't get the answer i want

here are my debug code

// GetInt64 returns the value associated with the key as an integer.
func (c *Context) GetInt64(key string) (i64 int64) {
	if val, ok := c.Get(key); ok && val != nil {
		i64, _ = val.(int64)
	}
	return
}

the val is 1, but it returns 0

So can anybody tell me why and how to solve it.

答案1

得分: 1

Golang无法隐式转换类型。您可以使用GetFloat64方法。

英文:

Golang can't convert types implicitly. You can use the GetFloat64 method.

答案2

得分: 0

这取决于你实际设置的值,并检查键是否正确。之后,你可以在Get之后使用断言,例如:value := c.Get("From_validator_page").(Int64)

英文:

It depends the value which you really set in, and check the key is right, After that, Maybe you could use assertion after Get like: value := c.Get("From_validator_page").(Int64)

huangapple
  • 本文由 发表于 2021年10月4日 22:44:14
  • 转载请务必保留本文链接:https://go.coder-hub.com/69437944.html
匿名

发表评论

匿名网友

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen:

确定