Golang语法错误:遇到意外的NewLog,应为括号
Golang语法错误:遇到意外的NewLog,应为括号 你好,我是Golang新手,英语不太好。这段代码有什么问题?我找不出来。
package mylogger
import (
“fmt”
“time”
)
type LogLevel uint16
const (
UNKNOWN LogLevel = iota
DEBUG
TRACE
INFO
WARNING
ERROR
FATAL
)
type Logger struct {
Level LogLevel
}
func parseLogLevel(s string) (LogLevel, error) {
s = strings.ToLower(s)
switch s {
case “debug”:
return DEBUGn, nil
case “trace”:
return TRACE, nil
case “info”:
return INFO, nil
case “warning”:
return WARNING, nil
case “error”:
return ERROR, nil
case “fatal”:
return FATAL, nil
default:
err := errors.New(“useless loglevel”)
return UNKNOWN, err
}
func NewLog (levelStr string) Logger {
level, err := parseLogLevel(levelStr)
if err != nil {
panic(err)
}
return Logger {
Level: level,
}
}
func (l Logger) enable(logLevel LogLevel) bool {
return l.Level >
}
func (l Logger) Debug (msg string) {
if i.enable(DEBUG) {
now := time.Now()
fmt.Printf("[%s] [DEBUG] %s\n", now.Format(“2006-01-02 15:04:05”), msg)
}
}
func (l Logger) Info (msg string) {
if l.enable(INFO) {
now := time.Now()
fmt.Printf("[%s] [INFO] %s\n", now.Format(“2006-01-02 15:04:05”), msg)
}
}
func (l Logger) Warning (msg string) {
if l.enable(WARNING) {
now := time.Now()
fmt.Printf("[%s] [WARNING] %s\n", now.Format(“2006-01-02 15:04:05”), msg)
}
}
func (l Logger) Error (msg string) {
if l.enable(ERROR) {
now := time.Now()
fmt.Printf("[%s] [ERROR] %s\n", now.Format(“2006-01-02 15:04:05”), msg)
}
}
func (l Logger) Fatal (msg string) {
if l.enable(FATAL) {
now := time.Now()
fmt.Printf("[%s] [FATAL] %s\n", now.Format(“2006-01-02 15:04:05”), msg)
}
}
45:6: 语法错误:意外的 NewLog,期望 ( 56:33: 语法错误:意外的 LogLevel,期望逗号或 )
谢谢!
更多关于Golang语法错误:遇到意外的NewLog,应为括号的实战教程也可以访问 https://www.itying.com/category-94-b0.html
别担心,这种事我们每个人偶尔都会遇到 😊
更多关于Golang语法错误:遇到意外的NewLog,应为括号的实战系列教程也可以访问 https://www.itying.com/category-94-b0.html
哦,抱歉,我会用正确的方式发布。感谢你的帮助,我太笨了,竟然没看到。真的非常感谢你!
你好 @Showbestt,欢迎来到论坛!
请帮助我们更好地帮助你。你发布的代码相当长,并且格式不规范。
提示:以下两个简单的步骤可以帮助代码在本论坛中更易读:
-
确保你的代码已通过 gofmt 格式化。大多数支持 Go 的编辑器在保存 Go 文件时会自动执行此操作。
-
在此处发布代码时,请将其放在代码围栏中,如下所示:
package main // ...more code...
代码将显示为这样:
package main
// ...more code...
代码围栏是一行包含三个反引号的线,你可以选择性地传递文件格式的名称(go、html、sh、json……)以添加语法高亮。
要排查你遇到的错误,请查看错误发生行之前的行。导致此错误的常见原因是遗漏了括号、方括号或花括号。
特别是,看起来函数 parseLogLevel 缺少一个闭合花括号。
你的代码有几个语法错误和逻辑问题。主要问题包括:
- 缺少导入包:代码中使用了
strings和errors包,但没有导入。 - 函数定义语法错误:
enable函数缺少完整的比较表达式。 - 拼写错误:
parseLogLevel函数中DEBUGn应该是DEBUG。 - 方法调用错误:
Debug方法中i.enable应该是l.enable。
以下是修正后的代码:
package mylogger
import (
"errors"
"fmt"
"strings"
"time"
)
type LogLevel uint16
const (
UNKNOWN LogLevel = iota
DEBUG
TRACE
INFO
WARNING
ERROR
FATAL
)
type Logger struct {
Level LogLevel
}
func parseLogLevel(s string) (LogLevel, error) {
s = strings.ToLower(s)
switch s {
case "debug":
return DEBUG, nil
case "trace":
return TRACE, nil
case "info":
return INFO, nil
case "warning":
return WARNING, nil
case "error":
return ERROR, nil
case "fatal":
return FATAL, nil
default:
err := errors.New("useless loglevel")
return UNKNOWN, err
}
}
func NewLog(levelStr string) Logger {
level, err := parseLogLevel(levelStr)
if err != nil {
panic(err)
}
return Logger{
Level: level,
}
}
func (l Logger) enable(logLevel LogLevel) bool {
return l.Level <= logLevel
}
func (l Logger) Debug(msg string) {
if l.enable(DEBUG) {
now := time.Now()
fmt.Printf("[%s] [DEBUG] %s\n", now.Format("2006-01-02 15:04:05"), msg)
}
}
func (l Logger) Info(msg string) {
if l.enable(INFO) {
now := time.Now()
fmt.Printf("[%s] [INFO] %s\n", now.Format("2006-01-02 15:04:05"), msg)
}
}
func (l Logger) Warning(msg string) {
if l.enable(WARNING) {
now := time.Now()
fmt.Printf("[%s] [WARNING] %s\n", now.Format("2006-01-02 15:04:05"), msg)
}
}
func (l Logger) Error(msg string) {
if l.enable(ERROR) {
now := time.Now()
fmt.Printf("[%s] [ERROR] %s\n", now.Format("2006-01-02 15:04:05"), msg)
}
}
func (l Logger) Fatal(msg string) {
if l.enable(FATAL) {
now := time.Now()
fmt.Printf("[%s] [FATAL] %s\n", now.Format("2006-01-02 15:04:05"), msg)
}
}
主要修改:
- 添加了
strings和errors包的导入。 - 修正了
parseLogLevel函数中的DEBUGn拼写错误。 - 补全了
enable函数的比较表达式l.Level <= logLevel。 - 修正了
Debug方法中的i.enable为l.enable。
现在代码应该可以正常编译运行了。

