继续浏览精彩内容
慕课网APP
程序员的梦工厂
打开
继续
感谢您的支持,我会继续努力的
赞赏金额会直接到老师账户
将二维码发送给自己后长按识别
微信支付
支付宝支付

Go中接口的类型查询:comma-ok断言和switch测试

holdtom
关注TA
已关注
手记 1703
粉丝 240
获赞 991


// code_026_go_antic_package project main.go

<pre name="code" class="plain">package main

import (

    "container/list"

    "fmt"

    "math/rand" //备注2:随机数的包

    "sync" //备注1:异步任务的包

    "time"

)

type INFO struct {

    lock sync.Mutex   //备注1:异步锁

    Name string

    Time int64

}

var List *list.List = list.New() //备注3:初始化List变量

func main() {

    var Info INFO

    go func() {

        for i := 0; i < 5; i++ {

            time.Sleep(time.Duration(1e9 * int64(rand.Intn(5))))//备注2:随机数rand.Intn(5)<---> 1e9为科学计数法,1 * 10的9次方

            Info.lock.Lock()//备注1:上锁

            Info.Name = fmt.Sprint("Name", i) //备注: Sprint采用默认格式将其参数格式化,串联所有输出生成并返回一个字符串。如果两个相邻的参数都不是字符串,会在它们的输出之间添加空格

            Info.Time = time.Now().Unix() + 3

            Info.lock.Unlock()//备注1:解锁

            List.PushBack(Info)//备注3:List表达式调用

        }

    }()

    go Getgoods()

    select {}

}

func Getgoods() {

    for {

        time.Sleep(1e8)

        for List.Len() > 0 {//备注3:List对象的使用

            N, T := List.Remove(List.Front()).(INFO).name() //备注3:List对象的使用和value.(type)的妙用

            now := time.Now().Unix() //备注4:获取当前日期转换后的时间戳

            if T-now <= 0 {

                fmt.Println(N, T, now)

                continue

            }

            time.Sleep(time.Duration((T - now) * 1e9))

            fmt.Println(N, T, now)

        }

    }

}

func (i INFO) name() (string, int64) {

    return i.Name, i.Time

}

©著作权归作者所有:来自51CTO博客作者ck_god的原创作品,如需转载,请注明出处,否则将追究法律责任


打开App,阅读手记
0人推荐
发表评论
随时随地看视频慕课网APP