开启掘金成长之旅!这是我参与「掘金日新计划 · 12 月更文挑战」的第13天,点击查看活动详情
这里列举的是除了编辑器能够显而易见的提示的错误,比如 开始 "{" 不能独占一行,定义的变量没有使用造成的问题等,这里就不再赘述了
不要使用类似 var a*b 声明变量,这会让你混淆指针声明和乘法运算
package main
import "fmt"
type b struct {
}
func main() {
// 你不细看,还真的有点...
var a *b
fmt.Println(a)
}
注意使用短式变量声明
短式变量 ":=" 是定义的块级作用域的局部变量,因此在你用的时候注意 = 和 := 在下面的情况,因为你有可能只是重新赋值,但是手误写错了,但是编译器是不会报错的,在块状作用域里,上面的变量的n 就会被隐藏
func main() {
n := 2
fmt.Println(n) //prints 2
{
fmt.Println(n) //prints 2
n := 3
fmt.Println(n) //prints 3
}
fmt.Println(n) //prints 2
}
slice 和 map 的初始化问题
1.slice 和 map var 定义后都是 nil,但是 append 给 slice 不会报错,map 则需要初始化 2.创建 slice map、chan 的时候尽量都用 make
package main
import "fmt"
func main() {
var slice []int
slice = append(slice, 1)
fmt.Printf("%v", slice)
var m map[string]int // m = nil
// m:=new(map[string]int) //m = nil
// m:= make(map[string]int) // m 被初始化了
m["1"] =1 // error
fmt.Printf("%v", m)
}
不要在 for-range 循环中使用一个值去改变自身的值
因为 for-range 中的迭代值是值拷贝,比如下面的例子
package main
import "fmt"
type User struct {
money float32
}
func main() {
users := []User{
{money: 100},
{money: 200},
{money: 300},
}
for _, u := range users {
u.money += 1000
}
fmt.Printf("%v",users)
}
最后结果是 [{100} {200} {300}]
使用len()计算string的长度
内建的
len()函数返回的是byte的数量 java 案例
String s = "♥";
System.out.println(s.length());
go 案例
package main
import "fmt"
func main() {
data := "♥"
fmt.Println(len(data)) //prints: 3
}