学习笔记:GO语言基础 | 青训营

111 阅读5分钟

1、Go语言特点

  1. 并发编程:Go语言天生支持并发编程,这使得它非常适合编写高性能、高并发的网络应用。
  2. 静态类型和类型推断:Go语言是一种静态类型语言,但它也支持类型推断。
  3. 内存管理:Go语言的内存管理是自动化的,这意味着程序员不需要手动管理内存。Go语言的垃圾回收(garbage collection)机制可以自动检测和回收不再使用的内存,这使得程序员可以更专注于业务逻辑的实现。
  4. 强调规范和一致性:Go语言的设计非常注重规范和一致性。Go语言有一套严格的代码格式规范,这使得不同的代码可以保持一致的风格和结构。

2、函数

Go语言的函数和C++的函数在某些方面有相似之处,但在其他方面又有很大的不同。

  1. 语法和用法

Go语言的函数定义比较简洁,不需要指定返回类型的变量名,而是使用一个关键字"return"返回值。例如:

func add(a, b int) int {
    return a + b
}

C++的函数定义需要指定返回类型和变量名,返回值通过关键字"return"返回。例如:

int add(int a, int b) {
    return a + b;
}
  1. 参数传递

Go语言的函数参数传递是值传递,这意味着函数内部对参数进行修改不会影响到函数外部的变量。如果想要修改函数外部的变量,可以使用指针作为参数传递。例如:

func add(a *int, b int) {
    *a += b
}

C++的函数参数传递可以是值传递、引用传递、指针传递等多种方式。引用传递和指针传递可以实现对函数外部变量的修改。例如:

void add(int& a, int b) {
    a += b;
}

3、结构体

在Go语言中,结构体是一种自定义数据类型,可以用来表示一组相关的数据字段。以下是一些关于Go语言结构体的知识点:

  1. 定义结构体

在Go语言中,可以使用type关键字定义一个结构体类型。例如:

type Person struct {
    Name    string
    Age     int
    Address string
}

在上面的代码中,定义了一个名为Person的结构体类型,它包含了三个字段:Name、Age和Address。

  1. 创建结构体变量

在Go语言中,可以使用结构体类型创建一个结构体变量。例如:

var p Person
p.Name = "Alice"
p.Age = 20
p.Address = "Beijing"

在上面的代码中,创建了一个名为p的Person类型的结构体变量,并对它的字段进行了赋值。

  1. 匿名结构体

在Go语言中,可以定义一个没有名字的结构体,称之为匿名结构体。匿名结构体可以直接使用,不需要定义新的类型。例如:

p := struct {
    Name    string
    Age     int
    Address string
}{
    Name:    "Alice",
    Age:     20,
    Address: "Beijing",
}

在上面的代码中,定义了一个匿名结构体,它包含了三个字段:Name、Age和Address,并且直接对这个匿名结构体进行了初始化。

  1. 结构体嵌套

在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语言中,指针是一个非常重要的概念,它可以用来处理变量的地址和值。

  1. 取地址符&

在Go语言中,如果要获取一个变量的地址,可以使用取地址符&。例如:

var a int = 10
var p *int = &a

变量a存储了一个整型值10,变量p是一个整型指针,它存储了变量a的地址。

  1. 指针类型

在Go语言中,指针类型以*开头。例如,*int表示一个整型指针类型。可以使用指针类型来声明一个指针变量。例如:

var p *int

变量p是一个整型指针,它当前没有指向任何一个变量的地址。

  1. 取值符*

在Go语言中,如果要获取一个指针指向的变量的值,可以使用取值符*。例如:

var a int = 10
var p *int = &a
fmt.Println(*p) // 输出 10

*p表示指针p所指向的变量的值,即变量a的值。

5、注意事项

  1. 自增自减运算符

Go语言后缀++ --语句

  1. 没有支持前缀自增自减的运算语句,也就是不允许 ++a。
  2. 运算符 ++ 和 -- 只能作为一个语句来使用,不像C组语言可以做表达式使用,并且只支持后缀不支持前缀,例如:--i是不合理的

参照以下例子:

  • 在语句中,++ 是可以的。
  • 在赋值语句 = 中 ++ 是不可以。
  1. +操作
  • 整型 + 整型 :加法运算
  • 字符 + 字符 :做拼接操作
  1. string
  • Go中string定义后不可修改,但可以执行+操作
  • 当多个字符串拼接时,+ 要保留在上一行