Go语言语法上的一些主要特点(1)

2023-12-13 05:14:12

最近学习一下GO语言,看看和其他语言有什么区别。

只从语法上来看,想到哪就写到哪吧,后面学到了再写。

1、花括号

Go语言的花括号强制第一个 { 不能单独一行,必须接在代码后面,比如:

if x < y {	//花括号必须在这行结尾,不能另起一行
	...
}

还好我的风格已经养成了这个习惯。。。最早写C/C++的时候,我一定要把花括号单独放一行,后来有些编辑器会自动放行尾,每次都得调整,慢慢懒的弄了,就变成了这个风格。。。

2、分号

Go语言一句不用加分号,当然是一行一句的情况,如果一行多句就得用分号分割。
当然一般不建议一行写多句。
这方面整体感觉和Python一样

3、包名

必须在源文件中非注释的第一行指明这个文件属于哪个包,比如helloworld:

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

第一行,就是指这个文件属于这个包名。
package main表示一个可独立执行的程序。
每个 Go 应用程序都包含一个名为 main 的包。

文件名与包名没有直接关系,不一定要将文件名与包名定成同一个。
文件夹名与包名没有直接关系,并非需要一致。
同一个文件夹下的文件只能有一个包名,否则编译报错。

4、引用包

上面例子里第二句 import “fmt”,意思是这个源文件要用到这个包。
这个语法看着和Python一样。

5、变量申明和初始化

C++里,还有大部分语言里应该都是先写类型,再写变量名,比如:

int a;

但是 Go语言是反过来的:

var a int

var + 变量名 + 类型

可以一次申明多个变量

var a, b int 

如果就申明一下,那会自动给赋上零值。

零值是变量没有做初始化时系统默认设置的值,不同类型对应的零值:
数值类型:0
布尔类型:false
字符串:空字符串 “”
其他类型(指针、数组、字典、通道、函数、接口):nil

申明可以同时初始化

var a int = 34

还可以更简略的完成申明和初始化,此时不用写类型(一般是普通类型的话),它会自己推导类型,用 := 完成申明和初始化:

a := 34 // 相当于 var a int = 34

如果这么写的话,这个变量一定是第一次出现,前面不能再申明了,如果这么写:

var a int
a := 34 // 就会报错

编译会报错,因为a已经申明了,而 := 是申明+初始化。

我感觉就和python直接写 a = 34 一样

但是要注意一个事儿:
:= 这种方式只能在函数体里出现。
比如要申明一个全局变量,就不能用 := ,还得老老实实用 var a int =34

6、itoa 常量

我第一次看还以为是 int转字符的函数。。。
这是个Go语言里特殊的常量,它在一个const的范围内第一次出现时,会被初始化为 0,然后每出现一次就自动加1,通常是用来做枚举的用法(Go语言没有枚举)
比如:

const (
    a = iota
    b = iota
    c = iota
)
const d = itoa

a 的值就是 0, b是1,c是2。 而d到了另一个const作用域,所以d为0。
上面第一个const可以简写为

const(
	a = itoa
	b
	c
)

7、if语句

Go语言的if语句,条件不加括号。

if a < 0 {
	...
}

除此之外,还有个特别的,可以加个初始化语句,再写条件:

if a:=b; a<0 {
	...
}

8、循环

Go 语言没有 while 循环, for 循环干到底。
同样,for循环的条件也不加括号。

普通循环,和其他语言差不多,就是初始化用了 :=

for i := 0; i <= 10; i++ {
	...
}

可以只留条件,省略初始和增量,就有点像while循环了

i := 0
for ; i<=10 ;{
	...
}
// 两个分号省略了也可以

无限循环,啥都不写就无限循环:

for {
	...
}

for-each range 循环,循环字符串、数组、切片、Map的时候可以迭代拿到元素:

numbers := [5]int{1,2,3,4,5} //一个数组
for i, v := range numbers{
	... // i就是 index,v就是对应的值
}

// map1 是个 map
for key, value := range map1{
	... //类似与字典的键值对,就拿到了
}

上面的key value,可以省略其中一个,但是要注意要省略key只要value,前面得用下划线表示一下。

for _, value := range map1{
}

为什么呢,看下一个。

9、下划线

空白标识符 _ 就是下划线,是什么意思呢,它是用来抛弃掉一个值用的,比如函数返回两个数,我只想用一个,那另一个就用 _ 代替,为什么非得找个东西代替呢,因为:

这样做是因为 Go 语言中你必须使用所有被声明的变量,不然编译报错,比如函数返回了两个值,我们用变量a和b接了,但是后面过程里只用到了a,不用b,这时就会报错了。

_ 实际上是一个只写变量,你不能得到它的值,所以规避了上面语法上的问题。


先到这,完了再学习

文章来源:https://blog.csdn.net/gootyking/article/details/134833338
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。