典型的 Go 文件布局
- package 子句
- 任何 import 语句
- 理论代码
// 每个 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 是动态类型,它在程序运行之前就晓得值的类型是什么,如果在谬误的地位应用了谬误的值类型,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
定义。 - 函数外的每个语句都必须以关键字开始 (
var
、func
、等等),:=
构造不能应用在函数外。
变量作用域
- 全局变量作用域为整个包
- 局部变量的作用域由花括号决定,任一变量的作用域仅在所处花括号内
零值
如果申明一个变量而没有给他赋值,该变量将蕴含其类型的零值。
- 数值类型的零值是 0
- 字符串类型的零值是空字符串 “”
- 布尔类型的零值是 false
命名规定
实用于变量、函数和类型的名称:
- 名称必须以字母结尾,并且能够由任意数量的额定的字母和数字。
- 如果变量、函数或类型的名称以大写字母结尾,则认为它是导出的,能够从以后包之外的包拜访它。如果变量、函数或类型的名称是以小写字母结尾的,则认为该名称是为导出的,只能在以后包中应用。
- 如果一个名称由多个单词组成,倡议用驼峰模式命名。
转换
Go 中的数学运算和比拟运算要求蕴含的值具备雷同的类型。如果类型不同,在运行代码时会报错。
转换,容许将值从一种类型转换为另一种类型。
数值类型(byte
,rune
, 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 工具