Parcourir la source

feat: add go version judge when print debug warning log (#1572)

* feat: add go version judge when print debug warning log

* remove invalid statement

* use one const
田欧 il y a 7 ans
Parent
commit
834a2ec64c
2 fichiers modifiés avec 40 ajouts et 2 suppressions
  1. 17 1
      debug.go
  2. 23 1
      debug_test.go

+ 17 - 1
debug.go

@@ -8,8 +8,13 @@ import (
 	"bytes"
 	"bytes"
 	"fmt"
 	"fmt"
 	"html/template"
 	"html/template"
+	"runtime"
+	"strconv"
+	"strings"
 )
 )
 
 
+const ginSupportMinGoVer = 6
+
 // IsDebugging returns true if the framework is running in debug mode.
 // IsDebugging returns true if the framework is running in debug mode.
 // Use SetMode(gin.ReleaseMode) to disable debug mode.
 // Use SetMode(gin.ReleaseMode) to disable debug mode.
 func IsDebugging() bool {
 func IsDebugging() bool {
@@ -49,10 +54,21 @@ func debugPrint(format string, values ...interface{}) {
 	}
 	}
 }
 }
 
 
+func getMinVer(v string) (uint64, error) {
+	first := strings.IndexByte(v, '.')
+	last := strings.LastIndexByte(v, '.')
+	if first == last {
+		return strconv.ParseUint(v[first+1:], 10, 64)
+	}
+	return strconv.ParseUint(v[first+1:last], 10, 64)
+}
+
 func debugPrintWARNINGDefault() {
 func debugPrintWARNINGDefault() {
-	debugPrint(`[WARNING] Now Gin requires Go 1.6 or later and Go 1.7 will be required soon.
+	if v, e := getMinVer(runtime.Version()); e == nil && v <= ginSupportMinGoVer {
+		debugPrint(`[WARNING] Now Gin requires Go 1.6 or later and Go 1.7 will be required soon.
 
 
 `)
 `)
+	}
 	debugPrint(`[WARNING] Creating an Engine instance with the Logger and Recovery middleware already attached.
 	debugPrint(`[WARNING] Creating an Engine instance with the Logger and Recovery middleware already attached.
 
 
 `)
 `)

+ 23 - 1
debug_test.go

@@ -11,6 +11,7 @@ import (
 	"io"
 	"io"
 	"log"
 	"log"
 	"os"
 	"os"
+	"runtime"
 	"sync"
 	"sync"
 	"testing"
 	"testing"
 
 
@@ -88,7 +89,13 @@ func TestDebugPrintWARNINGDefault(t *testing.T) {
 		debugPrintWARNINGDefault()
 		debugPrintWARNINGDefault()
 		SetMode(TestMode)
 		SetMode(TestMode)
 	})
 	})
-	assert.Equal(t, "[GIN-debug] [WARNING] Now Gin requires Go 1.6 or later and Go 1.7 will be required soon.\n\n[GIN-debug] [WARNING] Creating an Engine instance with the Logger and Recovery middleware already attached.\n\n", re)
+	m, e := getMinVer(runtime.Version())
+	assert.Nil(t, e)
+	if m <= ginSupportMinGoVer {
+		assert.Equal(t, "[GIN-debug] [WARNING] Now Gin requires Go 1.6 or later and Go 1.7 will be required soon.\n\n[GIN-debug] [WARNING] Creating an Engine instance with the Logger and Recovery middleware already attached.\n\n", re)
+	} else {
+		assert.Equal(t, "[GIN-debug] [WARNING] Creating an Engine instance with the Logger and Recovery middleware already attached.\n\n", re)
+	}
 }
 }
 
 
 func TestDebugPrintWARNINGNew(t *testing.T) {
 func TestDebugPrintWARNINGNew(t *testing.T) {
@@ -129,3 +136,18 @@ func captureOutput(f func()) string {
 	writer.Close()
 	writer.Close()
 	return <-out
 	return <-out
 }
 }
+
+func TestGetMinVer(t *testing.T) {
+	var m uint64
+	var e error
+	_, e = getMinVer("go1")
+	assert.NotNil(t, e)
+	m, e = getMinVer("go1.1")
+	assert.Equal(t, uint64(1), m)
+	assert.Nil(t, e)
+	m, e = getMinVer("go1.1.1")
+	assert.Nil(t, e)
+	assert.Equal(t, uint64(1), m)
+	_, e = getMinVer("go1.1.1.1")
+	assert.NotNil(t, e)
+}