Go语言语法上的一些主要特点(1)
最近学习一下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,这时就会报错了。
_ 实际上是一个只写变量,你不能得到它的值,所以规避了上面语法上的问题。
先到这,完了再学习
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。 如若内容造成侵权/违法违规/事实不符,请联系我的编程经验分享网邮箱:veading@qq.com进行投诉反馈,一经查实,立即删除!