Nano Hash - криптовалюты, майнинг, программирование

Как получить доступ к записи карты с помощью строкового ключа, хранящегося в переменной в Go?

Итак, у меня есть переменная Go table map[string]string с некоторыми записями. Я могу получить доступ к значениям карты, используя строковые ключи, как и ожидалось:

table["key"] // ok

Но когда я пытаюсь получить доступ к карте с помощью строкового ключа, полученного от os.Stdin...

reader, _ := bufio.NewReader(os.Stdin)
key, _ := reader.ReadString('\n') // type "key" (no quotations), press enter
value, _ := table[key] // no value :(

Что может быть не так?

29.11.2014

Ответы:


1

Убедитесь, что ваш ключ не включает разделитель '\n', включенный в bytes.ReadString():

(и вообще, не игнорируйте возвращаемые значения, особенно ошибки)

См. этот работающий(!) пример на http://ideone.com/qgvsmF:

package main

import "bufio"
import "fmt"
import "os"

func main() {
    table := make(map[string]string)

    table["key1"] = "val1"
    table["key2"] = "val2"
    table["key3"] = "val3"

    fmt.Println("Enter a key (followed by Return):")
    reader := bufio.NewReader(os.Stdin)
    input, err := reader.ReadString('\n')
    if err != nil {
        panic(err)
    }

    val, ok := table[input]
    fmt.Println("val for key '" + input + "' = '" + val + "'(" + fmt.Sprintf("%v", ok) + ")")
}

Он покажет ключ, равный:

'key2
'

Удалите последний символ вашей строки, как в этом запускаемый пример:

input = strings.TrimRight(input, "\r\n")

Выход:

Enter a key (followed by Return):
val for key 'key2' = 'val2'(true)
29.11.2014
  • Итак, в основном мне просто нужно было strings.Trim ввести. Спасибо! 29.11.2014
  • Обрезка @marcioAlmada или input[:len(input)-1], поскольку я отредактировал ответ. ideone.com/qgvsmF иллюстрирует это. 29.11.2014
  • Кстати, не уверен, что '\n' совместим со всеми платформами. Может быть, на окнах нужно использовать '\r'? 29.11.2014
  • @marcioAlmada правда, я заменил его на input = strings.Trim(input, "\r\n") 29.11.2014

  • 2

    В документации о ReadString говорится:

    ReadString читает до первого появления разделителя во входных данных, возвращая строку, содержащую данные до разделителя включительно.

    Таким образом, ключевая переменная содержит ключевую строку плюс \n (или \r\n в Windows), и ее нельзя найти на карте.

    29.11.2014
    Новые материалы

    Кластеризация: более глубокий взгляд
    Кластеризация — это метод обучения без учителя, в котором мы пытаемся найти группы в наборе данных на основе некоторых известных или неизвестных свойств, которые могут существовать. Независимо от..

    Как написать эффективное резюме
    Предложения по дизайну и макету, чтобы представить себя профессионально Вам не позвонили на собеседование после того, как вы несколько раз подали заявку на работу своей мечты? У вас может..

    Частный метод Python: улучшение инкапсуляции и безопасности
    Введение Python — универсальный и мощный язык программирования, известный своей простотой и удобством использования. Одной из ключевых особенностей, отличающих Python от других языков, является..

    Как я автоматизирую тестирование с помощью Jest
    Шутка для победы, когда дело касается автоматизации тестирования Одной очень важной частью разработки программного обеспечения является автоматизация тестирования, поскольку она создает..

    Работа с векторными символическими архитектурами, часть 4 (искусственный интеллект)
    Hyperseed: неконтролируемое обучение с векторными символическими архитектурами (arXiv) Автор: Евгений Осипов , Сачин Кахавала , Диланта Хапутантри , Тимал Кемпития , Дасвин Де Сильва ,..

    Понимание расстояния Вассерштейна: мощная метрика в машинном обучении
    В обширной области машинного обучения часто возникает необходимость сравнивать и измерять различия между распределениями вероятностей. Традиционные метрики расстояния, такие как евклидово..

    Обеспечение масштабируемости LLM: облачный анализ с помощью AWS Fargate и Copilot
    В динамичной области искусственного интеллекта все большее распространение получают модели больших языков (LLM). Они жизненно важны для различных приложений, таких как интеллектуальные..