这是我参与「第五届青训营 」伴学笔记创作活动的第 1 天
基础入门
变量
- 区别于C++、JAVA,Go使用的是
var表示声明变量,将自动推断类型- 也可以通过
var a int来显示声明类型
- 也可以通过
- 赋值:
:= - 语句结束无
;
if-else
- 无括号,但必须有
{}
for
- 同样没有括号,但格式与c++类似
for {
}//表示死循环
for i<=3 {
}//没有分号
for n:=0;n<5;n++{
}
switch
- 支持多种类型
- 不用
() - 每个case 后面不需要添加
break
数组
- 声明:
var a [5]intb:=[5]int{1,2,3,4,5}var twoD [2][3]int
切片
可变长数组,更常用
- 声明
s:=make([]string,3)- `good :=[]string{"g","o","o","d","s"}
- API
append(s,"1",...)返回修改后的切片copy(c,s)
- 访问:支持像python的形式
s[2:5]s[:2]
map
- 声明
m:=make(map[string]int)[]是key类型,int是value类型
r,ok = map["unknown],ok表示是否有这个键值对delete(map,key):删除键值对
range
m:=map[string]string{"a":"A","b":"B"}
for k,v:=range m{
}
for k:=range m{
}
函数
允许返回多个值,一般最后一个是 返回错误
func devide(a int, b int) (ans double, ok bool){
return
}
func add(a int, b int) int{
return a+b
}
指针
作用有限,只用于传入参数时允许真实修改
结构体
type user struct{
name string
pwd string
}
func main(){
a:=user{name:"wang",pwd:"123"}
a:=user{"wang","123"}
var d user
d.name = "wang"
}
//普通函数
func checkPwd(u user, pwd string) bool{
return u.pwd == pwd
}
//结构体函数--> 不可修改结构体内的变量
func (u user) checkPwd(pwd string) bool{
return u.pwd == pwd
}
//结构体函数--> 可修改结构体内的变量-->结构体为指针类型
func (u *user) checkPwd(pwd string) bool{
return u.pwd == pwd
}
错误处理
- 导包:
errors
func findUser(users []user, name string) (v *user, err error){
for _,u:=range users{
if u.name==name{
return &u,nil
}
}
return nil, errors.New("not found")
}
- 空为:
nil
字符串操作
- 格式化方法
%v表示所有类型%+v表示显示变量名%#v表示显示类型
JSON处理
- 变量名首个字母大写
- 函数方法
buf,err := json.Marshal(a)fmt.Println(string(buf))这样不会出现乱码,如果直接输出可能会出现乱码err = json.Unmarshal(buf, &b)反编码
- 名称
转换成json后将变量名Age转换成agetype userInfo struct{ Age int `json:"age"` }
时间处理
now := time.Now()