相关疑难解决方法(0)

将10的幂写为紧凑的常数

我正在阅读最近发布的The Go编程语言,到目前为止它一直是一种喜悦(Brian Kernighan是作者之一,无论如何我都不会期待任何其他事情).

我在第3章遇到了以下练习:

练习3.13const尽可能紧凑地 写入KB,MB,直到YB的声明.

(注意:在此上下文中,KB,MB等表示1000的幂)

这之前是一个iota作为有用的常量生成器机制引入的部分; 特别是,前一段显示了将1024的幂定义为常量的简洁方法:

const (
    _ = 1 << (10 * iota)
    KiB
    MiB
    GiB
    TiB
    PiB
    EiB
    ZiB
    YiB
)
Run Code Online (Sandbox Code Playgroud)

作者进一步提到了10的权力:

该iota机制有其局限性.例如,由于没有取幂运算符,因此无法生成更熟悉的1000(KB,MB等)的幂.

我正在努力进行这项练习,因为看起来预期的解决方案比仅仅手动拼写1000的功能更为精细(特别是因为它出现之后iota).我觉得有一些聪明的方法可以用iota微妙的方式结合其他东西.

我想找到一种系统的方法来从1024的每个幂中减去"超额"量来获得1000的幂,但它让我无处可去.然后我查看二进制表示来尝试推断iota可能有用的一般模式,但同样,我什么也没得到.

我真的看不出如何在iota没有指数运算符的情况下从单个递增值()中产生1000 的幂.

有任何想法吗?

const go iota

7
推荐指数
2
解决办法
1345
查看次数

在 golang 中获取数组的长度并将其存储在 const 中

我使用 go playground 来尝试这段代码:

package main

func main() {
    exp := []string{"HELLO"}

    const length = len(exp)
}
Run Code Online (Sandbox Code Playgroud)

但它向我抛出了这个错误:

./prog.go:6:8: const 初始值设定项 len(exp) 不是常量

我可以看到这是因为 exp 的长度是可变的。如何获取当前长度并将其存储在整数常量中?

我认为我需要反射模块来做到这一点,但我不知道该怎么做。我尝试使用reflect.ValueOf但它没有用。

exp := []string{"HELLO"}
const length = len(reflect.ValueOf(exp).Interface().([]string))
Run Code Online (Sandbox Code Playgroud)

go

-1
推荐指数
1
解决办法
809
查看次数

标签 统计

go ×2

const ×1

iota ×1