为了账号安全,请及时绑定邮箱和手机立即绑定

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

标签:
Go


// 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的原创作品,如需转载,请注明出处,否则将追究法律责任


点击查看更多内容
TA 点赞

若觉得本文不错,就分享一下吧!

评论

作者其他优质文章

正在加载中
  • 推荐
  • 评论
  • 收藏
  • 共同学习,写下你的评论
感谢您的支持,我会继续努力的~
扫码打赏,你说多少就多少
赞赏金额会直接到老师账户
支付方式
打开微信扫一扫,即可进行扫码打赏哦
今天注册有机会得

100积分直接送

付费专栏免费学

大额优惠券免费领

立即参与 放弃机会
意见反馈 帮助中心 APP下载
官方微信

举报

0/150
提交
取消