Go语言基础应用|青训营笔记

102 阅读5分钟

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

前言

本文主要总结了后端Go语言基础知识,主要有Go的特点以及被广泛采用的原因,以及Go的变量与语法介绍,重点需要掌握基础变量与语法的使用与格式编写,以便正确书写代码。

1.1什么是Go

Go(又称Golang)是Google的Robert Griesemer,Rob Pike以及Ken Thompson开发的一种静态强类型、编译型语言。

  1. 高性能、高并发:对高变化的支持,不需要第三方库,只需要标准库或任意基于标准库的第三方库。
  2. 语法简单、学习曲线平缓:在C的基础上进行大幅度简化。
  3. 丰富的标准库:高稳定性与兼容性保障,持续享受语言带来的优化。
  4. 完善的工具链:编译、代码格式化、错误检查、代码补充提示等。
  5. 静态链接:所有编译默认为静态链接。
  6. 快速编译
  7. 跨平台:linux、windows、macos等操作系统,开发安卓、ios软件,在奇怪设备上运行,如路由器树莓派等。
  8. 垃圾回收

1.2哪些公司使用Go

ByteDance字节跳动、Google、Tencent腾讯、facebook、美团、七牛云、滴滴、bilibili等。

1.3为什么全面拥抱Go

  1. 由性于能问题,把Python换成Go
  2. C++不太适合在线Web业务
  3. 早期团队非Java背景
  4. Go性能好
  5. 部署简单、成本低
  6. 内部PRC和HTTP框架推广

2.1开发环境

-安装Golang-配置集成开发环境-基于云的开发环境

2.2基础语法

-Hello World

hello world.png

  • 导入main包来导入程序入口文件
  • 导入程序fmt包来格式化I/O的输入和输出
  • 写函数func mian(){...}

-变量

var.png

2.3基础语法if-else

3.png

  • 计算表达式左右无括号,后接大括号!!

2.4基础语法-循环

for.png

  • 没有while、do-while循环,只有for。for内什么都不写是死循环,也可以使用最基础的C循环。

2.5基础语法-swicth

cb07c7c5c85e395919324c625b063b5.png

  • swith后的变量也不需要括号。golang中没有break也不会继续运行其他分支,可以使用任意的变量类型,例如字符串、结构体,甚至可以取代if-else语句。

2.6基础语法-数组

array.png

  • 数组长度是固定的,因此不常用,常用的是切片。

2.7切片

slice.png

  • 切片是可变长度的数组,slice就是arr切片的引用,改变slice也会改变数组。用make来创建切片,用append来赋值(也可以在创建时直接赋予长度),cap可以获取slice最大值(从数组导出),copy函数复制从源slice的src复制元素到目标dst。s[2,5]第2个到第5个(不包括第5个)的元素,不同python,不支持复数索引,用len取出长度再做简单运算。

2.8基础语法-map

map.png

  • 使用最频繁的数组结构。用[]写与读,delete删除,读取是使用ok来查看是否存在某元素。

2.9基础语法-range

range.png

  • 可快速遍历,对于数组,返回两个值:索引(不需要时可用下划线)和对应位置的值。

2.10基础语法-函数

func.png

  • goland里面变量类型后置。

2.11基础语法-指针

point.png

  • 相比其他语言,golang指针支持的操作非常有限,主要用途为对传入的参数进行修改。

2.12基础语法-结构体

struct.png

  • 结构体是带类型的字段的集合,可以用结构体名称初始化结构体变量,初始化时需要传入每个字段初始值,未定义则赋空值。

2.13基础语法-结构体方法

struct-method.png

  • 类似于其他语言的类成员函数。

2.14基础语言-错误处理

error.png

  • 使用单个的返回值来处理错误信息,不同于异常处理,在代码中加入“error”提示可能会出现错误。接收需要两个变量,调用完后判断是否存在error,没用error时才能取返回值,否则会报控值错误。

2.15基础语法-字符串操作

string.png

  • Go语言字符串都是采用UTF-8字符集编码,字符串由一对双引号""或者反括号括起来定义的,单引号不能表示字符串,该点不同于PYthon。Go语言字符串不可以改变,这与Python相同。

2.16基础语法-字符串格式化

5b992beaea8e91ae93e4c029db4bdb7.png

  • 最常用的是fmt.Println打印并换行,fmt.Printf类似C的Printf,可以用%v打印各种类型。

2.17JSON处理

josn.png

jiso.png

  • JSON.Marshal序列化,序列化后的字段大写字母开头,或者AGE json="age"表示小写。

2.18基础语法-时间处理

time.png

  • 格式化用的是特定时间,而不是YY:DD:HH。

2.19基础语法-数字解析

stronv.png

  • 内置的strconv包提供了数字解析功能,strconv.ParseInt(传入数值,进制,返回精度)。

2.20基础语法-进程信息

env.png

总结

Go语言与其他编程语言各有千秋,包括java、c#等多数的系统级语言的根本编译哲学来源C++,而Go源于C语言。Go的编译效率高,拥有接近C的运行效率以及接近PHP的开发效率,它支持当前所有的编程范式,包括过程式、面向对象、面向接口与函数式,因此程序员们可以各取所需进行自由组合。GO拥有强大的标准库,部署方便,并发简单,稳定性也较好。

  • 对于C/C++,Go语言拥有垃圾回收功能,使得代码量减少,开发效率提高。
  • 对于Java,Go类型系统简单、有函数式编程范式以及并发编程模式,代码块简洁,可运行于多核计算环境。
  • 对于Python/Ruby,Go语法简单、类型系统非侵入和扁平化、多范式编程模型,运行速度较于其他静态类型的编译语言要快很多。