diff --git a/gee-orm/day3-save-query/session/record.go b/gee-orm/day3-save-query/session/record.go index 5f033e0..ae83132 100644 --- a/gee-orm/day3-save-query/session/record.go +++ b/gee-orm/day3-save-query/session/record.go @@ -8,9 +8,9 @@ import ( // Insert one or more records in database func (s *Session) Insert(values ...interface{}) (int64, error) { recordValues := make([]interface{}, 0) + table := s.Model(values[0]).RefTable() + s.clause.Set(clause.INSERT, table.Name, table.FieldNames) for _, value := range values { - table := s.Model(value).RefTable() - s.clause.Set(clause.INSERT, table.Name, table.FieldNames) recordValues = append(recordValues, table.RecordValues(value)) } diff --git a/gee-orm/day5-hooks/session/hooks.go b/gee-orm/day5-hooks/session/hooks.go index d73c3c2..d007e87 100644 --- a/gee-orm/day5-hooks/session/hooks.go +++ b/gee-orm/day5-hooks/session/hooks.go @@ -31,5 +31,4 @@ func (s *Session) CallMethod(method string, value interface{}) { } } } - return } diff --git a/gee-web/day7-panic-recover/gee/recovery.go b/gee-web/day7-panic-recover/gee/recovery.go index 95a6df3..5ba72ef 100644 --- a/gee-web/day7-panic-recover/gee/recovery.go +++ b/gee-web/day7-panic-recover/gee/recovery.go @@ -10,15 +10,30 @@ import ( // print stack trace for debug func trace(message string) string { + // Allocate an array to store program counters var pcs [32]uintptr - n := runtime.Callers(3, pcs[:]) // skip first 3 caller + // Get call stack info, skip first 3 callers + n := runtime.Callers(3, pcs[:]) var str strings.Builder str.WriteString(message + "\nTraceback:") - for _, pc := range pcs[:n] { - fn := runtime.FuncForPC(pc) - file, line := fn.FileLine(pc) - str.WriteString(fmt.Sprintf("\n\t%s:%d", file, line)) + + // Create Frames object + frames := runtime.CallersFrames(pcs[:n]) + for { + // Get one frame per iteration + frame, more := frames.Next() + + // Add file, line number and function name + str.WriteString(fmt.Sprintf("\n\t%s:%d - %s", + frame.File, + frame.Line, + frame.Function, + )) + + if !more { + break + } } return str.String() }