这是我参与「第五届青训营 」笔记创作活动的第2天
前言
近期学习进度有些缓慢,笔记也懒得写了。又懒又菜,实在是不该,内心羞愧不已。于是乎23:00爬起来来写笔记。
问题的发现
虽说基础语法这些,看一遍就看懂了,不会的地方也可以随时翻阅查询。但是我作为一名"实战派",还是喜欢把代码亲自打一打,日后写起来才会顺手。于是乎,高高兴兴的建好文件。第一个helloworld.go写完后,很自然的写了第二个文件。点击运行,结果出了问题。
此时才发现对于Go语言,一个包下只能有一个main函数。对于后面web项目等等来说倒是无可厚非,但是在初步学习阶段,我还是很习惯一个包下放很多文件,来练习不同的语法。
三种解决方法
既然人家已经明说一个包下只能有一个main函数,自然不能与编译器抬杠。但是我们还是有许多解决办法的。
方案一:设置不同的包
一个包下只能有一个main函数,那么用包来分开放置小文件不就好了。第一节课老师的示例代码也是这样放置的。不过这样多少觉得有点麻烦,毕竟要多一步新建包的操作。 代码层次结果如图所示
方案二:使用Go的单元测试
第二节课我们学到了Go语言的单元测试,只需新建一个测试文件,便可方便的调用其对于文件的函数,我们使用这种方式作为练习也是可以的。不过依然存在要多一步操作的问题。代码层次结果如图所示
方案三:多建几个函数
这就是我目前采用的方案了。在一个文件内写大量的函数,然后在main函数里面调用。作为一种懒狗写法,他的可维护性,观赏性差了很多。但是确实省了不少操作,对于初期学习,也并不需要后期维护。我觉得目前这种方案是可取的。代码示例(很乱且没有实际意义,关注结构即可)
func constTest() {
const s = "const var"
const h = 500000000
const i = 3e20 / h
fmt.Println(s, h, i)
const (
a = iota
b
c
)
println(a, b, c)
}
func ifTest() {
i := 0
for {
fmt.Println("loop", i)
i += 1
if i == 100 {
break
}
}
for n := 0; n < 5; n++ {
if n%2 == 0 {
continue
}
println(n)
}
for i > 1 {
println(i)
i -= 1
}
}
func switchTest() {
t := time.Now()
switch {
case t.Hour() > 12:
println("下午")
case t.Hour() < 12:
println("上午")
}
}
func main() {
//constTest()
//ifTest()
switchTest()
}
思考
学一门新的语言,心里总会有之前学过语言的影子。一开始遇到问题我还在想,为什么Java可以一个包下每个文件都有一个main函数,Go就不可以。但其实每一个语言都有其自己的特色,我们应该不断去了解它的特点,深入的理解它。对待人亦是如此。