当前位置: 首页 > 面试题库 >

Go中的惯用类型转换

敖毅
2023-03-14
问题内容

我一直在玩Go,想知道在Go中执行惯用的类型转换的最佳方法是什么。基本上我的问题之间的自动类型转换中规定uint8uint64float64。根据我在其他语言中的经验,a
uint8与a 的乘积uint64会产生一个uint64值,但并非总是如此。

这是我构建的示例,请问这是编写此代码的惯用方式还是缺少重要的语言构造。

package main

import ("math";"fmt")

const(Width=64)

func main() {

    var index uint32
    var bits uint8

    index = 100
    bits = 3

    var c uint64
    // This is the line of interest vvvv
    c = uint64(math.Ceil(float64(index * uint32(bits))/float64(Width)))
    fmt.Println("Test: %v\n", c)
}

在我看来,由于所有显式类型转换,计算上限值似乎不必要。

谢谢!


问题答案:

对于非常量值,没有隐式类型转换。

你可以写

var x float64
x = 1

但是你不能写

var x float64
var y int

y = 1
x = y

请参阅规格以供参考。

有一个很好的理由,不允许自动/隐式类型转换,因为它们可能变得非常混乱,并且必须学习许多规则来规避可能发生的各种警告。以C中的整数转换规则为例。



 类似资料:
  • 问题内容: 在Go中强制转换多个返回值的惯用方式是什么? 您可以单行执行吗,还是需要使用临时变量(例如我在下面的示例中所做的那样)? 顺便说一句,当涉及到接口时会调用它吗? 问题答案: 您不能单行执行。您的临时变量方法是可行的方法。 顺便说一句,当涉及到接口时,它是否称为转换? 它实际上称为类型断言。A型 铸造 转换不同的是:

  • 类型转换用于将一种数据类型的变量转换为另外一种类型的变量。Go 语言类型转换基本格式如下: type_name(expression) type_name 为类型,expression 为表达式。 实例 以下实例中将整型转化为浮点型,并计算结果,将结果赋值给浮点型变量: package main import "fmt" func main() { var sum int = 17

  • Go 语言是一种强类型语言,而且没有隐式转换。也就是说运算符左右的变量类型必须一致,若不一致就会报错。为了使用户更加的容易使用,所以 Go 语言提供了各个类型之间强制类型转换的内置方法。 1. 整型和浮点型互相转换 整型和浮点型变量之间的相互转换相对容易,只需使用强制类型转换标志 type(variable)就好了。需要注意的是,当高精度向低精度类型转换的时候,会失真。即浮点型向整型转换的时候会失

  • 在必要以及可行的情况下,一个类型的值可以被转换成另一种类型的值。由于Go语言不存在隐式类型转换,因此所有的类型转换都必须显式的声明: valueOfTypeB = typeB(valueOfTypeA) 类型 B 的值 = 类型 B(类型 A 的值) 示例: a := 5.0 b := int(a) 类型转换只能在定义正确的情况下转换成功,例如从一个取值范围较小的类型转换到一个取值范围较大的类型(

  • C 语言中数据可以隐式转换或显示转换,但是 Go 语言中数据 只能显示转换 C 语言隐式转换 #include <stdio.h> int main(){ // 隐式转换:自动将实型10.6转换为整型后保存 int a = 10.6; // 自动类型提升: 运算时会自动将小类型转换为大类型后运算 double b = 1.0 / 2; // 等价于1.0 / 2.0 }

  • 问题内容: 我需要验证结构值是否正确,这意味着我需要单独检查每个字段,这对于少量的小型结构来说很容易,但是我想知道是否有更好的方法。这就是我现在的做法。 这是验证结构中字段值的惯用方式吗?看起来很麻烦。 问题答案: 我认为没有其他方法可以快速完成此操作。但是我找到了一个可以帮助您的go软件包:https : //github.com/go- validator/validator README文件