这是我参与「第五届青训营 」伴学笔记创作活动的第 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即可完成一次程序的运行,运行结果如下:
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)