From d394b94bdf9398274024a754d9fef2cf2963f949 Mon Sep 17 00:00:00 2001 From: lyen Date: Mon, 12 May 2025 07:31:40 +0800 Subject: [PATCH 1/2] Optimize error tracking functionality to obtain precise error locations. --- gee-web/day7-panic-recover/gee/recovery.go | 25 +++++++++++++++++----- 1 file changed, 20 insertions(+), 5 deletions(-) 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() } From 117d5a0e907167692e3e51617f710d2c4a9cafb3 Mon Sep 17 00:00:00 2001 From: lyen Date: Mon, 12 May 2025 07:55:21 +0800 Subject: [PATCH 2/2] 1.Optimize Insert method to reduce redundant execution. 2.Remove unnecessary return statement. --- gee-orm/day3-save-query/session/record.go | 4 ++-- gee-orm/day5-hooks/session/hooks.go | 1 - 2 files changed, 2 insertions(+), 3 deletions(-) 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 }