Go语言基础语法 | 青训营笔记

89 阅读4分钟

Go语言于2007年在谷歌创建,旨在提高多核网络机器和大型代码库时代的编程效率。时至今日,距离2009年公开宣布以来已经过去了10多年,Go语言在谷歌内部的使用得到了极大的增长。

本文只简单记录,进一步学习请看《Go语言圣经》(中文版)

数据类型

Go 有四类数据类型:

  • 基本类型:数字、字符串和布尔值
  • 聚合类型:数组和结构
  • 引用类型:指针、切片、映射、函数和通道
  • 接口类型:接口

数字类型:整型 int 和浮点型 float32、float64,Go 语言支持整型和浮点型数字,并且支持复数,其中位的运算采用补码。

字符串:Go 语言里的字符串的内部实现使用UTF-8编码。 字符串的值为双引号(")中的内容,可以在Go语言的源码中直接添加非ASCII码字符,例如:

s1 := "hello"
s2 := "你好"

布尔值: 布尔型数据只有true(真)和false(假)两个值。Go 与其他编程语言不同。 在 Go 中,不能将布尔类型隐式转换为 0 或 1。

数组

数组:是同一种数据类型的固定长度的序列。
数组定义:var a [len]int,比如:var a [5]int,数组长度必须是常量,且是类型的组成部分。一旦定义,长度不能变。
长度是数组类型的一部分,因此,var a[5] int和var a[10]int是不同的类型。
数组可以通过下标进行访问,下标是从0开始,最后一个元素下标是:len-1
for i := 0; i < len(a); i++ {
}
for index, v := range a {
}
访问越界,如果下标在数组合法范围之外,则触发访问越界,会panic
数组是值类型,赋值和传参会复制整个数组,而不是指针。因此改变副本的值,不会改变本身的值。
支持 "=="、"!=" 操作符,因为内存总是被初始化过的。
指针数组 [n]*T,数组指针 *[n]T。
变量

变量(Variable)的功能是存储数据。若要声明变量,需要使用 var 关键字:

// var 变量名 变量类型
var firstName string

整型和浮点型变量的默认值为0。 字符串变量的默认值为空字符串。 布尔型变量默认为false。 切片、函数、指针变量的默认为nil

在函数内部,可以使用更简略的 := 方式声明并初始化变量。

常量

常量使用关键字 const 定义,用于存储不会改变的数据。 存储在常量中的数据类型只可以是布尔型、数字型(整数型、浮点型和复数)和字符串型。

const Pi = 3.141592653

多个常量也可以一起声明:

    const (
        pi = 3.141592653
        e = 2.71828
    )
函数

函数声明包括函数名、形式参数列表、返回值列表(可省略)以及函数体。

func name(parameter-list) (result-list) {
    body
}

形式参数列表描述了函数的参数名以及参数类型。这些参数作为局部变量,其值由参数调用者提供。返回值列表描述了函数返回值的变量名以及类型。

如果函数返回一个无名变量或者没有返回值,返回值列表的括号是可以省略的。如果一个函数声明不包括返回值列表,那么函数体执行完毕后,不会返回任何值。

每个 Go 程序都是由包构成的。程序从 main 包开始运行。如果程序是 main 包的一部分,Go 会生成二进制文件。 运行该文件时,它将调用 main() 函数。

换句话说,当你使用 main 包时,程序将生成独立的可执行文件。 但当程序非是 main 包的一部分时,Go 不会生成二进制文件。 它生成包存档文件(具有 .a 扩展名的文件)。

像 fmtos 等这样具有常用功能的内置包在 Go 语言中有 150 个以上,它们被称为标准库,大部分 (一些底层的除外) 内置于 Go 本身。