Go语言环境搭建及基础知识 | 青训营笔记

60 阅读4分钟

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

本篇笔记主要包含三个方面:

  1. 环境搭建及案例导入;
  2. 基础知识学习(上)。

一、Windows中环境搭建及案例导入

1.安装go语言:

访问 go下载地址 ,点击 Download ,进入下载界面后,选择对应平台的安装包安装即可。此处我选择的是Windows版本的。

image.png (注意不要忘了将更改安装路径)

2.安装Golang:

访问 Golang下载地址,下载后按照提示安装,将安装路径更改,在以下页面勾选三个选项。一直next直至安装完成。不同版本此页面可能会有不同,按照需求勾选即可。

image.png

3.案例导入:

(1)此处需要提前下载安装git:git下载地址

(2)在新建项目前,我提前准备了一个空文件GolandProjects夹作为以后Go项目的存放处。在GolandProjects文件夹中新建ProjectTest作为第一个项目。

  • 进入ProjectTest文件,右键选择Git Bash Here。

image.png

  • 配置本地仓库的账号邮箱git,双引号内为自己的github账号信息。 $ git config --global user.name "Your Name"

$ git config --global user.email "email@example.com"

  • 使用ssh登陆。查看自己电脑C:\Users\Administrator 目录下是否有 .ssh 文件夹。如果没有则需要以下命令生成。

$ ssh-keygen -t rsa -C "youremail@example.com"

然后登入github账号,在个人头像处点击settings。

image.png

新建一个SSH,Title可以自己起。

image.png

在C:\Users\Administrator.ssh中用记事本打开id_rsa.pub,复制其中全部内容到KEY中。最后点击Add SSH Key即添加成功。

image.png

  • 克隆github上的项目在Code处复制项目链接,有三种可以选择。

image.png

git clone 项目地址

image.png

使用Golang打开项目。

image.png

运行成功证明配置正确。

image.png

二、基础知识学习

1.hello world

  • import ("fmt")为导入标准库的包。fmt作用为向屏幕输入输出字符串,格式化字符串。一次导入多个包语法要求必须加圆括号.否则报错。

  • Go语言不需要在语句或者声明的末尾添加分号,除非一行上有多条语句。编译器会主动把特定符号后的换行符转换为分号, 因此换行符添加的位置会影响Go代码的正确解析。特定符号有:标识符、整数、浮点数、虚数、字符或字符串文字、关键字 break 、 continue 、 fallthrough 或 return 、运算符和分隔符 ++ 、 -- 、 ) 、 ] 或 } 。

举个例子, 函数的左括号 { 必须和 func 函数声明在同一行上,且位于末尾,不能独占一行,而在表达式 x + y 中,可在 + 后换行,不能在 + 前换行。以+结尾的话不会被插入分号分隔符,但是以x结尾的话则会被分号分隔符,从而导致编译错误。

image.png

2.变量

(1)var a = "initial"自动推导变量类型;

(2)f := float32(e)

= 和 := 的区别

= 使用必须使用var声明

:= 是声明并赋值,不需要var关键字

(3)常量声明只需要将var改为const,常量无确定类型,会自动根据上下文确定类型。 image.png

3.if else

  • if 后无括号,判断语句后必须接大括号。
  • if后有条件语句则用分号隔开。

image.png

4.循环

  • 只存在for循环,任一条件语句都可以省略。
  • for循环的条件语句用分号隔开,条件语句不加括号。

image.png

5.switch分支

执行完一个分支后会自动跳出分支。可以使用任意的变量类型,甚至可以取代if else语句。

image.png

6.数组

数组长度固定比较有局限性。

var a [5]int  //声明
a[4] = 100    //赋值
fmt.Println("get:", a[2])  //读取

7.切片

切片长度可变,追加元素时要将其赋值给原数组。同时可以切片取出元素。

s := make([]string, 3)
s[0] = "a"

s = append(s, "d")

c := make([]string, len(s))
copy(c, s)
fmt.Println(c) // [a b c d e f]

fmt.Println(s[2:5]) // [c d e]

good := []string{"g", "o", "o", "d"}
fmt.Println(good) // [g o o d]

8.map

第一个数据类型为key的,第二个为value的。

m := make(map[string]int)
m["one"] = 1
m["two"] = 2

9.range

快速遍历,对于数组返回的第一个值是索引,第二个值是位置上的值;对于map返回的第一个值是key,第二个值是value。

nums := []int{2, 3, 4}
sum := 0
for i, num := range nums {
   sum += num
   if num == 2 {
      fmt.Println("index:", i, "num:", num) // index: 0 num: 2
   }
}
fmt.Println(sum) // 9

10.函数

数据类型后置,支持返回多个值,第一个值返回结果,第二个值返回错误信息。

func exists(m map[string]string, k string) (v string, ok bool) {
   v, ok = m[k]
   return v, ok
}