10-21
parent
083ec1e2f4
commit
38a65d5d2d
|
@ -0,0 +1,20 @@
|
||||||
|
package main
|
||||||
|
|
||||||
|
import (
|
||||||
|
"encoding/json"
|
||||||
|
"fmt"
|
||||||
|
)
|
||||||
|
|
||||||
|
//json
|
||||||
|
|
||||||
|
type person struct {
|
||||||
|
Name string `json:"name"`
|
||||||
|
Age int `json:"age"`
|
||||||
|
}
|
||||||
|
|
||||||
|
func main() {
|
||||||
|
str := `{"name":"周林","age":9000}`
|
||||||
|
var p person
|
||||||
|
json.Unmarshal([]byte(str), &p) //注意这里传值要对应传递结构体类型,根据结构体的key去对应匹配value
|
||||||
|
fmt.Println(p.Name, p.Age)
|
||||||
|
}
|
|
@ -1,6 +1,9 @@
|
||||||
package mylogger_test
|
package mylogger_test
|
||||||
|
|
||||||
import "fmt"
|
import (
|
||||||
|
"fmt"
|
||||||
|
"time"
|
||||||
|
)
|
||||||
|
|
||||||
// logger 日志结构体
|
// logger 日志结构体
|
||||||
type Logger struct {
|
type Logger struct {
|
||||||
|
@ -19,9 +22,16 @@ func NewLog(levelStr string) Logger {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func log(lv logLevel,msg string){
|
||||||
|
fmt.Printf()
|
||||||
|
}
|
||||||
|
|
||||||
func (l Logger) Debug(msg string) {
|
func (l Logger) Debug(msg string) {
|
||||||
|
if l.enable(DEBUG) {
|
||||||
now := time.Now()
|
now := time.Now()
|
||||||
fmt.Printf("[%s] %s" now.Format("2006-01-02 15:04:05"),msg)
|
funcName, fileName, lineNo := getInfo(2)
|
||||||
|
fmt.Printf("[%s][DEBUG][%s:%s:%d]%s", now.Format("2006-01-02 15:04:05"), ,fileName,funcName,lineNumber,msg)
|
||||||
|
}
|
||||||
}
|
}
|
||||||
func (l Logger) Info(msg string) {
|
func (l Logger) Info(msg string) {
|
||||||
fmt.Println(msg)
|
fmt.Println(msg)
|
||||||
|
|
|
@ -1,11 +1,22 @@
|
||||||
package mylogger_test
|
package mylogger_test
|
||||||
|
|
||||||
import "runtime"
|
import (
|
||||||
|
"fmt"
|
||||||
|
"path"
|
||||||
|
"runtime"
|
||||||
|
)
|
||||||
|
|
||||||
func main() {
|
func main() {
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
func getInfo(n int) {
|
func getInfo(skip int) (funcName, fileName string, lineNo int) {
|
||||||
pc, fine, line, ok := runtime.Caller()
|
pc, file, lineNo, ok := runtime.Caller(skip)
|
||||||
|
if !ok {
|
||||||
|
fmt.Printf("runtime.Caller() failed\n")
|
||||||
|
return
|
||||||
|
}
|
||||||
|
funcName = runtime.FunForPC(pc).Name()
|
||||||
|
fileName = path.Base(file)
|
||||||
|
return
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue