美文网首页
golang第三天

golang第三天

作者: 陌生人的头像 | 来源:发表于2019-03-01 01:11 被阅读0次

    测试代码

    • 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

    相关文章

      网友评论

          本文标题:golang第三天

          本文链接:https://www.haomeiwen.com/subject/ltxruqtx.html