go 快速入门
一、简介
Go 语言是由谷歌公司在 2007 年开始开发的一门语言,目的是能在多核心时代高效编写网络应用程序。
Go是一种编译型语言,一种并发的、带垃圾回收的、快速编译的语言。它具有以下特点
- 它可以在一台计算机上用几秒钟的时间编译一个大型的Go程序
- Go为软件构造提供了一种模型,它使依赖分析更加容易,且避免了大部分C风格include文件与库的开头
- Go是静态类型的语言,它的类型系统没有层级。因此用户不需要在定义类型之间的关系上花费时间,这样感觉起来比典型的面向对象语言更轻量级
- Go完全是垃圾回收型的语言,并为并发执行与通信提供了基本的支持
为了获得最佳的运行性能,go语言被设计为一门静态编译型的语言,而不是动态解释型语言
静态编译型:指在编译时变量的数据类型即可确定的语言 (语言代表:java,go,c)
动态解释型:指在运行 时确定数据类型的语言 (语言代表:JavaScript、Python)
二、安装
安装地址:https://golang.google.cn/dl/
添加环境变量
vim ~/.bash_profile
添加后需要执行:
source ~/.bash_profile
检查是否安装成功
go version
三、例子入门
编写一个hello.go文件
package main //源文件中非注释的第一行指明这个文件属于那个包
import "fmt" //告诉go编译器这个程序需要使用fmt包
func main() { //是程序开始执行的函数,main函数是每一个可执行程序必须包含的,如果有init()函数,先执行init()函数
fmt.Println("go" + "lang")
fmt.Println("1+1 =", 1+1)
fmt.Println("7.0/3.0 =", 7.0/3.0)
fmt.Println(true && false)
fmt.Println(true || false)
fmt.Println(!true)
}
在该文件目录下执行
go run hello.go
。输出结果
golang
1+1 = 2
7.0/3.0 = 2.3333333333333335
false
true
false
四、基本结构
命名
命名规则:一个一个名字必须以一个字母(Unicode字母)或下划线开头,后面可以跟任意数量的字母、数字或下划线。大写字母和小写字母是不同的:Car和car是两个不同的名字
关键字
break default func interface select
case defer go map struct
chan else goto package switch
const fallthrough if range type
continue for import return var
常量
在Go语言中,常量是指编译期间就已知且不可改变的值。常量可以是数值类型(包括整型、浮点型和复数类型)、布尔类型、字符串类型等
下面我们使用const 关键字来定义常量:
package main
import (
"fmt"
"math"
)
func main() {
// "const" 关键字用来定义常量
const s string = "appropriate"
fmt.Println(s)
// "const"关键字可以出现在任何"var"关键字出现的地方
// 区别是常量必须有初始值
const n = 20
// 常量表达式可以执行任意精度数学计算
const d = 3e20 / n
fmt.Println(d)
// 数值型常量没有具体类型,除非指定一个类型
// 比如显式类型转换
fmt.Println(float32(d))
// 数值型常量可以在程序的逻辑上下文中获取类型
// 比如变量赋值或者函数调用。
// 例如,对于math包中的Sin函数,它需要一个float64类型的变量
fmt.Println(math.Sin(n))
}
输出结果
appropriate
1.5e+19
1.5e+19
0.9129452507276277
变量
通常用var声明语句可以创建一个特定类型的变量,然后给变量附加一个名字,并且设置变量的初始值
语法
var 变量名字 类型 = 表达式
类型或者表达式可以省略一个,如果省略的是类型信息,那么将根据初始化表达式来推导变量的类型信息。如果初始化表达式被省略,那么将用零值初始化该变量。数值类型变量对应的零值是0,布尔类型变量对应的零值是false,字符串类型对应的零值是空字符串,接口或引用类型(包括slice、map、chan和函数)变量对应的零值是nil。数组或结构体等聚合类型对应的零值是每个元素或字段都是对应该类型的零值
简短声明变量。它以
名字 := 表达式
形式声明变量
destination := 12
result := rand.Float64() * 3.0
var形式的声明语 句往往是用于需要显式指定变量类型地方,或者因为变量稍后会被重新赋值而初始值无关紧要的地方
赋值
使用赋值语句可以更新一个变量的值,最简单的赋值语句是将要被赋值的变量放在=的左边,新值的表达 式放在=的右边
x = 1 // 命令变量的赋值
*p = true // 通过指针间接赋值
person.name = "keke" // 结构体字段赋值
count[n] = count[n] * scale // 数组、slice或map的元素赋值
数值变量也可以支持++递增和–递减语句
v := 1
v++ // 等价方式 v = v + 1;v 变成 2
v-- // 等价方式 v = v - 1;v 变成 1
类型
变量或表达式的类型定义了对应存储值的属性特征,类型声明语句一般出现在包一级,因此如果新创建的类型名字的首字符大写,则在外部包也可以使用。
type 类型名字 底层类型
type Precision float64 #精确度