go基础语法| 青训营笔记

54 阅读1分钟

变量

声明

var a ="initial"
var c int = 1,2
f := float32(e)

数组

var a [5]int
b := [5]int{1,2,3,4,5}

var t [2][3]int
for i :=0;i <2;i++{
	for j:= 0;j < 3;j++{
		two[i][j] = i + j
	}
}

切片

可变长度的数组

s := make([string,3])
s[0] = "a"
s[1] = "b"
s[2] = "c"
s= append(s,"d") //[a,b,c,d]

map

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

结构体

type user struct{
	name string
    password string
}
//成员函数
func(u user) checkPassword(password string) bool{
    return u.password == password
}
func(u* user) setPassword(password string){
    u.password = password
}
func main(){
    a := user{name:"wang" ,password:"1025"}
    a.password = "1024"
}

错误处理

func findUser(users []user,name string)(v* user,err error){
	return &u,nil
    return nil,errors.N
}

字符串格式化

%v变量结构体会输出p={属性1 属性2..}

%+v输出p={属性名:属性1 属性名2:属性2}

%#v输出p={属性名:main.Point{x:1,y:2}}

浮点数和c相同

JSON

可以通过Marshal(结构体)进行序列化操作

数字转换

strconv把字符串转换为数字。

输入

reader := bufio.NewReader(os.Stdin)
input,err :=reader.ReadString('\n')
if err !=nil{
	return
}
input = string.TrimSuffix(input,"\n")

编码规范

代码格式

go语言内置格式化功能。

goimports可以自动增删依赖包使用,并排序。

注释

  • 解释代码作用

    对函数、变量的功能进行说明

  • 解释代码如何做的

    解释代码的实现过程

  • 解释代码实现的原因

    解释代码的外部因素

  • 解释代码什么情况会出错

    解释代码的限制条件

命名规范

变量
  • 缩略词全大写
  • 变量距离使用的地方越远,名字应该越长,携带更多的信息
函数
  • 函数名尽量简短。
  • 不携带包名的上下文信息
  • 返回类型和包名一样时,可以省略类型信息。
  • 返回类型和包不一样时,加入类型信息。
  • 不包含大写字母和下划线。
  • 包含一定的上下文信息,
  • 不与标准库,常用变量同名
  • 使用单数
  • 谨慎使用缩写

控制流程

  • 避免分支嵌套
\\bad
if foo{
    return x
}else{
    return nil
}
\\good
if foo{
    return x
}
return nil
  • 尽量保持正常代码路径为最小缩进

    优先处理错误情况/特殊情况,尽早返回或继续循环来减少嵌套。

错误和异常处理

简单错误
func defaultCheckRedirect(req *Request,via []*Request) error{
    if len(via) >=10{
        return errors.new("")
    }
    return nil
}
panic
  • 不建议使用panic
  • 建议使用error代替
recover
  • 只能在被defer函数中使用。
  • 只能在当前goroutine生效