Go 语言基础 - 基础语法| 青训营笔记

68 阅读4分钟

这是我参与「第五届青训营 」伴学笔记创作活动的第 1 天

第一次接触go语言,从go的基础语法开始学习。根据课程我的笔记也将分为四部分:开发环境,基础语法,标准库,实战训练

第一次接触go语言,可以发现它有以下几个特点:

  • 语法简单,容易上手
  • 具有丰富的标准库,完善的工具链
  • 高性能 高并发 是针对服务端开发的语言

开发环境

官网下载的golang安装包

使用vscode 作为开发的IDE,安装go的扩展插件

在安装过程中没有遇到什么问题,关于开发环境就写到这里

基础语法

以golang最基础的hello world 进行说明 go语言的代码结构

分为三部分

package

表明这个文件属于package main 的一部分

包具有如下特性:

  • 一个目录下的同级文件归属一个包
  • 包名可以与其目录不同名
  • 包名为 main 的包为应用程序的入口包,编译源码没有 main 包时将无法编译输出可执行文件。

import

包的引用 这里导入了标准库中的FMT 包 用于格式化输出

go语言提供了很多相关的库,使用更为灵活

func

main 函数作为入口函数

变量

go语言是—门强类型语言,每一个变量都有它自己的变量类型。在go语言里面,大部分运算符的使用和优先级都和C++类似。需要提一点的是go 语言的字符串是内置类型,可以直接通过加号拼接,也能够直接用等于号去比较两个字符串。这与c++指针是不一样的。

在go语言里面变量的声明有两种方式,一种是通过var name [类型] ="" 这种方式来声明变量。 另一种声明变量的方式是:使用 变量名冒号:=等于值。 这种方法go会自动推导变量的类型

常量就是把var改成const。go语言里面的常量,它没有确定的类型,会根据使用的上下文来自动确定类型,会自动进行转换。

if-else

写法与c++ 相似,区别在于格式上 判断条件无需括号 ,其次执行内容必须要使用{}将其包裹起来

循环

只有for 循环 格式上与if-else 类似 无括号 循环体需要{}

switch

在c++里面, switch case如果不显示加 break的话会然后会继续往下跑完所有的case,在go语言里面的话是不需要加break 的。

go语言中的switch功能更强大。可以使用任意的变量类型,你可以在switch后面不加任何的变量,然后在case里面写条件分支。这样代码相比你用多个if else代码逻辑会更为清晰。

数组

var a [5]int

b := [5]int{1, 2, 3, 4, 5}

这两种都可以进行声明定义

切片

这里的切片更类似python的list,是一个变长的数组,利用append 进行元素的添加。同样支持[start: end]这种切片操作。

s := make([]string, 3)

map

m := make(map[string]int)

go 中的map 是完全无序的,遍历的时候不会按照字母顺序也不会按照插入顺序输出

range

参考python中遍历的range 和 in

函数

go 函数支持返回多个值,它的变量类型是后置的

指针

go也是支持指针的,与c++指针类似,但是功能有限不支持c++智能指针

实践

猜谜游戏

随机生成一个数字,获取输入判断与目标数字大小关系,将结果输出,反复循环直到猜到正确数字。

这里有个问题随机数字rand.Intn() 每次运行指定数字相同。这是由于rand.seed 的问题,如果指定了seed随机数的数值相同。这里需要指定一下rand.seed()

在线字典

这里源码就不放了 介绍一下几个实用的工具

curlconverter.com/#go

将网络的请求转换为go的请求代码

oktools.net/json2go

将json数据包转换为go的结构体定义

这两个工具极大的帮助我们解析网页内容发包收包等问题。

整个就到此结束了,下次课程继续。