Go lang else 在不应该被调用的时候被首先调用

go lang else 在不应该被调用的时候被首先调用

Go语言中的else语句在不应该被调用的情况下会被优先执行,这是一个常见的错误现象。else语句通常用来处理条件不满足的情况,但是在某些情况下,由于代码逻辑错误或者程序流程控制错误,else语句会被错误地执行。这种情况下,程序的行为可能会出现错误,导致程序运行结果不符合预期。php小编香蕉在这篇文章中将为您详细介绍这个问题的原因以及解决方法,帮助您更好地理解和避免这个常见的错误。

问题内容

// Invalid token found, print error message and exit.func abort(message string) {    panic(message)}// Skip whitespace except newlines, which we will use to indicate the end of a statement.func (s *Source) skipWhitespace() {    for s.curChar == " " || s.curChar == "" || s.curChar == "" {        s.nextChar()    }}// Skip comments in the code.func skipComment() {}// Return the next token.func (s *Source) getToken() Token {    var token Token    // Check the first character of this token to see if we can decide what it is.    // If it is a multiple character operator (e.g., !=), number, identifier, or keyword then we will process the rest.    // s.skipWhitespace()    println("curChar: " + s.curChar)    s.skipWhitespace()    println("curChar: after 84 " + s.curChar)    if s.curChar == "+" {        token = Token{s.curChar, PLUS}    } else if s.curChar == "-" {        token = Token{s.curChar, MINUS}    } else if s.curChar == "*" {        token = Token{s.curChar, ASTERISK}    } else if s.curChar == "/" {        token = Token{s.curChar, SLASH}    } else if s.curChar == "" {        token = Token{s.curChar, NEWLINE}    } else if s.curChar == "" {        token = Token{s.curChar, EOF}    } else {        println("Unknown token: " + s.curChar)    }    s.nextChar()    return token}// Process the next character.func (s *Source) nextChar() {    s.curPos++    if s.curPos >= len(s.source) {        s.curChar = "" // EOF    } else {        s.curChar = string(s.source[s.curPos])    }}func do_lexing(codeString string) { // code_string = `+- */`    // Initialize the source.    source := Source{source: codeString + "", curChar: "", curPos: -1}    // Loop through and print all tokens.    token := source.getToken()    println(token.text, token.kind, "token 119")    for token.kind != EOF {        println(token.text, token.kind)        token = source.getToken()    }}

登录后复制

输出为

curChar: curChar: after 84 Unknown token:  0 token 199 0curChar: +curChar: after 84 ++ 202curChar: -curChar: after 84 -- 203curChar:  curChar: after 84 ** 204curChar: /curChar: after 84 // 205curChar: curChar: after 84  0curChar: curChar: after 84

登录后复制

它应该首先打印 + 和 – 令牌,然后将未知令牌打印到终端,但它首先打印未知令牌,然后打印所有其他令牌..我可能错过了一些东西。我是 golang 新手。println(token.text, token.kind, “令牌 119”)此行也不会首先打印

我尝试添加打印语句

解决方法

您在上述 println 语句之前首先调用 getToken,并且 getToken 有自己的 println 调用,因此不首先打印“token 199”是合乎逻辑的。

不,不应该。您正在调用 getToken ,它调用 skipWhitespace ,它调用 nextChar ONLY IF curChar 是空格,但 curChar 是 “” (空字符串,不是空格)开头你的程序的。输出反映了实现。

以上就是Go lang else 在不应该被调用的时候被首先调用的详细内容,更多请关注【创想鸟】其它相关文章!

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至253000106@qq.com举报,一经查实,本站将立刻删除。

发布者:PHP中文网,转转请注明出处:https://www.chuangxiangniao.com/p/2484913.html

(0)
上一篇 2025年3月4日 21:39:41
下一篇 2025年2月23日 13:11:39

AD推荐 黄金广告位招租... 更多推荐

相关推荐

发表回复

登录后才能评论