《Go语言实战笔记》1 概述

64 阅读2分钟

1.1 特征

语法简单

并发模型

  • 一切并发化,运行时用Goroutine运行所有,包括main入口函数
  • 无需处理回调

内存分配

  • tcmalloc--为并发而设计的高性能内存分配组件

垃圾回收

能用

静态链接

blog.csdn.net/qq_43580193…

标准库

  • net/http
  • ...

工具链

  • 内置完整测试框架
  • 用于调优的pprof

1.2 简介

源文件

  • 使用UTF-8编码,对Unicode支持良好

utf-8是unicode的一套实现。unicode给所有语言、文字和符号定义了一个编码,utf-8提供了这个编码和实际文本的映射,保证在不同计算机中使用相同的符号可以表示相同的文本,展示相同的含义。

  • 文件头部用package声明所属包名称
  • 以“.go”作为文件扩展名,语句结束分号会被默认省略
  • 支持C样式注释
  • 入口函数main没有参数,且必须放在main包中
  • 用import导入标准库或第三方包

未使用的导入,编译器会报错

变量

  • 使用var定义变量,支持类型推断
  • 编译器确保变量总是被初始化为零值
  • 函数内部可以使用 x := 100的方式定义变量
package main

func main(){
    var x int32
    y := 100
    x,y := 100,100 //错误,已经定义过
    x,z := 100,100 //只要有没有定义过的变量即可
}

表达式

  • if

image.png

  • switch

image.png

  • for

image.png

  • for...range

image.png

函数

  • 函数可以定义多个返回值,甚至对其命名(命名后相当于已经被定义)

image.png

image.png

  • 函数是第一类型,可作为参数或返回值

image.png

  • 用defer定义延迟调用,无论函数是否出错,它都确保结束前被调用

image.png

数据

  • 切片(slice)可以实现类似动态数组的功能

image.png

  • 可以将map内置,直接从运行时层面获得性能优化

image.png

  • 结构体可匿名嵌入其他类型

image.png

方法

  • 可以为当前包内的任意类型定义方法

image.png

  • 可以直接调用匿名字段的方法,这种方式可实现与继承类似的功能

image.png

接口

接口采用了duck type方式,无须在实现类型上添加显式声明

image.png

并发

  • 整个运行时完全并发化设计

image.png

  • channel与goroutine搭配,实现用通信代替内存共享的CSP模型

image.png