1、多变量初始化
data, i := [3]int{0, 1, 2}, 0
2、占位符
特殊只写变量 "_",用于忽略值占位。
3、直接.用指针访问..目标对象成员
package main
import "fmt"
func main() {
type data struct{ a int }
var d = data{1234}
var p *data
p = &d
fmt.Printf("%p, %v\n", p, p.a) // 直接.用指针访问..目标对象成员,.无须转换。
}
输出:
0x2101ef018, 1234
4、代码格式
package main
func main() {
x := 1
if n := "abc"; x > 0 { // 初始化语句未必就是定义变量,比如 println("init") 也是可以的。
println(n[2])
} else if x < 0 { // 注意 else if 和 else 左⼤大括号位置。
println(n[1])
} else {
println(n[0])
}
}
5、常见的循环
package main
func main() {
s := "abc"
for i, n := 0, len(s); i < n; i++ { // 常⻅见的 for 循环,⽀支持初始化语句。
println(s[i])
}
n := len(s)
for n > 0 { // 替代 while (n > 0) {}
println(s[n]) // 替代 for (; n > 0;) {}
n--
}
for { // 替代 while (true) {}
println(s) // 替代 for (;;) {}
}
}
6、
捕获函数 recover 只有在延迟调用内直接调用才会终止错误。方法内都不行
7、错误捕获
package main
import "errors"
//ErrDivByZero 错误描述
var ErrDivByZero = errors.New("division by zero")
func div(x, y int) (int, error) {
if y == 0 {
return 0, ErrDivByZero
}
return x / y, nil
}
func main() {
switch z, err := div(10, 0); err {
case nil:
println(z)
case ErrDivByZero:
panic(err)
}
}
8、值拷贝行为会造成性能问题,通常会建议使用 slice,或数组指针。
9、
Slice读写操作实际目标是底层数组,只需注意索引号的差别。会修改原数组。
s := []int{0, 1, 2, 3, 4, 5, 6, 7, 8, 9}
s1 := s[2:5] // [2 3 4]
s2 := s1[2:6:7] // [4 5 6 7]
10、
*p是给p取值,p一定是一个指针,如果p是指针,那么*p就是指针的对象。
如果p是一个指针的指针,那么*p就是指针。
&d是给d取地址,如果d是对象,那么&d就是指针,
如果d是指针,那么&d就是指针的指针。
11、
[]中为空就是切片,不为空就是数组
mySlice3 := []int{1, 2, 3, 4, 5}//切片
mySlice3 := [5]int{1, 2, 3, 4, 5}//数组
12、自定义错误
package main
import (
"fmt"
"os"
)
func main() {
fi, err := Stat("a.txt")
if err != nil {
if e, ok := err.(*PathError); ok {
// 获取PathError类型变量e中的其他信息并处理
//fmt.Printf("错误:%s", e6.Err)
_ = e
}
} else {
fmt.Println(fi.Name())
}
_ = fi
}
//Stat 查询文件信息
func Stat(name string) (fi os.FileInfo, err error) {
file, err := os.Stat(name)
if err != nil {
return nil, &PathError{"stat", name, err}
}
return file, nil
}
//PathError 自定义错误
type PathError struct {
Op string
Path string
Err error
}
//Error 获取自定义错误
func (e *PathError) Error() string {
return e.Op + " " + e.Path + ": " + e.Err.Error()
}
13、
interface{}相当于C#的Object
14、
json.Marshal()序列化
json.Unmarshal()反序列化

浙公网安备 33010602011771号