上一节 我的Go+语言初体验——【如果你学习过 Python,那么如何入门 Go+ 语言?】安装篇 我们讲述了如何安装 GO+ 语言,这篇博文我给自己设立的目标是解决以下几个问题:
注释怎么写输出语句如何区别作用域?(C 语言通过大括号,Python 通过缩进形式)三大程序结构(顺序、循环、分支) 分支种类(if…else…、if…elif…else…、switch….)循环种类(for…while…. 有没有类似 Python 中,for…else…的特殊用法?)文章目录 1. 注释语法2. 输出语句3. 作用域的划分方式4. 分支语句5. 循环语句6. 函数调用小结 1. 注释语法
为什么要把注释语法放在第一位呢?因为我认为注释可以让你具有随意修改代码源文件的能力,而不用担心会改变程序运行逻辑,你可以随意添加你想要添加的东西,帮助你理解代码。
从官方文档中(GoPlus),我们可以知道,GO+ 的注释语法和 C 语言类似,使用双斜线的单行注释形式和使用斜杠和星的块状注释形式。就像是下面这样:
package main
func main() {
type student struct {
name string
score int
}
/*
以下定义了一个学生集合
*/
students := [student{"Ken", 90}, student{"Jason", 80}, student{"Lily", 85}]
jasonScore, ok := {x.score for x <- students, x.name == "Jason"} // 对 x.score 进行解包,其中 ok 为标志变量,表示值是否存在
println(jasonScore, ok)
}
在 Python 中, 我们使用 # 号作为单行注释。 2. 输出语句
我把输出语句放在了需要关注的第二位,因为只有输出语句才能帮助我们知道程序现在的状态,输出语句就像是程序的嘴巴一样,它会告诉我们它现在的各项特征。即使不借助调试工具,我们也可以使用输出语句来进行 Debug。
我们现在需要搞清楚 Go+ 的输出语句是否和 Python 类似(即和 C 语言进行对比,不需要符号占位修饰)。如果不理解,可以参考下面的例子:
在 C 语言中,
#include
int main()
{
int x = 10;
printf("%d", x); // 在输出的时候我们需要使用 %d 这个符号告诉编译器,我们要输出一个 INT 型,让编译器用 INT 型来解释变量 x
}
在 Python 中,
x = 10 # x = "10"
print(x) # 我们无需关心 x 代表的意义,print 即可。
在 Go+ 中,输出语法我认为和 Python 是十分相像的。在 Go+ 中,使用 println
作为输出关键字。
我们不需要对结果进行字符串修饰,就像是 C 语言那样,更像是 Python,想输出什么就输出什么。
a := Int(1r)
a += Int(2r)
println(a + Int(3r))
println(-a)
是不是有 print("Hello, World!")
那味了?
println("Hello, Go+")
对于 Go+ 中的常用数据结构,也可以直接输出。
arr := [1, 3, 5, 7, 11, 13, 17, 19]
println(arr)
println([x*x for x <- arr, x > 3])
m := {"Hi": 1, "Go+": 2}
println(m)
3. 作用域的划分方式
参考网上案例:学习Go语言必备案例 (3),寻找关于作用域的蛛丝马迹。
从这个案例中我们可以看出 Go+ 语言,使用类似于 C/C++ 的方式来划分作用域(使用大括号)。不论是循环语句,还是函数,均使用大括号的形式。package main
import (
"fmt"
)
func f(from string) {
for i := 0; i < 3; i++ {
fmt.Println(from, ":", i)
}
}
func main() {
//假设我们有一个函数叫做 f(s)。我们使用一般的方式调并同时运行。
f("direct")
//使用 go f(s) 在一个 Go 协程中调用这个函数。
// 这个新的 Go 协程将会并行的执行这个函数调用。
go f("goroutine")
//你也可以为匿名函数启动一个 Go 协程。
go func(msg string) {
fmt.Println(msg)
}("going")
//现在这两个 Go 协程在独立的 Go 协程中异步的运行,所以我们需要等它们执行结束。
// 这里的 Scanln 代码需要我们在程序退出前按下任意键结束。
var input string
fmt.Scanln(&input)
fmt.Println("done")
}
4. 分支语句
和 C 语言类似,我们使用 if..else if... else...
即可。
x := 10
if x > 0 {
println("x > 0")
} else if x == 0 {
println("x == 0")
}else {
println("x < 0")
}
同样的功能使用 Python 也很容易实现,在 Python 交互式界面中。
>>> x = 10
>>> if x > 0:
... print("x > 0")
... elif x == 0:
... print("x = 0")
... else:
... print("x < 0")
...
x > 0
5. 循环语句
以下是 for loop
,和 Python 所使用的 for in ...
结构不太一样,Go+ 使用 for ... <- ...
形式,就像是下面这个例子一样,如果学习过 Python,应该很好理解下面程序的作用。
sum := 0
for x <- [1, 2, 3, 4, 5] {
sum += x
}
println(sum) // 15
相同功能使用 Python 来写是这样的:
sum = 0
for x in [1,2,3,4,5]:
sum += x
print(sum)
在 Go+ 的 for loop
中,我们还可以这样写,用来筛选数据:
sum := 0
for x <- [1, 2, 3, 4, 5], x > 3 {
sum += x
}
println(sum) // 9
相同功能使用 Python 来写是这样的:
sum = 0
for i in [x for x in [1, 2, 3, 4, 5] if x > 3]:
sum += x
print(sum) // 9
比较上述两种写法,我不认为是循环语句的不同,而是类似于 Python 列表表达式在 Go+ 上的体现,你看,将 Python 语句中的 if
换成 ,
就十分类似于 Go 语言的写法。
关于 while loop
,不像是 Python 中有 while
语句,Go+
中没有 while
关键词,只能通过 for
来实现,以下是二者的区别:
i:=0
for {
// do something
i++
if i > 10 {
break;
}
}
println(i) // 11
i = 0
while i > 10:
i += 1
print(i)
6. 函数调用
有些功能不需要返回值,这种情况下 return_types 不是必须的。形参指定的是参数类型、顺序、及参数个数。参数是可选的,也就是说函数也可以不包含参数。
快速入门,告诉你 Go 语言的函数调用应该怎么写:
package main
func myFunction(a, b int) (int, int) { // 函数名(形参,类型)(返回类型1,返回类型2...)
return a + b, a - b
}
func main() {
println(myFunction(66, 77)) // 143 -11
}
小结
以上就是关于 Go+ 语言的基础部分,这些都是我对一门新的编程语言十分好奇的地方,下次我将从 Go+ 有趣的数据结构入手,和 Python 进行比较。
活动链接:https://bbs.csdn.net/topics/603464006?utm_source=1594742339
本人博客地址:https://blog.csdn.net/weixin_39541632?spm=1001.2101.3001.5343
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)