学习笔记1

defer

defer func() {
    err := recover()
    if err != nil {
        fmt.Println("err=", err)
    }
}()

拷贝参数值 -> 入栈 -> 方法结束后执行

panic

panic("自定义错误")

range

for _, val := range arr {
	print(val)
}

随机数

rand.Intn(100)

切片(slice)

引用类型

var slice []int = make([]int, 0)
slice = append(slice, 10)
var slice2 = make([]int, 1)
copy(slice2, slice)

string 是一个byte数组

类型断言

v,err = a.()

func TypeJudge(items ...interface{}) {
	for k, v := range items {
		switch v.(type) {
		case bool:
			fmt.Printf("第%v个参数是 %T 类型, 值是%v", k, v, v)
		case int:
			fmt.Printf("第%v个参数是 %T 类型, 值是%v", k, v, v)
		}
	}
}

os.File

// ReadBuffer 带缓冲的读取
func ReadBuffer() {
	file, err := os.Open("test.txt")
	if err != nil {
		println("open file err, err=", err)
	}
	defer file.Close()
	reader := bufio.NewReader(file)
	for {
		str, err := reader.ReadString('\n')

		if err == io.EOF {
			println(str)
			break
		}
		print(str)
	}
}

// ReadOnce 一次性读取
func ReadOnce() {
	content, err := ioutil.ReadFile("test.txt")
	if err != nil {
		println("open file err, err=", err)
	}
	println(string(content))
}

// WriteFile 写入文件
func WriteFile() {
	file, err := os.OpenFile("test.txt", os.O_RDWR|os.O_CREATE, 6) // 0:没有任何权限 1:执行权限 2:写权限 3:写权限和执行权限 4:读权限 5:读权限和执行权限 6:读权限和写权限 7:读权限,写权限,执行权限
	if err != nil {
		println("open file err, err=", err)
		return
	}
	defer file.Close()
	str := "hello,Gardon\r\n"
	writer := bufio.NewWriter(file)
	for i := 0; i < 5; i++ {
		writer.WriteString(str)
	}
	writer.Flush()
}

// PathExists 判断目录是否存在
func PathExists(path string) (bool, error) {
	_, err := os.Stat(path)
	if err == nil {
		return true, nil
	}
	if os.IsNotExist(err) {
		return false, nil
	}
	return false, nil
}

// CopyFile 拷贝文件
// dst 目标文件
// src 源文件
func CopyFile(dst string, src string) (written int64, err error) {
	srcFile, err := os.Open(src)
	if err != nil {
		return 0, err
	}
	reader := bufio.NewReader(srcFile)
	defer srcFile.Close()

	dstFile, err := os.OpenFile(dst, os.O_WRONLY|os.O_CREATE, 6)
	if err != nil {
		return 0, err
	}
	writer := bufio.NewWriter(dstFile)
	defer dstFile.Close()
	return io.Copy(writer, reader)
}

命令行参数

//方式一
os.Args

//方式二
var user string
flag.StringVar(&user, "u", "", "用户名,默认为空")
flag.Parse()

sync.Mutex

管道

var intChan chan int
intChan = make(chan int, 10)
//关闭后不能写入,可以读取
close(intChan)
//只读
func(ch <-chan int)
//只写
func(ch chan<- int)
func main() {
	var intChan chan int
	intChan = make(chan int, 1)
	go func() {
		for i := 0; i < 100; i++ {
			intChan <- i
		}
		close(intChan)
	}()

	for v := range intChan {
		println(v)
	}
}
//死循环,危
for {
    select {
        case v := <-intChan:
        println(v)
        case v := <-stringChan:
        println(v)
        default:
        println("null")
    }
}
posted @ 2020-11-19 15:26  写入轮回  阅读(92)  评论(0)    收藏  举报