开课高薪webGL工程师2022最新完结

#1

download:开课吧-高薪webGL工程师[2022最新完结无密]

命名规范

一、包命名

1、路径规范 路径中应该 全用小写,包括文件名本身

2、包命名细节规范 使用方import之后,可以使用最后一级,或者自己对包另外加别名,因此 不需要担心最后一级重复的问题 。 不过也正因为如此,包的完整路径应该去体现包的完整功能。要简洁,但是不能不完整。 另外,也是因为使用包方法的时候要带上包的最后一级,所以 包内对象不应该再包含包名,比如 io.Reader 而不是 io.IOReader

二、getter

建议:Getter 前面最好不要带上Get, 直接用对象名即可,更加简洁

owner := obj.Owner()
if owner != user {
    obj.SetOwner(user)
}
复制代码

三、Interface

和刚才Getter 的定义思路类似:Interface 中的方法定义,如果方法返回的对象非常明确,建议 直接就使用对象名 ,而不要再加上表示动作的前缀。

另外,Interface 本身的命名也应该尽量简短,直接表示出这个对象是什么。

反例:所有的对象,都带上什么Interface、Controller 之类的后缀,导致对象类型本身非常长。如:SchoolController 。建议直接定义成: student.Controller

分号

从一个问题引入:go 确实不需要分号么? 如果你是使用goland 编写go 代码,你就可以发现,其实在行尾加上分号是不会编译操作的,只是会提醒:redundant semicolon 其实和C 语言一样,go 在编译的时候也是需要分号的,但是源代码中并不需要写,词法分析器(lexer)会自动帮我们加上 那么什么时候加呢?go lexer 会在结束符尾自动加上,常见的结束符有:

break continue fallthrough return ++ -- ) }
复制代码

这的确帮我们节省了一些工作量,不过同样,这会导致go 对语法本身也是有一些要求的,比如 左大括号 必须写在行最后,不能新起一行,否则会导致上一行行尾 自动被加上分号,导致编译错误。

if i < f() {
    g()
} else {
    h()
}
复制代码

条件控制语句

一、if

格式:建议多行、如果只是if 内部用,变量可以和if 语句在同一行初始化、尽量减少else 的使用(if 里面放异常情况,一般是直接退出) 示例代码:

f, err := os.Open(name)
if err != nil {
    return err
}
d, err := f.Stat()
if err != nil {
    f.Close()
    return err
}
codeUsing(f, d)
复制代码

二、再声明和再赋值(Redeclaration and Reassignment)

参考:考虑下面两行语句,第二行中的err 虽然是通过 := 设置的,但是也只是赋值

达到这种再赋值(reassignment) 需要2个条件: 1)之前已经声明过这个变量 2)重新赋值的时候至少还有另一个新创建的变量

示例:

f, err := os.Open(name)
...
d, err := f.Stat()
复制代码

三、for

1、常见for 循环格式

// Like a C for
for init; condition; post { }

// Like a C while
for condition { }

// Like a C for(;;)
for { }
复制代码

2、使用下划线忽略不需要关注的对象

在编译map/slice 的时候还是很有用的,比如slice 大部分时候其实我们只关系值,不关心下标,就可以用 下划线 忽略下标:

sum := 0
for _, value := range array {
    sum += value
}
复制代码

3、其他细节

for 循环遍历字符串,会按照具体编码的格式来展示,比如中文,就是一个个汉字; ++、-- 是语句而不是表达式,本身没有返回值