Golang入门知识梳理(1)| 青训营

77 阅读4分钟

golang的语言特性

1. 并发性和轻量级线程(goroutines): - Go通过'goroutines'(轻量级线程)实现并发。它们比传统的线程更轻量级,启动、管理和销毁更快速。 - 使用'go'关键字可以启动一个新的goroutine。 

 2. 通道(频道): - 通道用于在goroutines之间传递数据,并实现了同步和通信。 - 通道提供了一种在goroutines之间进行安全数据传递的方式,避免了竞态条件。

 3. 自动垃圾回收(Garbage Collection): - Go拥有内置的垃圾回收机制,自动管理内存,减轻了开发者的内存管理负担。

 4. 强调简洁性和可读性: - Go的语法设计简单明了,强调可读性和清晰性,有助于开发者编写易于理解和维护的代码。

 5. 静态类型语言: - Go是一种静态类型语言,编译时会进行类型检查,减少运行时类型相关的错误。

 6. 快速编译: - Go的编译速度非常快,使得迭代开发变得高效。

 7. 包管理: - Go拥有内置的包管理工具,可以方便地导入、管理和共享代码包。

 8. 内置工具链: - Go提供了丰富的工具链,包括编译器、格式化工具、测试工具和性能分析工具等。

 9. 交叉编译: - Go支持交叉编译,开发者可以在一个平台上编译适用于其他平台的可执行文件。 

 10. 内存安全和指针处理: - Go在设计上努力防止常见的内存错误,如缓冲区溢出和空指针引用。 - 使用指针时,不能进行指针运算,有助于降低指针错误的风险。

 11. 接口和类型断言: - Go的接口(interface)机制允许开发者创建抽象的数据类型和方法集合,实现了面向接口编程。 - 类型断言允许开发者在运行时检查接口值的底层类型。

 12. 多返回值: - 函数可以返回多个值,使得在函数调用时可以更灵活地处理结果。

 13. 延迟函数调用(defer): - 使用'defer'关键字可以推迟函数的执行,通常用于在函数结束前释放资源。 

 14. 错误处理: - Go鼓励使用显式的错误处理,而不是异常机制。函数通常返回一个结果和一个错误,开发者可以更精确地处理错误。

golang语法与其他语言不同之处

1. 声明变量和类型推导: - Go使用短变量声明语法(`:=`)来声明并初始化变量,自动推导变量的类型。 

// Go
x := 10

# Python
x = 10

// C
int x = 10;

 2. 函数声明和多返回值: - Go支持多返回值的函数,而在其他一些语言中,多返回值可能需要通过数据结构或特殊的语法实现。

// Go
func foo() (int, string) {
    return 42, "hello"
}

# Python
def foo():
    return 42, "hello"

// C
struct Result {
    int num;
    char str[10];
};

struct Result foo() {
    struct Result result;
    result.num = 42;
    strcpy(result.str, "hello");
    return result;
}

 3. 错误处理: - Go鼓励显式的错误处理,函数通常返回一个结果和一个错误。这与其他一些语言使用异常处理错误的方式不同。

// Go
result, err := someFunction()
if err != nil {
    // 处理错误
}

# Python
result = some_function()
if result is None:
    # 处理错误

// C
int result = some_function();
if (result < 0) {
    // 处理错误
}

 4. 条件语句: - Go的`if`语句可以在条件之前执行一个简短的语句。在其他一些语言中,可能需要单独的代码块来实现这种功能。 

// Go
if x := 10; x > 0 {
    // 条件为真时执行
}

# Python
x = 10
if x > 0:
    # 条件为真时执行

// C
int x = 10;
if (x > 0) {
    // 条件为真时执行
}

 5. 循环控制: - Go中的`for`循环没有括号,使用关键字`for`、条件和循环体来构建循环。另外,Go的`for`循环可以通过`range`迭代集合。

// Go
for i := 0; i < 5; i++ {
    // 循环体
}

nums := []int{1, 2, 3}
for index, value := range nums {
    // 迭代集合
}

# Python
for i in range(5):
    # 循环体

nums = [1, 2, 3]
for index, value in enumerate(nums):
    # 迭代集合

// C
for (int i = 0; i < 5; i++) {
    // 循环体
}

int nums[] = {1, 2, 3};
for (int i = 0; i < sizeof(nums) / sizeof(nums[0]); i++) {
    int value = nums[i];
    // 循环体
}

 6. 并发和通道: - Go在语言级别原生支持并发编程,使用`goroutines`和`channel`来实现。这是与其他语言(如Python和Java)的显著区别。

 7. 指针运算和类型系统: - Go支持指针,但不允许进行指针运算。此外,Go的类型系统比C和C++更为严格。 

 8. 面向对象编程: - Go没有传统的类和继承体系,而是通过接口来实现多态性。这与其他一些面向对象语言的实现方式有所不同。

 9. 异常处理: - Go避免了异常处理,鼓励在正常代码流程中处理错误。这与其他一些语言的异常机制不同。