Go语言基础 | 青训营笔记

316 阅读5分钟

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创建

image.png

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的安装路径,可以自己创建一个目录, 如gopathimage.png

STEP 3 编写一个Go程序

New -> GO file

image.png

快速入门:

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 变量{
    case1:
        ...
    case2:
        ...
    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都不可以执行:

    1. 如果有 default 子句,则执行该语句。
    2. 如果没有 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/