初识 Go 语言| 青训营笔记

98 阅读6分钟

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

前言

在新年临近的这段日子里,我终于开始了我第一个念念不忘的青训营的活动。本次报名后端活动围绕GO语言展开,之前的学习中用到最多的也就是Java,这也是我第一次对Go语言进行学习。今天学习的内容主要是进行入门学习Go语言,是我的Go新路历程的第一步。

什么是Go语言

Go语言是一种开源的编程语言,由Google开发,旨在提供一种更快速、高效、安全的编程体验。

Go语言具 有很好的高性能和高并发能力: Go语言采用了CSP架构,可以有效地处理大量并发任务;语言简单易学: 相对于别的语言Go语言的学习曲线很平坦,它的语法相对来说比较简单易学; 丰富的标准库:Go语言内置了大量标准库,可以帮助开发者快速实现各种功能 完善的工具链:Go语言内置了一套完善的工具链来帮助开发者进行代码分析、测试、部署和监控工作; 静态链接和快速编译:Go语言使用静态链接和快速的代码生成机制来保障代码执行效率; 跨平台特性:Go语言可以在多个平台上运行而不用修改代码; 垃圾回收机制: 支持垃圾回收(GC)。

概述

本节课内容主要分为三个部分:

  1. 开发环境
  2. 基础语法
  3. 标准库

开发环境

开发环境安装 Golang

  1. 下载安装包:从官网下载最新版本的Go语言安装包,golang.org/dl/。
  2. 安装Go语言:双击下载的安装包,按照提示一步步安装即可。
  3. 配置环境变量:在电脑的“我的电脑”-“属性”-“高级系统设置”-“高级”-“环境变量”中新建一个变量GOROOT,将其值改为Go语言安装目录。
  4. 测试Go语言是否安装成功:在命令行中运行go version命令,如果显示出当前Go语言的版本信息则表明Go语言已成功安装。

IDE的选择

IDE选择上主要有:vs code和goland。前者是由微软开发的开源代码编辑器,后者则是由 Jetbrains 公司开发,vs code是免费软件,goland的是收费的,但俩者都可以满足日常开发需求。在学过java的同学有idea也可进行添加插件进行编写内容。

基础语法

变量

go语言是一门强类型语言,每一个变量都有相应的变量类型,go语言在赋值时可以不指定类型,系统会自动识别其类型,也可以在变量后指定类型。

var a int = 666
var str = "aaaadwdw"
var d = true
var a = flat64
var := float32(e)

在go语言里面变量的声明有两种方式,一种是通过 var name string ="" 这种方式来声明变量,声明变量的时候,一般会自动去推导变量的类型。如果有需要,你也可以显示写出变量类型。另一种声明变量的方式是:使用变量冒号:=等于值下面来讲说常量。常量的话就是把 var 改成const,值在一提的是go语言里面的常量,它没有确定的类型,会根据使用的上下文来自动确定类型

流程控制

if-else

Go语言的流程控制主要有:

  1. 条件控制:if else、switch case 等
    常见用法如下 if:
if 7%2 == 0 {
    fmt.Println("7 is even")
} else {
    fmt.Println("7 is odd")
}
​
if num := 9; num < 0 {
    fmt,Println(num,"is negative")
} else if num < 10 {
    fmt.Println(num, "has 1 digit")
} else {
    fmt.Println(num, "has mutiple digits")
}

switch:

switch a {
    case 0, 1:
        fmt.Println("zero or one")
    case 2:
        fmt.Println("two")
    default:
        fmt.Println("other")
}
  1. 循环控制:for、range 等
    for
for i := uint(0); i < 8; i++ {
    if x&(1<<i) != 0 { // membership test
        fmt.Println(i) // "1", "5"
    }
}
  1. 跳转控制:break、continue、goto 等

数组,切片,Map

数组

Go 语言数组是一种基本的数据结构,它由固定长度的特定类型元素的有序集合构成。Go 语言中的数组可以存储任意大小的数据集合,并且可以在编译时就确定其长度。Go 语言中的数组是值类型,也就是说,当你将一个数组赋值给另一个数组时,它会复制整个数组,而不是引用它。Go 语言中的数组不能被扩展,但是可以使用切片来代替。

var n [10]int /* n 是一个长度为 10 的数组 */  
   var i,j int  
  
   /* 为数组 n 初始化元素 */          
   for i = 0i < 10i++ {  
      n[i] = i + 100 /* 设置元素为 i + 100 */  
   }  
  
   /* 输出每个数组元素的值 */  
   for j = 0; j < 10; j++ {  
      fmt.Printf("Element[%d] = %d\n", j, n[j] )  
   }
切片

Go 中提供了一种灵活,功能强悍的内置类型切片("动态数组"),与数组相比切片的长度是不固定的,可以追加元素,在追加时可能使切片的容量增大。

func main() {  
   var numbers = make([]int,3,5)  
  
   printSlice(numbers)  
}  
  
func printSlice(x []int){  
   fmt.Printf("len=%d cap=%d slice=%v\n",len(x),cap(x),x)  
}
Map

map是一个无序 1 对 1 键值对, map通过key和value的方式进行访问。

/* 初始化map */
m := make(map[string]int)
/* 将索引换成了 `key`,目标值换为了 `value` */
m["one"] = 1
m["two"] = 2

函数,指针,结构体与结构体方法

函数

Go语言函数是一种可以接受一定参数,并返回一定值的独立功能模块。

Go语言函数的使用方法:

定义函数:

func functionName(parameter type) returnType{}  

调用函数:

functionName(parameter)   

指针

Go语言指针是一种特殊的变量,它存储的是另一个变量的内存地址,因此也被称为引用。Go语言中,使用*操作符来声明指针。

var a *int //声明一个整型指针a   
var b *float64 //声明一个浮点型指针b   
var c *string //声明一个字符串指针c
x := 100    
// &x表示取x的内存地址,即指向x的指针

结构体

Go语言的结构体是由一系列具有相同或相似特性的数据项组成的数据集合,可以用来表示一个复杂的数据。它可以定义一个新的数据类型,并且可以创建多个不同类型的对象。

type 结构体名 struct {   
字段1 字段1类型   
字段2 字段2类型
}

结构体方法

Go语言结构体方法是Go语言中一种特殊的函数,它可以与特定的数据类型相关联,允许用户在类型上定义行为。