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

4 回复

别担心,这种事我们每个人偶尔都会遇到 😊

更多关于Golang语法错误:遇到意外的NewLog,应为括号的实战系列教程也可以访问 https://www.itying.com/category-94-b0.html


哦,抱歉,我会用正确的方式发布。感谢你的帮助,我太笨了,竟然没看到。真的非常感谢你!

你好 @Showbestt,欢迎来到论坛!

请帮助我们更好地帮助你。你发布的代码相当长,并且格式不规范。

提示:以下两个简单的步骤可以帮助代码在本论坛中更易读:

  1. 确保你的代码已通过 gofmt 格式化。大多数支持 Go 的编辑器在保存 Go 文件时会自动执行此操作。

  2. 在此处发布代码时,请将其放在代码围栏中,如下所示:

    package main
    // ...more code...
    

代码将显示为这样:

package main
// ...more code...

代码围栏是一行包含三个反引号的线,你可以选择性地传递文件格式的名称(go、html、sh、json……)以添加语法高亮。

要排查你遇到的错误,请查看错误发生行之前的行。导致此错误的常见原因是遗漏了括号、方括号或花括号。

特别是,看起来函数 parseLogLevel 缺少一个闭合花括号。

你的代码有几个语法错误和逻辑问题。主要问题包括:

  1. 缺少导入包:代码中使用了 stringserrors 包,但没有导入。
  2. 函数定义语法错误enable 函数缺少完整的比较表达式。
  3. 拼写错误parseLogLevel 函数中 DEBUGn 应该是 DEBUG
  4. 方法调用错误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)
    }
}

主要修改:

  1. 添加了 stringserrors 包的导入。
  2. 修正了 parseLogLevel 函数中的 DEBUGn 拼写错误。
  3. 补全了 enable 函数的比较表达式 l.Level <= logLevel
  4. 修正了 Debug 方法中的 i.enablel.enable

现在代码应该可以正常编译运行了。

回到顶部