Hello,这是我参与「第五届青训营 」笔记创作活动的第1天
本人所学知识不多,对于Go语言也仅仅只学了几个小时,如果有错误的地方,请指正!
本节课重点学习了使用Go语言之前的准备,Go语言的基础语法和其他语言的一些区别与创新
准备Go的开发环境
下载安装go的SDK:GO语言中文网网站 studygolang.com/dl
证明是否安装成功:
cmd命令行中输入go version 若出现go的版本信息说明安装成功 (新版go自动配置好了环境变量)
使用Go语言打印hello world
使用GoLand打印hello world
STEP 1 创建一个GO项目
File -> New Project -> 选择GO,保存位置Location,GOROOT是自己安装go的路径 -> Create创建
STEP 2 配置GOPATH
File -> Settings -> Go -> GOPATH
根据自己的需求配置全局GOPATH或者项目GOPATH,GOPATH是作为自己的工作区,在下载go的时候自动配置好了,若需要更改可以在环境变量中更改GOPATH的值
1. GOPATH之下主要包含三个目录: bin、pkg、src
2. bin目录主要存放可执行文件;
pkg目录存放编译好的库文件, 主要是*.a文件;
src目录下主要存放go的源文件
复制代码
不要把GOPATH设置成go的安装路径,可以自己创建一个目录, 如gopath
STEP 3 编写一个Go程序
New -> GO file
快速入门:
package main package表示打包,package main表示main包,是一个程序执行的入口,一个程序只能有一个main包
import "fmt" 表示导入一个系统包"fmt","fmt"是可以用来输出的系统包
func func main() { fmt.Println("hello world") } func表示函数,main是函数名,main()函数是一个程序执行的入口。fmt.Println("hello world")就是输出hello world
注意:go语言中一条语句后可以不用分号结尾
Go 语言基础
一、数据类型
1、数值类型
1.1 整型
有符号整型:
int8
int16
int32(rune)
int64
int 32或64,取决于对于CPU的平台机器大小
无符号整型:
uint8(byte)
uint16
uint32
uint64
uint 32或64,取决于对于CPU的平台机器大小 uintptr 用于存放一个指针
1.2 浮点型
float32
float64
1.3 复数型
complex32
complex64
2、布尔型
和其他语言一样
二、变量与常量
1、变量
1.1 变量的声明
var 变量名 类型 = 表达式/值
1、当指定了表达式/值时,类型可以省略,Go会根据表达式/值推导其类型
2、当指定了类型时,若未赋予变量表达式/值,则会指定一个默认值(例如 bool是false,数值类型是0,接口或引用类型是nil等等)
var i int = 10
var s = "hello world"
var b bool
复制代码
1.2 简短变量的声明
变量名 := 表达式
同样的,Go会根据表达式来推导变量的类型
i := 10
s := "hello world"
复制代码
虽然:=是一个变量声明符号,但是若:=前存在一个变量已经声明过了,则只会对该变量进行赋值操作
i := 10
i,b := 20
复制代码
2、常量
常量的声明则是将var换成const const 常量名 类型 = 表达式
三、条件语句
1、if语句
Go语言中的if语句(包括if语句、if-else if...语句、if-else语句等)的判断表达式的布尔值的语句是不需要括号的
即
for 布尔表达式{
...
}
复制代码
2、switch语句
Go语言中的switch语句中,switch后的变量也不需要括号
switch 变量{
case 值1:
...
case 值2:
...
default:
...
}
复制代码
特别注意的是,在Go语言中switch结构中每个case语句块默认自带一个break语句,即寻找到匹配值后不会往后继续寻找,若需要继续寻找则可以使用fallthrough
3、select语句
select 是 Go 中的一个控制结构,类似于 switch 语句。 用于通道操作,每个 case 必须是一个通道操作,要么是发送要么是接收。select 语句会监听所有指定的通道上的操作,一旦其中一个通道准备好就会执行相应的代码块。如果多个通道都准备好,那么 select 语句会随机选择一个通道执行。如果所有通道都没有准备好,那么执行 default 块中的代码。
select {
case <- 表达式:
...
case 变量 := 表达式:
...
case 表达式 <- 值:
...
default:
...
}
复制代码
说明
-
每个 case 表示一个通道
-
所有 channel 表达式都会被求值
-
所有被发送的表达式都会被求值
-
如果任意某个通道可以进行,它就执行,其他被忽略。
-
如果有多个 case 都可以运行,select 会随机公平地选出一个执行,其他不会执行。
-
若case都不可以执行:
- 如果有 default 子句,则执行该语句。
- 如果没有 default 子句,select 将阻塞,直到某个通道可以运行。
四、循环语句
Go语言中只有一种循环语句的关键字for,同样省略了表达式的括号
for 循环变量初始化;条件判断;循环变量迭代{
...
}
复制代码
五、函数
函数的基本定义
func 函数名(参数列表) 返回值{
...
}
复制代码
说明
- func 表示函数的声明
- 参数列表是可选的
- 返回值即函数的返回值,当函数没有返回值,就省略返回值的声明
- Go语言的函数返回值是可以有多个的
package main
import "fmt"
func calculate(x,y int) (int,int){
return x+y,x-y
}
func main(){
a,b := calculate(1,2)
fmt.Println(a,b)
}
//输出3,-1
复制代码
六、数组
Go语言中数组的声明
例如一维数组的声明
var 数组名 [数组大小] 类型
数组的初始化
var arr = [5]int{1,2,3,4,5}
复制代码
简化数组初始化
arr := [5]int{1,2,3,4,5}
复制代码
如果数组长度不确定,可以用...来代替数组的长度
var arr = [...]int{1,2,3,4,5}
复制代码
通过指定下标来初始化数组(指定了数组的长度)
//对下标为1和2的赋值
var arr = [5]int{1:5,2:6}
复制代码
课后个人总结
今天花了几个小时快速入门了Go语言,发现Go语言许多与其他语言不同的特性,例如在语法结构上突出了一种“简洁”,省略了语句结尾的分号和许多结构中的括号;在函数中可以返回多个值;在循环语句中仅用for循环
引用参考
字节跳动第五届冬令营Go语言基础教程 Go语言教程|菜鸟教程:www.runoob.com/go/go-tutor… Go语言圣经(中文版):books.studygolang.com/gopl-zh/