Я использую простую библиотеку json во встроенной среде и пытаюсь избавиться от глобальной переменной в своем пользовательском коде. У меня здесь есть фрагмент, который пытается объяснить мою ситуацию.
В библиотеке есть функция libjson_parser
, которую можно вызывать каждый раз, когда необходимо проанализировать массив символов. Как только операция завершена, она передает результат операции функции, которая зарегистрирована как обратный вызов (json_post_parse
в следующем примере), используя libjson_callback_register
.
Поскольку у меня есть различные типы json пакетов для анализа, я использую глобальную переменную parsing_config
, которая устанавливается перед вызовом синтаксического анализатора, чтобы в функции json_post_parse
можно было выполнить правильную операцию ,
Я знаю, что использование глобальных переменных осуждается, поэтому я ищу способы избавиться от этой глобальной переменной, но не уверен, как go сделать это?
// library functions:
// libjson_callback_register
// libjson_parser
// user function, function signature fixed by library:
// json_post_parse
static uint8_t parsing_config = 0;
int main()
{
// register callback
libjson_callback_register(json_post_parse);
// dummy load
char[32] payload;
uint16_t len = 32;
// type A post parsing
parsing_config = 1;
libjson_parser(payload, len);
// type B
parsing_config = 2;
libjson_parser(payload, len);
return 0;
}
json_post_parse(json_obj* json)
{
switch(parsing_config) {
case 1:
//do something
break;
case 2:
// do something
break;
default:
break;
}
}