1、Go语言特点
- 并发编程:Go语言天生支持并发编程,这使得它非常适合编写高性能、高并发的网络应用。
- 静态类型和类型推断:Go语言是一种静态类型语言,但它也支持类型推断。
- 内存管理:Go语言的内存管理是自动化的,这意味着程序员不需要手动管理内存。Go语言的垃圾回收(garbage collection)机制可以自动检测和回收不再使用的内存,这使得程序员可以更专注于业务逻辑的实现。
- 强调规范和一致性:Go语言的设计非常注重规范和一致性。Go语言有一套严格的代码格式规范,这使得不同的代码可以保持一致的风格和结构。
2、函数
Go语言的函数和C++的函数在某些方面有相似之处,但在其他方面又有很大的不同。
- 语法和用法
Go语言的函数定义比较简洁,不需要指定返回类型的变量名,而是使用一个关键字"return"返回值。例如:
func add(a, b int) int {
return a + b
}
C++的函数定义需要指定返回类型和变量名,返回值通过关键字"return"返回。例如:
int add(int a, int b) {
return a + b;
}
- 参数传递
Go语言的函数参数传递是值传递,这意味着函数内部对参数进行修改不会影响到函数外部的变量。如果想要修改函数外部的变量,可以使用指针作为参数传递。例如:
func add(a *int, b int) {
*a += b
}
C++的函数参数传递可以是值传递、引用传递、指针传递等多种方式。引用传递和指针传递可以实现对函数外部变量的修改。例如:
void add(int& a, int b) {
a += b;
}
3、结构体
在Go语言中,结构体是一种自定义数据类型,可以用来表示一组相关的数据字段。以下是一些关于Go语言结构体的知识点:
- 定义结构体
在Go语言中,可以使用type关键字定义一个结构体类型。例如:
type Person struct {
Name string
Age int
Address string
}
在上面的代码中,定义了一个名为Person的结构体类型,它包含了三个字段:Name、Age和Address。
- 创建结构体变量
在Go语言中,可以使用结构体类型创建一个结构体变量。例如:
var p Person
p.Name = "Alice"
p.Age = 20
p.Address = "Beijing"
在上面的代码中,创建了一个名为p的Person类型的结构体变量,并对它的字段进行了赋值。
- 匿名结构体
在Go语言中,可以定义一个没有名字的结构体,称之为匿名结构体。匿名结构体可以直接使用,不需要定义新的类型。例如:
p := struct {
Name string
Age int
Address string
}{
Name: "Alice",
Age: 20,
Address: "Beijing",
}
在上面的代码中,定义了一个匿名结构体,它包含了三个字段:Name、Age和Address,并且直接对这个匿名结构体进行了初始化。
- 结构体嵌套
在Go语言中,可以在结构体中嵌套其他结构体。这可以用来表示更复杂的数据结构。例如:
type Address struct {
Province string
City string
Street string
}
type Person struct {
Name string
Age int
Address Address
}
在上面的代码中,定义了一个名为Address的结构体类型,它包含了三个字段:Province、City和Street。然后定义了一个名为Person的结构体类型,它包含了两个字段:Name和Age,以及一个Address类型的Address字段。
4、指针
在Go语言中,指针是一个非常重要的概念,它可以用来处理变量的地址和值。
- 取地址符&
在Go语言中,如果要获取一个变量的地址,可以使用取地址符&。例如:
var a int = 10
var p *int = &a
变量a存储了一个整型值10,变量p是一个整型指针,它存储了变量a的地址。
- 指针类型
在Go语言中,指针类型以*开头。例如,*int表示一个整型指针类型。可以使用指针类型来声明一个指针变量。例如:
var p *int
变量p是一个整型指针,它当前没有指向任何一个变量的地址。
- 取值符*
在Go语言中,如果要获取一个指针指向的变量的值,可以使用取值符*。例如:
var a int = 10
var p *int = &a
fmt.Println(*p) // 输出 10
*p表示指针p所指向的变量的值,即变量a的值。
5、注意事项
- 自增自减运算符
Go语言后缀++ --语句
- 没有支持前缀自增自减的运算语句,也就是不允许 ++a。
- 运算符 ++ 和 -- 只能作为一个语句来使用,不像C组语言可以做表达式使用,并且只支持后缀不支持前缀,例如:--i是不合理的
参照以下例子:
- 在语句中,++ 是可以的。
- 在赋值语句 = 中 ++ 是不可以。
- +操作
- 整型 + 整型 :加法运算
- 字符 + 字符 :做拼接操作
- string
- Go中string定义后不可修改,但可以执行+操作
- 当多个字符串拼接时,+ 要保留在上一行