这是我参与「第五届青训营 」伴学笔记创作活动的第 1 天
1. Go语言开发环境的搭建
1.1 安装Golang
在官网 go.dev 或者国内镜像网站 goproxy.cn (较快)下载windows的安装程序,直接执行安装就可以。
在 Go 1.8 版本之前,GOPATH 环境变量默认是空的。从 Go 1.8 版本开始,Go 开发包在安装完成后,将 GOPATH 赋予了一个默认的目录 windows平台是在 %USERPROFILE%/go下 ,Linux平台是在 $HOME/go 下。
1.2 配置开发环境
对于Golang的开发,我们可以使用开源的Vs Code 或者 可以使用可以免费使用30天的GoLand。使用Vs Code作为开发环境的话,需要下载对应的go插件。
或者我们也可以使用云开发环境 hi-hi.cn/gitpod ,使用方法为此链接后跟上 # + 项目地址,例如:
http://hi-hi.cn/gitpod/#github.com/wangkechun/go-by-example
2. 基础语法
在 Go 中,基础的数据类型有:数字类型、字符串类型、布尔型
2.1 Hello World
作为刚接触一门语言,首先要写的第一个程序即是Hello World,代码如下:
package main
import "fmt"
function main() {
fmt.Println("Hello World!")
}
作为入门的第一个程序,我们要看Go程序的结构是什么样的
// 包声明 , package main 表示一个可以独立执行的程序,这条语句必须存在于源文件非注释的第一行
package main
// 包引入,在项目中我们需要使用到其他包下的内容时,需要在此处进行引用,此外当需要引入多个包时,可以使用大括号进行包裹,如:
// import {
// "包名"
//}
import "fmt"
// function 定义函数,main函数是程序开始执行么函数
function main() {
// 具体代码 , 此处是使用了fmt包下的Println()函数,其作用是打印填入的参数
fmt.Println("Hello World!")
}
执行这段程序,我们可以在控制台发现 Hello World! 这句话。
2.2 变量
在Go中声明变量时,可以显示提供类型,也可以不显示提供类型,Go语言会自动进行类型推导。
变量,常量声明方式: 使用 var 来声明变量,eg:
var a = "value"
var b int = 2
var c
var d, e, f
g := 9
其中 := 用于声明变量较为简洁
使用 const 来声明常量,eg:
const a = "value"
const b int = 2
2.3 if-else
与C语言和Java语言不同,Go语言进行判断时无需对条件加上括号。
使用方式参考以下代码:
// 第一种
if 1/2 == 0{
}else{
}
//第二种
if temp := 2 ; temp < 0{
}else if temp < 3 {
}else{
}
2.4 循环
Go语言不存在while循环。只有for循环。
使用方式参考以下代码:
// 第一种,死循环
for{
}
// 第二种,C语音类似写法
for temp := 0 ; temp < 10 ; temp++{
}
// 第三种,只写条件语句
for temp < 10 {
}
2.5 switch
Go语言除了拥有C语音 switch 的作用外,还可以另一种方式,另外,Go使用switch时,无需添加break,当匹配到条件时不会执行后续case的代码。
使用方式参考以下代码:
// 第一种
t := 4
switch (t){
case 1: // your code
case 4: //your code
default: //your code
}
//第二种
switch{
case t< 0://your code
default://yiur code
}
2.6 数组
Go定义数组的方式为:
var a [10]int
b := [2]int{1,2}
var c [2][2]int
操作方式与C语言类似,也可以使用len()来获取数组长度
2.7 切片
与Python类似 可使用 [start,end]进行对数组的切片,范围为start开始到end-1位置的内容。
使用方式:
// 可使用make()来完成创建一个指定大小和类型的数组
s := make([]string , 5)
// 可使用apoend函数对数组进行添加,添加后数组长度会加一
s = append(s, "1")
a := s[2:5]
b := s[2:]
c := s[:3]
2.8 map
创建 :
// 使用make()进行map的创建,string为键类型,int为值类型
map := make(map[string]int)
map1 := map[string]int {"mm":1}
添加 :
map["mm"] = 0
获取值 :
// 键值获取
a , ok = map["mm"]
2.9 range
使用range可完成对数组的遍历以及map的遍历
a := []int {1, 2, 3}
// i为索引,num为值
for i ,num := range a{
}
m := map[string]int{"mm":2}
// k为键,v为值
for k, v := range m{
}
// 只获取键
for k := range m{
}
2.10 函数
使用func关键字进行函数声明。
//使用多个参数或者返回类型时,可以使用括号进行包裹,go语言支持多返回值
func 函数名(参数名1 参数类型1, ……) (返回类型1,… ){
}
2.12 指针
当调用可以修改入参的值得函数时传递的是变量的话,变量本身不会改变,当传递的是变量指针的话,变量本身会改变。 例如
package main
import "fmt"
func add(a int) {
a+=1
}
func addPtr(a *int) {
*a+=1
}
func main {
n:= 2
add(n)
fmt.Println(n) //2
addPtr(&n)
fmt.Println(n) //3
}
2.13 结构体
类似于C的结构体
type name struct {
name string
val int
}
// 可使用.进行获取结构体某个属性的值,也可以修改
a := name{"str",1}
c := a.val
a.val = 2
2.14 结构体方法
// 定义方法的语法格式
func (接受者变量 接受者类型) 方法名(参数列表) (返回值列表){
}
2.15 错误处理
对于某些方法,返回的值可能会有错误信息,为使流程正确,我们可以使用两个参数用于接受方法返回值,第二个参数为错误信息,之后将其进行判断是否为nil,若为空则继续向下执行,否则直接打印错误信息,并停止向下运行。