【问题标题】:How to define a single byte variable in go lang如何在 go lang 中定义单字节变量
【发布时间】:2015-03-02 18:11:57
【问题描述】:

我是 golang 的新手,想找到一种方法来定义 single byte 变量。

这是Effective Go参考中的一个演示程序。

package main

import (
   "fmt"
)

func unhex(c byte) byte{
    switch {
    case '0' <= c && c <= '9':
        return c - '0'
    case 'a' <= c && c <= 'f':
        return c - 'a' + 10
    case 'A' <= c && c <= 'F':
        return c - 'A' + 10
    }
    return 0
}

func main(){
    // It works fine here, as I wrap things with array.
    c := []byte{'A'}
    fmt.Println(unhex(c[0]))

    //c := byte{'A'}    **Error** invalid type for composite literal: byte
    //fmt.Println(unhex(c))
}

如您所见,我可以用数组包装一个字节,一切都很好,但是如何在不使用数组的情况下定义一个字节?谢谢。

【问题讨论】:

    标签: variables go byte


    【解决方案1】:

    在您的示例中,这可以使用 conversion syntax T(x):

    c := byte('A')
    

    转换是T(x) 形式的表达式,其中T 是一个类型,x 是一个可以转换为T 类型的表达式。

    this playground example

    cb := byte('A')
    fmt.Println(unhex(cb))
    

    输出:

    10
    

    【讨论】:

    • @armnotstrong 我已经编辑了答案以解释为什么它有效。
    • 这就像 C 或 java 中的强制转换,但不是写成(byte) 'A',而是写成byte('A'),我理解对吗?
    • 有些人会因为你把它比作演员而生你的气,但是是的,它们在功能上是相似的。
    • @armnotstrong 有点:规范从未提及“转换”,仅提及“转换”:请参阅此评论 (stackoverflow.com/questions/25593367/…):“Go 有 类型转换类型断言接口(和类型开关)就是这样。类型转换最接近于例如C中的强制转换。”
    【解决方案2】:

    如果您不想使用:= 语法,您仍然可以使用var 语句,它允许您显式指定类型。例如:

    var c byte = 'A'
    

    【讨论】:

      猜你喜欢
      • 2016-01-03
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-06-16
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多