转:写 GO 程序中一些常见的语法和其它错误

很多时候我们都只知道什么样儿的情况下代码会正确的执行,但是却总是记不住怎么样代码会出错,这里列出一些在 Go 开发中最经常看到的一些错误,这让我们在Go报错之前就能知道不去犯这个错,这或许能节省你很多时间。

不必须的导入 (Unncessary Imports)

创建文件 goerror1.go ,并加入下面代码:


package main

import "fmt"
import "os"

func main() {
    fmt.Println("Hello World!")
}

输出:


# command-line-arguments
./goerror1.go:4: imported and not used: "os"

错误提示为:导入了但是没有使用的包os*,为什么?在Go中,你需要使用什么,就导入什么,而导入了什么,就一定要去使用它,否则,就不要导入它,在上面的代码中,你导入了 *os 包,但是却没有使用它,所以,它的存在没有任何价值,没有任何价值的东西就不应该存在于你的代码中。

确切的名称——大小写敏感


package main

import "fmt"

func main() {
    fmt.println("Hello World!")
}

输出:


./goerror2.go:6: cannot refer to unexported name fmt.println
./goerror2.go:6: undefined: fmt.println

你定义的时候使用的是什么名称,那么在使用的使用就必须使用一模一样的名称, P 是两人个完全不同的东西,看看上面的代码,我们没有定义过 *fmt.println*,所以,我们不能去调用它,同样的,像下面这样的写法都是错误的:


Package main
Import "fmt"
import "FMT"
Func main() {}
Fmt.Println
fmt.println

用分号分开两行代码

如果你是一个有C、C++、Java或者Perl背景的开发者,你可能会注意到了, Go并不要求你在每一行代码结束时插入一个分号,这是因为它会自动的为我们添加(请看[Effective Go]9/articles/effective-go.html)这篇文章的 分号说明部分),但是,有的时候我们却开始烂用这种特性,比如下面这段代码:


package main

import "fmt"

func main() {
    fmt.Println("Hello") fmt.Println("World!")
}

输出:


./goerror3.go:6: syntax error: unexpected name, expecting semicolon or newline or }

但是下面这样的代码看上去和上面的一模一样,但是却能正确的运行:


package main

import "fmt"

func main() {
    fmt.Println("Hello")
    fmt.Println("World!")
}

输出:


Hello
World!

为什么?因为Go不允许你将两行代码写进一行,除非你显示的使用了一个分号来区分这两人行代码,比如我们把上面的代码改成下面这种形式的也是可以正确运行的:


package main

import "fmt"

func main() {
    fmt.Println("Hello"); fmt.Println("World!")
}

看了我前面翻译的那篇 [Effective Go]9/articles/effective-go.html) 这篇文章的朋友应该也会知道了,为什么上面这段代码能将两行写作一行。

不必要的分号

创建 goerror4.go 文件,写入下面这段代码,再运行它:


package main

import "fmt";;

func main() {
    fmt.Print("Hello World!")
}

输出:


/goerror4.go:3: empty top-level declaration

在Go中,任何一个分号的出现都表示一个声明的结束,那么,在上面的代码中, import “fmt”;; 中的第一个分号是可以接受的,它表示那一个声明的结束,但是在第一个与第二个分号之间不在有任何的声明出现,所以,第二个声明是多余的。

其它一些常见的语法错误

下面这些错误也是很常见的:


package 'main' // 错误,不允许使用引号包裹包名
package "main" // 同上
package main.x // 包名只允许是一个最简单的词汇,不允许使用 "."
package main/x // 同上
import 'fmt'   // 需要双引号
import fmt     // 需要双引号
func main {}   // 需要括号
func main() [] // 需要大括号
func main() { fmt.Println('Hello World!') }
               // 错误,需要使用双引号

相关推荐

  • iexplore.exe - 应用程序错误 iexplore.exe-应用程序错误iexplore.exe-应用程序错误0x7c883fec指令引用的0x7c800000内存。该内存不能为written解决办法?使用IE过程中,经常出现如下错误提示而不得不关闭IE:---------
  • Windows Live Messenger 无法登陆错误代码解决大全 80004005这是一个泛泛的错误代码,它意味着,“我知道出错了,但我不知道错误是什么”。第一步,我们可以试着重新注册MSN所需的dll文件来解决这个问题,你可以下载并运行这个批处理文件(我已经把它放到blog上了):http://drea
  • Qtopia2 编译过程错误总结与解决方法 说明:以下的错误信息是按照先后顺序发现和处理的,用户可以根据自己的错误类型信息,自己进行修改.这些错误是自己经历并解决的,也参考了其他网友的一些办法,总结一下,与大家分享1编译错误:open函数参数不够/usr/include/bits/f
  • [:zh][收藏]Go 配置出现错误: GOPATH entry is relative; must b 查看原文:http://www.xiaomiwujiecao.com/2016/01/21/收藏go-配置出现错误:-gopath-entry-is-relative-must-be-absolute-path/[:zh]Go配置出现错误:
  • vs2003 调试常见错误收集 vs2003调试常见错误收集在应用程序级别以外使用注册为allowDefinition='MachineToApplication'的节是错误的解决办法解决1:在IIS将该目录做成应用程序:打开IIS—>默认Web站点—>找到该
  • 3dsmax.exe 应用程序错误 应用程序无法正常启动 错误代码(0xc000 WIN7.64位的系统,安装了M次还是这样。首先试试兼容模式,也有可能是你的DX没有装好。一般CAD软件都要DX的支持呈现效果,因此装上DX就OK了。出现这个错误,可能是硬件的问题,也可能是软件的问题。但是,由于硬件引起该问题的概率很小,并
  • 运行 sniffer 出现脚本错误 相信很多朋友在安装snifferpro运行后会弹出脚本错误本人综合了网络上的资料得出,这个错误的原因是JRE的调用所致(JavaRuntimeEnvironment),由于系统没有正确安装相应的JAVA插件所导致的。如果安装后还是会弹出这个
  • Visual Fortran 常见运行错误信息 VisualFortran常见运行错误信息:okok.org41Insufficientvirtualmemory虚拟内存不足okok.org70Integeroverflow整数溢出错误okok.org71Integerdividebyz
  • 【资料】Windows Update 自动更新错误代码大全     在使用WindowsUpdate更新时,时常会遇到过这样的情况:“升级没有成功,只给出一段不知其意的代码如“XXXXXX”!让人无从下手,特将这些错误提示的代码的整理出来供大家参考!WindowsUpdate错误51F  如果在尝试
  • 最常见的20种VC++ 6.0编译错误信息集合 最常见的20种VC++6.0编译错误信息集合1、fatalerrorC1010:unexpectedendoffilewhilelookingforprecompiledheaderdirective:寻找预编译头文件路径时遇到了不该遇到的
  • 美容保养知识 常见四大错误美容知识 美容对付女人来说是个永世的话题,怎样变美?怎样变得鲜明亮丽?这个话题对女人来说彷佛像没有止境般,那对付美容调养来说有哪些应该细致的呢...本日小编就特地整理了一些关于美容调养常见的四大错误知识给各人,盼望各人万万不要犯雷同的错误,让你在美容
  • “无法启动Print Spooler服务,错误1068,依存服务或组无法启动”解决方法? 一直正常的打印机今天突然没法用,在排查中启用“PrintSpooler服务”时遇到“无法启动PrintSpooler服务,错误1068,依存服务或组无法启动?”找了很多方法挨着试了后都没能解决,最后按照下面操作完美解决:在运行中输入“scc

你的评论

就没有什么想说的吗?

最新博客

关于我们 移动版

©2017传客网    琼ICP备15003173号-2    

本站部分文章来源于互联网,版权归属于原作者。
本站所有转载文章言论不代表本站观点,如是侵犯了原作者的权利请发邮件联系站长(weishubao@126.com),我们收到后立即删除。
站内所有资源仅供学习与参考,请勿用于商业用途,否则产生的一切后果将由您自己承担!

X