golang第三天

测试代码

  • hello.go
package main

import (
    "errors"
    "math"
    "fmt"
    "time"
    "io/ioutil"
)

/**
 * errors.New 可返回一个错误信息:
 */
func MySqrt(f float64) (float64, error) {
    if f < 0 {
        return 0, errors.New("f can not be negative number.")
    }
    return math.Sqrt(f), nil
}



type DivideError struct {
    dividee int
    divider int
}

/**
实现error接口中的Error()方法
 */
func (dError *DivideError) Error() string {
    return ""
}

/**
 * 检查错误,存在就抛出
 */
func checkError(e error) {
    if e != nil {
        panic(e)
    }
}


/**
 * 程序目标: 学习go的错误处理机制,goroutine(暂时理解为go的协程),channel(通信管道,双向), 文件的读写
 * make(chan type):声明type类型的管道
 * 管道会堵塞,直到有数据读取或写出
 */
func main() {

    /**
     * panic关键字抛出异常,类似java的throws
     */
    rs, err := MySqrt(2)
    if err != nil {
        panic(err)
    }
    fmt.Println(rs)


    /**
     * go关键字,启动go协程运行该片段代码
     */
    go printMsg("hello")
    printMsg("world")


    /**
     * 管道接收数据
     */
    nums := []int{1,10,-3,20,-5}
    intc := make(chan int)

    go sum(nums[:2], intc)
    go sum(nums[2:], intc)
    sum1, sum2 := <-intc, <-intc        //读取数据 <-chan
    fmt.Println(sum1+sum2)

    go setVal(200, intc)
    fmt.Println(<-intc)


    /**
     * 读取数据
     */
    data, err := ioutil.ReadFile("tmp/hello.iml")
    checkError(err)
    fmt.Println(string(data))


    /**
     *写入数据, 不存在文件,自动创建
     */
    msg := []byte("hello,world")
    err2 := ioutil.WriteFile("tmp/hello.txt", msg, 0777)
    checkError(err2)
}

/**
 * 写入数据到管道 chan <- value
 */
func setVal(val int, c chan int) {
    time.Sleep(time.Second*2)
    c<-100
}



func printMsg(msg string)  {
    for idx:=0; idx<1; idx++ {
        time.Sleep(20*time.Millisecond)
        fmt.Println(msg)
    }
}

/**
 * 总和写入到管道
 */
func sum(nums []int, intc chan int)  {
    sum := 0
    for _, num := range nums {
        sum += num
    }
    intc<-sum   //送数据到通道中
}

总结

  • 错误机制,协程,管道,文件IO

打卡时间: 1:11

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 轻量级线程:协程 在常用的并发模型中,多进程、多线程、分布式是最普遍的,不过近些年来逐渐有一些语言以first-c...
    Tenderness4阅读 6,400评论 2 10
  • 原文链接:https://github.com/EasyKotlin 在常用的并发模型中,多进程、多线程、分布式是...
    JackChen1024阅读 10,775评论 3 23
  • 环境搭建 Golang在Mac OS上的环境配置 使用Visual Studio Code辅助Go源码编写 VS ...
    陨石坠灭阅读 5,796评论 0 5
  • 必备的理论基础 1.操作系统作用: 隐藏丑陋复杂的硬件接口,提供良好的抽象接口。 管理调度进程,并将多个进程对硬件...
    drfung阅读 3,595评论 0 5
  • 人世间最伟大的爱莫过于父母对子女的爱,我一直都这么认为的! 只不过母亲跟父亲表达爱的方式不一样,仅此而已,今天...
    理解背后的深意阅读 789评论 0 0