go基础语法
package main
import "fmt"
func main(){
fmt.Println("hello world")
}
与C++类似,go是一门编译型语言,想要运行需要先通过go命令调用run子命令
go run helloworld.go
如果想编译生成可执行文件,可以
go bulid helloworld.go
变量
变量的声明
go的变量声明比较灵活,可以直接通过var 变量名 +变量类型 声明变量,也可以直接用简短变量声明:
变量名 := 值
变量的类型可以通过值的类型自动推导
简短变量声明广泛运用于大部分局部变量的声明和初始化,var形式往往用于需要显示指定变量类型的地方,或变量的值稍后会被改变而初始值无关紧要
ps:简短变量声明左边的变量可能并不全是新声明的变量而在之前就存在(例如err),此时就只有赋值这一操作
简短变量声明语句中必须至少要声明一个新的变量,下面的代码将不能编译通过:
f, err := os.Open(infile)
// ...
f, err := os.Create(outfile) // compile error: no new variables
解决的方法是第二个简短变量声明语句改用普通的多重赋值语句。
和var形式声明语句一样,简短变量声明语句也可以用来声明和初始化一组变量:
i, j := 0, 1
但是这种同时声明多个变量的方式应该限制只在可以提高代码可读性的地方使用,比如for语句的循环的初始化语句部分。
请记住“:=”是一个变量声明语句,而“=”是一个变量赋值操作。也不要混淆多个变量的声明和元组的多重赋值(§2.4.1),后者是将右边各个表达式的值赋值给左边对应位置的各个变量:
i, j = j, i // 交换 i 和 j 的值
和普通var形式的变量声明语句一样,简短变量声明语句也可以用函数的返回值来声明和初始化变量,像下面的os.Open函数调用将返回两个值:
指针
Go语言和C++的指针在某些方面是相似的,但也有一些不同之处。
相同点:
- 指针都可以用于间接访问和修改变量的值。
- 指针都可以用于在函数之间传递参数,实现引用传递。
- 指针都可以用于动态分配内存。
不同点:
- Go语言的指针没有指针运算符(如C++中的指针加法和指针减法)。
- Go语言的指针可以被自动垃圾回收器处理,而C++中的指针需要手动释放内存。
- Go语言中的指针类型不支持运算符重载,而C++中的指针类型可以重载运算符。
- Go语言中的指针类型没有空指针的概念,所有指针都必须初始化为有效的内存地址,而C++中指针可以是空指针(nullptr)。
- Go语言中的指针类型不支持指针的指针(如C++中的二级指针),而C++中的指针可以有多级指针。
参考资料:《go语言圣经》