这是我参与「第五届青训营 」伴学笔记创作活动的第 1 天
环境配置
安装golang
进入go.dev选择版本下载即可
安装编辑器或ide
VScode或goland进入官网下载即可
变量
var a = "initial"
var b int = 1
f := float32(e)
循环
for循环条件没有括号,带括号编译器会默认去除
只有for循环,没有while和do while循环
// for内不写条件 死循环
for {
...
break
}
switch
每一个case分支会默认使用break,这与c++不同
switch a {
case 1:
...
case 2:
...
}
switch内可以使用任意的变量类型
切片
可变长数组
s := make([]string, 3)
// 使用append追加元素
s = append(s, "d")
map
go中的map是完全无序的
// []内为键的类型,后面为值的类型
m := maek(map[string]int)
// 使用delete删除
delete(m,"one")
函数
可以返回多个值
func exits(m map[string], k string)(v string, ok bool) {
v, ok = m[k]
return v, ok
}
指针
主要用于值修改
func add2ptr(n *int) {
*n += 2
}
// 调用
add2ptr(&n)
结构体
type user struct {
name string
password string
}
可以用指针传参,方便对结构体修改,也能减少对大结构体拷贝的开销
结构体方法
类似类成员函数
func (u user) checkPassword(password string) bool {
return u.passwordd == password
}
// 带指针
func (u *user) resetPassword(password string) {
u.passwordd = password
}
错误处理
传入err类型如:err error
在函数错误中分两类返回,正确和错误
正确时进行正确业务逻辑处理,err 出返回空
错误时 return error.New("...")
字符串操作
a := "hello"
// 是否包含
strings.Contains(a, "ll") //true
// 个数
strings.Count(a, "l") // 2
// 长度
len(a) // 5
// 这里需要注意中文的长度不是字符个数
JSON处理
// 第一个字母大写
type userInfo struct {
Name String
Age int 'json:"age"' // 将输出时变为小写
Hobby []string
}
加上'json:"age"'的输出为Name:...,age:...,Hobby:...
可以直接使用json.Marshal(a)进行序列化
运行
写代码时会自动import导包,相比其他语言更加方便
一个go代码要运行,package 需要main