学习笔记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")
}
}
浙公网安备 33010602011771号