小强_博客园  

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()反序列化

posted on 2017-07-24 16:42  小强-X  阅读(126)  评论(0编辑  收藏  举报