Go语法基础

典型的Go文件布局

  1. package子句
  2. 任何import语句
  3. 实际代码
// 每个Go文件都以package子句开头,表示文件中的所有其余代码都属于“main”包
package main

// Go文件几乎总是有一个或多个import语句
import "fmt"

// 当程序运行时,首先运行“main”函数
func main() {
    // 通过从“fmt”包调用“Println”函数来实现在终端上显示内容
    fmt.Println("Hello, World!")
}
文件需要先引入其他包,然后才能使用其他包里包含的代码。

调用函数

调用函数,需要输入函数名,以及一对圆括号。

函数可以接收一个或多个参数,参数出现在函数名后面的圆括号中,多个参数用逗号分隔。

字符串

字符串是一系列字节,通常表示文本字符。

Go把双引号之间的文本视为字符串。

在字符串中,换行符、制表符和其他难以包含在程序代码中的字符可以用转义序列来表示:反斜杠后跟表示另一个字符的字符。

\n 表示换行符
\t 表示制表符
\" 表示双引号
\\ 表示反斜杠

fmt.Println("Hello, \nWorld!")
Hello,
World!
fmt.Println("Hello, \tWorld!")
Hello,  World!
fmt.Println("\"\"")
""
fmt.Println("\\")
\

符文

Go的符文(rune)用于表示单个字符。

字符串字面量由双引号("")包围,rune字面量由单引号('')包围。

Go使用Unicode标准来存储rune,rune被保存为数字代码,而不是字符本身。

转义序列可以用在rune字面量中。

fmt.Println('a')
97

布尔值

布尔值只能是两个值中的一个:true 或 false。

数字

Go将整数和浮点数视为不同的类型,可以使用小数点来区分整数和浮点数。

运算符

算术运算符

Go语法基础_第1张图片

赋值运算符

Go语法基础_第2张图片

关系运算符

Go语法基础_第3张图片

逻辑运算符

image.png

类型

Go是静态类型,它在程序运行之前就知道值的类型是什么,如果在错误的位置使用了错误的值类型,Go会给出一个错误消息。

可以通过reflect包的TypeOf函数查看类型:

fmt.Println(reflect.TypeOf(3.1415))
float64

基本类型

类型 长度 默认值 描述
bool 1 false
byte 1 0 unit8
int,unit 4,8 0 默认整数类型,保存数字。32或64
int8,unit8 1 0
int16,unit16 2 0
int32,unit32 4 0
int64,unit64 8 0
float32 4 0.0
float64 8 0.0 默认浮点数类型,保存带小数部分的数字。
complex64 8
complex128 16
rune 4 0
unitptr 4,8 0
string ""

声明变量

Go中,变量是包含值的一块存储。

使用var关键字,后跟所需的名称以及变量将保存的值的类型。

变量声明标准格式:

var 变量名 变量类型
a. 后置变量类型
b. 变量命名规则遵循驼峰命名法
c. 声明变量后,系统会自动赋予该类型零值
d. 声明但未使用的变量会被视为错误
var quantity int
// 可以一次声明同意类型的多个变量
var length, width float64
var name string

初始化变量

声明变量后,可以使用=(单等号)为它分配该类型的值

quantity = 8
length, width = 1.2, 2.4
name = "hello go"

如果知道变量的值是什么,可以声明变量的同时进行赋值(声明变量并赋值)。

变量初始化标准格式

var 变量名 变量类型 = 表达式
var quantity int = 8
var length, width float64 = 1.2, 2.4
var name string = "hello go"

可以为现有变量分配新值,但他们必须是相同类型的值(分配的类型与声明的类型要匹配)。

如果在声明变量的同时为其赋值,通常可以在声明中省略变量类型,分配给变量的值的类型将用作该变量的类型。

变量初始化推导格式

var 变量名 = 表达式
var quantity = 8
var length, width = 1.2, 2.4
var name = "hello go"

变量初始化短格式

变量名 := 表达式
quantity := 8
length, width := 1.2, 2.4
name := "hello go"

短变量声明

  • 在函数中, := 简洁赋值语句在明确类型的地方,可以用于替代 var 定义。
  • 函数外的每个语句都必须以关键字开始( varfunc 、等等), :=结构不能使用在函数外。

变量作用域

  • 全局变量作用域为整个包
  • 局部变量的作用域由花括号决定,任一变量的作用域仅在所处花括号内

零值

如果声明一个变量而没有给他赋值,该变量将包含其类型的零值。

  • 数值类型的零值是 0
  • 字符串类型的零值是空字符串 ""
  • 布尔类型的零值是 false

命名规则

适用于变量、函数和类型的名称:

  • 名称必须以字母开头,并且可以由任意数量的额外的字母和数字。
  • 如果变量、函数或类型的名称以大写字母开头,则认为它是导出的,可以从当前包之外的包访问它。如果变量、函数或类型的名称是以小写字母开头的,则认为该名称是为导出的,只能在当前包中使用。
  • 如果一个名称由多个单词组成,建议用驼峰形式命名。

转换

Go中的数学运算和比较运算要求包含的值具有相同的类型。如果类型不同,在运行代码时会报错。

转换,允许将值从一种类型转换为另一种类型。

数值类型(byterune, intX, uintX, floatX)之间的转换需要通过类型强转来完成

var price int = 2
// float64:需要转换的类型 price:需要转换的值
float64(price)
var a int32 = 123
var b int64 = int64(a)

数值类型和string之间的转换通过 标准库strconv中提供的函数进行

// string 到 int
int, err := strconv.Atoi(string)

// string 到 int64
int64, err := strconv.ParseInt(string, 10, 64)

// int 到 string
string := strconv.Itoa(int)

// int64 到 string
string := strconv.FormatInt(int64, 10)

Go工具

Go语法基础_第4张图片

你可能感兴趣的:(golang)