我的Go+语言初体验——【如果你学习过 Python,那么如何入门 Go+ 语言?】基础篇

我的Go+语言初体验——【如果你学习过 Python,那么如何入门 Go+ 语言?】基础篇,第1张

我的Go+语言初体验——【如果你学习过 Python,那么如何入门 Go+ 语言?】基础篇

上一节 我的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

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/zaji/5650755.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-12-16
下一篇 2022-12-16

发表评论

登录后才能评论

评论列表(0条)

保存