
Daniel
21.02.2018
11:59:23
почему бы не начать с того, чтобы сформулировать вопрос так, чтобы на него можно было ответить?

Linux
21.02.2018
11:59:58
У меня это храническое, не умею формулировать

Daniel
21.02.2018
12:00:29
а ведь программирование - это в первую очередь про умение формулировать

Michael
21.02.2018
12:00:39

Google

Michael
21.02.2018
12:01:49
на самом деле вариантов много, конкретизированный вопрос ускорит решение задачи

Linux
21.02.2018
12:02:02
не очень

Daniel
21.02.2018
12:02:25
вариантов два

Michael
21.02.2018
12:02:26

Linux
21.02.2018
12:02:33
у меня есть файл и я его хочу передать ссылке, вообще я даже пример показал как делал

Daniel
21.02.2018
12:02:42
чиать файл целиком и читать файл кусками
html нет никакого повода читать кусками

Linux
21.02.2018
12:03:22
Ладно буду читать

Daniel
21.02.2018
12:03:23
что такое "передать файл ссылке"? что это за дрянь такая - ссылка?

Linux
21.02.2018
12:03:27
И эксперементировать
В gin было так
r.GET("/", func(c *gin.Context){
c.HTML(http.StatusOK, "index.html",)
})
продублировал

Google

Michael
21.02.2018
12:04:19
Ладно буду читать
выше пример тебе дали, несколько строчек отлично решают твою задачу, если не понятно как работает, то спроси в каком месте не понятно

Linux
21.02.2018
12:04:48
Щас домой прийду потестирую

Michael
21.02.2018
12:06:20
идея про nginx была хорошей
может тут фреймвёрк совсем и не нужен

Daniel
21.02.2018
12:07:23
а я вот уверен, что, как только вопрос будет сформулирован в общепринятых терминах - окажется, что ответ есть прямо в доке

Michael
21.02.2018
12:08:40
аксиома


Alexandr
21.02.2018
12:47:17
Добрый день коллеги, подскажите что я делаю не так
у меня выполнения логирования в некоторых местах кода не работают
здесь
var logger *zap.SugaredLogger
func init(){
logger = logg.DefaultLogger()
}
я инициализирую метод логирования
func main() {
Cfg, err := config.InitConfig()
if err != nil {
logger.Fatalf("Error init config: %v", err)
}
logger.Infof("Config loaded: %v", Cfg)
var handlefunc = func(message *spec.FrameMessage) {
var result = &db.MaTradesByUser{}
result, err = db.SumQuantityByUsersWithTime(MaTradesByUser.UserId, MaTradesByUser.TimeFrom, MaTradesByUser.TimeTo)
if err != nil {
logger.Errorf("Failed to exec query %v", err)
}
logger.Infof("Query result: &v", result)
}
_, err = Client.Subscribe(FrameSubscribe, handlefunc, concurrency)
if err != nil {
logger.Errorf("Failed to subscribe command %v", err)
}
logger.Infof("Subscribe %v accomplished", FrameSubscribe.Name)
wait.Add(1)
wait.Wait()
в handlefunc почему то логирование не работает
Сама handlefunc выполняется


Daniel
21.02.2018
12:51:59
а если в ней проинитить логгер?

Alexandr
21.02.2018
12:54:19
Я пробовал даже а самом методе db.SumQuantityByUsers вписать стандартный log и та же фигня

Michael
21.02.2018
13:16:44
@LychanginAV logg.DefaultLogger() а это откуда?


Alexandr
21.02.2018
13:17:11
это я в пакете описал параметры для zap
package log
import (
"go.uber.org/zap"
"go.uber.org/zap/zapcore"
)
// ZapConfig holds variables for zap logger
type ZapConfig struct {
// Level is the minimum enabled logging level. Note that this is a dynamic
// level, so calling Config.Level.SetLevel will atomically change the log
// level of all loggers descended from this config.
Level zap.AtomicLevel `json:"level" yaml:"level"`
// Development puts the logger in development mode, which changes the
// behavior of DPanicLevel and takes stacktraces more liberally.
Development bool `json:"development" yaml:"development"`
// DisableCaller stops annotating logs with the calling function's file
// name and line number. By default, all logs are annotated.
DisableCaller bool `json:"disableCaller" yaml:"disableCaller"`
// DisableStacktrace completely disables automatic stacktrace capturing. By
// default, stacktraces are captured for WarnLevel and above logs in
// development and ErrorLevel and above in production.
DisableStacktrace bool `json:"disableStacktrace" yaml:"disableStacktrace"`
// Encoding sets the logger's encoding. Valid values are "json" and
// "console", as well as any third-party encodings registered via
// RegisterEncoder.
Encoding string `json:"encoding" yaml:"encoding"`
// EncoderConfig sets options for the chosen encoder. See
// zapcore.EncoderConfig for details.
EncoderConfig zapcore.EncoderConfig `json:"encoderConfig" yaml:"encoderConfig"`
// OutputPaths is a list of paths to write logging output to. See Open for
// details.
OutputPaths []string `json:"outputPaths" yaml:"outputPaths"`
// ErrorOutputPaths is a list of paths to write internal logger errors to.
// The default is standard error.
//
// Note that this setting only affects internal errors; for sample code that
// sends error-level logs to a different location from info- and debug-level
// logs, see the package-level AdvancedConfiguration example.
ErrorOutputPaths []string `json:"errorOutputPaths" yaml:"errorOutputPaths"`
// InitialFields is a collection of fields to add to the root logger.
InitialFields map[string]interface{} `json:"initialFields" yaml:"initialFields"`
}
// MustBuild create zap logger and set some it variables
func (zp *ZapConfig) MustBuild() (*zap.Logger, *zap.SugaredLogger) {
logger, err := zap.Config{
Level: zap.NewAtomicLevelAt(zap.DebugLevel),
Development: zp.Development,
Encoding: zp.Encoding,
EncoderConfig: zapcore.EncoderConfig{
TimeKey: zp.EncoderConfig.TimeKey,
LevelKey: zp.EncoderConfig.LevelKey,
NameKey: zp.EncoderConfig.NameKey,
CallerKey: zp.EncoderConfig.CallerKey,
MessageKey: zp.EncoderConfig.MessageKey,
StacktraceKey: zp.EncoderConfig.StacktraceKey,
LineEnding: zp.EncoderConfig.LineEnding,
EncodeLevel: zapcore.CapitalLevelEncoder,
EncodeTime: zapcore.ISO8601TimeEncoder,
EncodeDuration: zapcore.StringDurationEncoder,
EncodeCaller: zapcore.ShortCallerEncoder,
},
OutputPaths: zp.OutputPaths,
ErrorOutputPaths: zp.ErrorOutputPaths,
}.Build()
if err != nil {
panic(err)
}
sugar := logger.Sugar()
return logger, sugar
}
// DefaultLogger create default logger struct
func DefaultLogger() *zap.SugaredLogger {
logger, err := zap.Config{
Level: zap.NewAtomicLevelAt(zap.DebugLevel),
Development: true,
Encoding: "console",
EncoderConfig: zapcore.EncoderConfig{
TimeKey: "T",
LevelKey: "L",
NameKey: "N",
CallerKey: "C",
MessageKey: "M",
StacktraceKey: "S",
LineEnding: zapcore.DefaultLineEnding,
EncodeLevel: zapcore.CapitalLevelEncoder,
EncodeTime: zapcore.ISO8601TimeEncoder,
EncodeDuration: zapcore.StringDurationEncoder,
EncodeCaller: zapcore.ShortCallerEncoder,
},
OutputPaths: []string{"stdout"},
ErrorOutputPaths: []string{"stderr"},
}.Build()
if err != nil {
panic(err)
}
return logger.Sugar()
}


Linux
21.02.2018
13:56:01

Kirill
21.02.2018
14:43:04
Удаффкомовец detected

YaOurTea
21.02.2018
14:44:20
Только хотел расшифровать :)

Alexander
21.02.2018
15:32:13
Добрый вечер, для поиска инвесторов чём-то пользовались? У кого есть опыт?

Daniel
21.02.2018
15:33:30
а?!

Arch
21.02.2018
15:35:04

Daniel
21.02.2018
15:35:50
не надо тем, кто тут сидит, искать инвесторов
наебут-с

Google

Daniel
21.02.2018
15:36:05
ищите партнеров

Arch
21.02.2018
15:36:18

Daniel
21.02.2018
15:37:22
обычно да, "всех наебал и себя не забыл"

Arch
21.02.2018
15:38:10

Alexander
21.02.2018
15:38:49
Ок, спасибо

tsov
21.02.2018
15:45:44

Труба
21.02.2018
17:06:04
всем привет, использую gin + vue.js + vue-router. Пытаюсь раздавать статику через go. r.Static("/", "./assets") Если сделать так, то все будет работать до тех пор пока не обновится страница.

Slach
21.02.2018
17:07:29
и в чем вопрос? что потом не работает и где? ;)

Alexander
21.02.2018
17:08:53
Тебе надо r.NotFound видимо юзануть

Kirill
21.02.2018
17:09:49

Труба
21.02.2018
17:10:05

Alexander
21.02.2018
17:10:07
ахах, ненавязчиво, красиво)

Труба
21.02.2018
17:19:56
сделал через r.NoRoute, вроде работает, а можно как нибудь в исключения добавить группу маршрутов "/api/*", чтобы там стандартная ошибка была?

Alexander
21.02.2018
17:33:24
ну всегда switch можно завернуть в хендлере

Kirill
21.02.2018
17:36:24

Труба
21.02.2018
17:37:29
точно, всем спасибо =) что-то сегодня вообще не варит голова)

Alexey
21.02.2018
18:16:12

Daniel
21.02.2018
18:28:44
влияет на что?

Michael
21.02.2018
18:36:45
влияет на что?
Видимо об этом речь https://dave.cheney.net/2015/10/09/padding-is-hard

Vladimir
21.02.2018
18:43:02

Google

Alexey
21.02.2018
18:54:04
Посмотри в сырцы рантайма
Неохота. Я по мере необходимости поглядываю, как сделано, то что я использую тесно. У меня lowload :)

Alexey
21.02.2018
18:58:41

Admin
ERROR: S client not available

Mike
21.02.2018
18:58:51

Alexey
21.02.2018
19:06:33

Alexander
21.02.2018
20:33:31

Mike
21.02.2018
20:47:42

Alexander
21.02.2018
20:49:02
Указатель и пара интов
знаю, просто скинул из офф доки... read-only все дела (на собеседованиях любят спрашивать)

Marlik
22.02.2018
02:46:23
<Оффтоп>
Это нормальная тачка? https://invasion-labs.ru/uran235
</Оффтоп>

Mike
22.02.2018
03:49:33
Это чат про аниме?

Linux
22.02.2018
03:58:41

Kirill
22.02.2018
04:00:18

Alexey
22.02.2018
04:40:10
Go пока не настолько тяжёлый язык, чтоб водяное охлаждение покупать.

Den
22.02.2018
04:46:57
А го хттп хендлеры автоматически распаралеливает?

Alexey
22.02.2018
04:51:02

Demuz
22.02.2018
06:12:06

Anatoly
22.02.2018
07:07:07
не по теме

Alex
22.02.2018
07:07:40
@AstarQ Изучить реально, кто то может и быстрее, но это не сделает тебя мидлом, для этого нужна практика. И что будет если тебе ответят "нет, невозможно" и ты не станешь заниматся го?

Anatoly
22.02.2018
07:08:21
синтаксис языка это ничто, начинайте уже проникаться профессией программиста или не занимайтесь этим делом

Google

Olzhas
22.02.2018
07:09:43

Ilya
22.02.2018
07:10:42

Anatoly
22.02.2018
07:11:02
глупости
не его вопрос нельзя ответить исчерпывающе. Ибо вопрос довольно не корректный

Andrew
22.02.2018
07:11:20

Anatoly
22.02.2018
07:11:40
я могу только ответить "Человек занимающийся программированием"
это смысла не имеет никакого

Alex
22.02.2018
07:12:10
точно! язык просто инструмент, допустим молоток, мускул и прочий стек - гвозди, учить их такое ... а вот уметь держать молоток в руках, попасть по гвоздю и при этом не убить коллег - это ценно

Anatoly
22.02.2018
07:13:28
какая перед тобой стоит задача?

Alex
22.02.2018
07:13:31
думаю мы все разработчики, а не программисты, программист это должно быть другое

Andrew
22.02.2018
07:13:39
Да чего вы все ополчились?))
Тогда уж инженеры)