Неопределенный глобальный var - PullRequest
1 голос
/ 06 февраля 2020
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)
    }
}

Привет всем! Я хочу создать функцию для циклического c вращения массива байтов, я беру простой генератор байтов функции, а затем пытаюсь повернуть их побайтово, когда я печатаю - все выглядит хорошо, но когда я пытаюсь сделать приложение (закомментировал 2 строки), я получаю Undefined с:

# аргументы командной строки ./prepareKey.go:33:17: undefined: с

Что не так! ?? Простите, если он уже был там, ткните меня, я от этого в ступоре! вар c этот глобальный ...

Ответы [ 2 ]

4 голосов
/ 06 февраля 2020

Проблема в том, что имя переменной и идентификатор, который вы используете в append , визуально выглядят одинаково , , но это разные символы!

Если вы напечатать их байты:

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

Вывод (попробуйте на Go Детская площадка ):

[99]
[209 129]

Исправить: Удалить что 'c' похож, и напишите «нормальный» 'c' символ.

Как только вы это сделаете, приложение скомпилируется и будет работать нормально. Попробуйте на Go Детская площадка .

0 голосов
/ 06 февраля 2020

Я думаю, вы пропускаете знак равенства:

var b, c = []byte
...