Pawel
а как в аля питоне append
не глуми голову.
создай новый тип B включающий твой исходный A
type B struct{
A
... // здесь твой блэкджек и шлюхи
}
и верни его из функции
Oleksandr
подскажите пожалуйста.
Задача: вычитать конфиг из файла при инициализации приложения и юзать его в разных местах.
Как это лучше сделать? глобальные переменные или передавать как аргумент везде, где он юзается?
Anonymous
Oleksandr
за глобальные пишут, что это зло и надо избегать.
🎉
Anonymous
Oleksandr
+ попробовал так, но она (глобальная переменная) не везде видна
🎉
Ivan
Alexander
Главное, не пытаться в него писать после запуска приложения. А то на race condition можно налететь
Oleksandr
не. я прочитаю раз и все
🎉
ой хз, хз
есть експириенс(не у меня) они овердокуя чего в памяти держат... тупо так быстрее отдавать...
Oleksandr
хорошо. теперь что я делаю не так.
var cnf util.ReaderConfig
func main() {
cnf, err := getReaderConfiguration()
fmt.Println(cnf)
.......
}
Oleksandr
тут нормально. есть значение.
Mikhail
Хочу скачать файл. Делаю так: https://play.golang.org/p/SrBZo5HC8yR
И что то не то получается.
Oleksandr
дальше по коду в другой функции (в этом же main.go файле)
func processFile(fileName string, category util.Category) {
fmt.Println(cnf)
platformConfig, err := util.ParseClickhouseConfigFile(cnf.PlatformConfigDir + category.Name + ".yml")
Oleksandr
не видит. Пустая структура
🎉
не. я прочитаю раз и все
// Config struct for ...
type Config struct {
...
ListenLocal string `json:"listenlocal"`
DatabaseNameAndPath string `json:"databasenameandpath"`
}
// LoadConfig load configuration from file
func LoadConfig() (c *Config, err error) {
b, err := ioutil.ReadFile("config.json")
if err != nil {
return nil, err
}
err = json.Unmarshal(b, &c)
if err != nil {
log.Fatal(err)
return nil, err
}
return c, nil
}
Ну и сам конфиг config.json
{
"...": "",
"...": ""
}
🎉
А, что-бы везде видно было глобальную переменную воткни
var conf *Config
терь можешь так юзать
err = InitDB(conf.DatabaseNameAndPath)
Oleksandr
var globalConfig util.ReaderConfig
func main() {
tmpConfig, err := getReaderConfiguration()
fmt.Println(cnf1)
globalConfig = tmpConfig
}
О. так видно ее везде
Alexander
> cnf, err := getReaderConfiguration()
Эта строчка создаёт новую переменную cnf
Alexander
Anonymous
Anonymous
Anonymous
Что делает CheckErr?
Mikhail
но юникод же везде..
Mikhail
что еще может не так пойти
Anonymous
Mikhail
golangURL = "https://golang.org/dl/"
Mikhail
Anonymous
ааа ок
Mikhail
Alexander
Скобки то внутри кавычек стоят
Mikhail
Alexander
Хотя, тогда, наверное, надо rg.FindAll(a, 1)[0] заменить на rg.FindAll(a, 1)[1]
Alexander
не, я гоню. Ignore me
Mikhail
Anonymous
Anonymous
Или даже сразу FindString
Mikhail
Sergey
Ребят, можете для дилетанта объяснить, вот я использую для логирования стандартные возможности, либо фреймворки, в консоль то все пишет прекрасно, а если сервер упадёт где это смотреть? Или нужно как то это в файл писать или где то можно прочитать просто так?
Anonymous
Anonymous
Lev
если nohup, то в nohup.out :troll:
Alexander
В мире докера и Kubernettes вообще уже повсеместно принято лог писать в stdout/stderr
🎉
Хелп, свежий взгляд нужен.
type MySityWeather struct {
TempC float64 `json:"tempc"`
SityWeather string `json:"sityweather"`
}
var m MySityWeather
func weather() error {
...
m.TempC = r.CurrentObservation.TempC
m.SityWeather = r.CurrentObservation.Weather
}
main(){
go weather()
fmt.Pprintf("Погода %2.f°С %s\n", m.TempC, m.SityWeather)
}
В функ main по нулям, ЧЯДНТ?
Alexander
Sity 🤦
Eugene
не вызываешь weather()?
🎉
Anonymous
Eugene
указатель только инициализируй сначала, что бы паники не было
Alexander
Горутина то не выполняется к моменту вызова Pprintf
Alexander
Надо ждать её завершения
Alexander
Где? Я вижу что горутина стартует, потом сразу выполняется принт и программа завершается. Горутина прибивается при этрм
Eugene
я го изучаю первый день, но с горутинами как мне кажется надо таки как-то синхронизироваться
Eugene
по крайней мере в шарпе есть await для этого
🎉
Alexander
Просто убери go перед weather для начала
🎉
Только там через мапу передаю, а тут через структуру.
Alexander
Через 10 минут отвечу, если кто-то другой не поможет. Занят немного сейчас
Eugene
http://goinbigdata.com/golang-wait-for-all-goroutines-to-finish/
🎉
Ок, пойду с указателем помудрю.
Eugene
если кратко - надо сделать канал и в горутине в него писать, в основном потоке - ждать написаного
Eugene
когда прочитал - можешь быть уверен что работа выполнена
Eugene
go func не прерывает основного потока
Eugene
ну смотри, проблема в чем, ты вызываешь горутину, но это не вызов функции, это указание шедулеру запустить эту функцию когда нибудь, когда будет свободный поток для этого
Evgeniy
Evgeniy
а как она оживает?
Eugene
короче сделай поле go weather сразу слип на пять секунд и думаю ты увидишь значение