Go语言基础 | 青训营笔记

78 阅读3分钟

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

1.开发环境

1.1 安装golang

https://go.dev
https://studygolang.com/dl
https://goproxy.cn/

1.2 装vscode,在其中找到go语言的插件,安装即可使用 (我使用的是如下方式进行go环境的配置)

在终端输入如下命令:

go env -w GO111MODULE=on 
go env -w GOPROXY=https://proxy.golang.com.cn,direct

然后再点击install all将所有需要的环境配置下来
最后运行go run main.go即可完成一次程序的运行,运行结果如下:

image.png

1.3 云开发平台

https://hi-hi.cn/gitpod

2.基础语法

2.1 实例演示

package main

import "fmt"

func main(){
	fmt.Println("hello world")
}

运行命令 go run main.go即可完成文件的编译。

2.2 变量类型

  • 变量类型有两种写法,一种是直接用等号将value值赋值,定义的变量会自动判断类型
  • 另一种是在定义好的变量类型后边写上该变量的类型
var a = initial
var b,c = 1,2

2.3 if-else

if后面不需要括号,若加上了括号,则编译时会自动取消掉括号。

2.4 循环

在go里面只有一个for循环,没有do-while和while循环。

2.5 切片

定义完一个数组之后,可以使用s[2:5]这种切片的写法,提取出里面的内容。注意,这个中括号是左闭右开。

2.6 map

创建map数据结构需要定义两个变量类型,前一个为key的类型,后一个为value的类型,如下所示

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

使用delete可以删除kv对

delete(m,"one")

可以使用r变量来接受value值,并在后面添加上关键字OK,来表示是否存在key,若存在返回true,若不存在则返回false。

2.7 range

range可以用来遍历数组,常见于for循环中的遍历

for i,num := range nums{}
m := map[string]string{"a":"A","b":"B"}
for k,v := range m{}

2.8 函数

所有的函数的类型都是后置的。几乎所有的函数都返回两个值,一个是

func add(a int, b int) int {
    return a+b
}
func exists(m map[string]string,k string)(v string, ok bool){
    v,ok=m[k]
    return v,ok
}

2.9指针

指针的类型同样也是后置

func add2ptr(n *ptr){
    *n += 2
}

add2ptr(&n)

2.10 结构体

示例如下:

package main

import "fmt"

type user struct{
	name string
	password string
}

func main(){
	a := user{name:"wang",password:"1024"}
	b := user{"wang","1024"}
	c := user{name:"wang"}
	c.password="1024"
	var d user
	d.name="wang"
	d.password="1024"
	
	fmt.Println(a,b,c,d)
	
}

2.11 结构体方法

将一个普通函数定义为结构体函数,那么就类似于c++中类成员函数一样,定义了一个结构体对象后,就可以用.调用一个结构体方法。

type user struct{
	name string
	password string
}

func (u user) checkPassword(password string)bool{
	return u.password==password
}
func (u *user)resetPassword(password string){
	u.password = password
}

func main(){
	a := user{name:"wang",password:"1024"}
	a.resetPassword("2048")
	fmt.Println(a.checkPassword("1024"))
	
}

2.12 字符串操作

go函数库中提供了众多字符串的api操作,具体如下:
count 计数
index查找字符串中某个字符的位置
join为连接多个字符串 replace替换多个字符串

2.13字符串的格式化

go中的打印输出类似于c语言的打印输出,不同的是,go中使用%v能够自动识别所要输出的变量类型,从而能够更加快速的输出。

2.14JSON处理

对于一个结构体,需要保证定义的变量名字每一个都是大写的字母,在对一个结构体变量完成对应的赋值后,可以使用json.Marshal进行格式的转换。也可重新定义一个变量b,对JSON格式进行一个逆序的转换,变成原变量的形式err=json.Unmarshal(buf,&b)