未定义的全局是

Undefined global var

package main

import (
    "crypto/rand"
    "fmt"
)

var a = []byte{0, 0}

var b, c []byte

func gens(n int) ([]byte, error) {
    b := make([]byte, n)
    _, err := rand.Read(b)
    // Note that err == nil only if we read len(b) bytes.
    if err != nil {
        return nil, err
    }
    return b, nil
}

func main() {
    key, _ := gens(30)

    fmt.Printf("len %d key \n%x\n", len(key), key)
    for s := 1; s <= len(key); s++ {
        b := make([]byte, len(key))
        b = key[s:]
        c = key[:s]

        fmt.Printf("%d %x %x\n", s, b, c)
        // b = append(b, с...)
        // fmt.Printf("len %d key %x\n",len(d), d)
    }
}

大家好! 我想创建一个字节数组循环旋转的函数,我采用了一个简单的函数字节生成器,然后尝试在打印时逐字节旋转它们 - 一切看起来都很好,但是当我尝试追加时(注释掉 2 行),我得到 Undefined с:

# 命令行参数 ./prepareKey.go:33:17: 未定义: с

怎么了!??如果它已经存在,请原谅我,戳我,我因此昏迷了! var c 这个全局...

我认为你漏掉了一个等号:

var b, c = []byte

问题是你在append中使用的变量名和标识符在视觉上看起来是一样的但它们是不同的字符!

如果你打印他们的字节:

fmt.Println([]byte("c")) // var b, c []byte
fmt.Println([]byte("с")) // b = append(b, с...)

输出是(在 Go Playground 上尝试):

[99]
[209 129]

修复: 删除那个 'c' 相似的,然后写一个 "normal" 'c' 字符。

完成后,应用程序会编译并运行良好。在 Go Playground.

上试试