博客

  • 【Go】生成随机数random

    程序代码如下:
    package main
    
    import (
        "fmt"
        "math/rand"
        "time"
    )
    
    func main() {
        num1 := rand.Int() // 返回非负伪随机int类型数据
        fmt.Println(num1)
        for i := 0; i < 10; i++ {
            num := rand.Intn(10) // 生成指定范围的随机数[0, 10)
            fmt.Println(num)
        }
        // 注,只要不设置种子,每次运行产生的随机数固定
        rand.Seed(1)          // 设置随机种子
        num2 := rand.Intn(10) // 生成随机数
        fmt.Println("--->", num2)
        // 可以通过设置时间作为随机数种子,使得每次产生的随机数不同
        t1 := time.Now()
        fmt.Println(t1)        //  查看时间
        fmt.Printf("%T\n", t1) // 查看变量t1的数据类型
        // 获取时间戳(当前时间距离1970 1-1 00:00:00之间的数值)
        timeStamp1 := t1.Unix()     // 秒s为单位
        timeStamp2 := t1.UnixNano() // 纳秒ms为单位
        fmt.Println(timeStamp1)
        fmt.Println(timeStamp2)
        // 真正生成随机数过程
        // step1:设置种子数,可以设置时间戳
        rand.Seed(time.Now().UnixNano())
        for i:=1;i<10;i++{
            // step2:生成随机数
            fmt.Println("--->", rand.Intn(100))
        }
        // 获取指定范围内的随机数,如获取[15, 48]之间的随机数
        num3:= rand.Intn(34) + 15  // n:为两数之差+1,然后加上起始数值即可
        fmt.Println(num3)
    
    }
    

  • Go 类型断言 .(type)

    关键词:interface,switch
    类型断言 x.(T) 其实就是判断 T 是否实现了 x 接口,如果实现了,就把 x 接口类型具体化为 T 类型;而 x.(type) 这种方式的类型断言,就只能和 switch 搭配使用,因为它需要和多种类型比较判断,以确定其具体类型。

    x.(type) 使用示例:

    func checkType(args …interface{}) {  
        for _, arg := range args {  
            switch arg.(type) {  
                case int:  
                    fmt.Println(arg, "is an int value.")  
                case string:  
                    fmt.Println(arg, "is a string value.")  
                case int64:  
                    fmt.Println(arg, "is an int64 value.")  
                default:  
                    fmt.Println(arg, "is an unknown type.")  
            }  
        }  
    }  

    注意:x.(type), x.(T) 中的 x 都必须是接口类型 interface{},否则会编译失败。

    var num interface{} = 1  //  num.(int) 可以执行
    var num int = 1 // num.(int) 编译失败 invalid type assertion: num.(int) (non-interface type int on left)

    x.(T) 使用示例:

    v, ok := x.(int)

    如果 ok 为 true,则 x 转为 int 类型并保存为 v。
    ————————————————
    版权声明:本文为CSDN博主「shida_csdn」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
    原文链接:https://blog.csdn.net/shida_csdn/article/details/88057989

  • GO语言中的单引号、双引号和反引号

    1.单引号
    单引号在go语言中表示golang中的rune(int32)类型,单引号里面是单个字符,对应的值为改字符的ASCII值。

    1. func main() {

    2.     a := 'A'

    3.     fmt.Println(a)

    4. }


    输出:

    1. random@random-wz MINGW64 /c/GOPATH/src/Test

    2. $ go run main.go

    3. 65


    2.双引号
    在go语言中双引号里面可以是单个字符也可以是字符串,双引号里面可以有转义字符,如\n、\r等,对应go语言中的string类型。

    1. func main() {

    2.     a := "Hello golang\nI am random_wz."

    3.     fmt.Println(a)

    4. }


    输出:

    1. random@random-wz MINGW64 /c/GOPATH/src/Test

    2. $ go run main.go

    3. Hello golang

    4. I am random_wz.


    3.反引号
    反引号中的字符表示其原生的意思,在单引号中的内容可以是多行内容,不支持转义。

    1. func main() {

    2.     a := `Hello golang\n:

    3. I am random_wz.

    4. Good.`

    5.     fmt.Println(a)

    6. }


    输出:

    1. random@random-wz MINGW64 /c/GOPATH/src/Test

    2. $ go run main.go

    3. Hello golang\n:

    4. I am random_wz.

    5. Good.


    可以看到\n并没有被转义,而是被直接作为字符串输出。


    ————————————————
    版权声明:本文为CSDN博主「random_w」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
    原文链接:https://blog.csdn.net/random_w/article/details/101544069

  • file_put_contents(): Only 0 of 23634 bytes written, possibly out of free disk space,磁盘空间不足

    访问网站系统报错:

    file_put_contents(): Only 0 of 23634 bytes written, possibly out of free disk space。

    意思就是磁盘空间不足,df -lh 查了一下,确实是发现磁盘满了,想想应该是日志文件太大了,所以删除项目的runtime下的文件释放空间就可以了。

    1、当使用df -lh命令查看磁盘使用情况时发现满了

    2、这时候我们需要使用命令du -sh * 看哪个目录占用空间大,比如 cd /或者 cd /usr ,逐级别排查

    3、直接删除日志文件释放空间就可以了

     文章来源:https://www.copylian.com/technology/409.html

  • python获取当前时间的用法

    首先看下,datetime的使用

    import datetime

    >>> print datetime.datetime.now()
    2017-07-15 15:01:24.619000


    格式化时间

    >>> print datetime.datetime.now().strftime("%Y-%m-%d %H:%M:%S")
    2017-07-15 15:01:35

    >>> print datetime.datetime.now().strftime("%Y-%m-%d %H:%M")
    2017-07-15 15:01

    >>> print datetime.datetime.now().strftime("%Y%m%d")
    20170715


    多加一天

    >>> print (datetime.datetime.now()+datetime.timedelta(days=1)).strftime("%Y-%m-%
    d %H:%M:%S")
    2017-07-16 15:12:42
    >>>


    多加一小时

    >>> print (datetime.datetime.now()+datetime.timedelta(hours=1)).strftime("%Y-%m-
    %d %H:%M:%S")
    2017-07-15 16:10:43
    >>>


    多加一分钟

    >>> print (datetime.datetime.now()+datetime.timedelta(minutes=1)).strftime("%Y-%
    m-%d %H:%M:%S")
    2017-07-15 15:12:56
    >>>

    时间的三种存在方式:时间对象,时间字符串,时间戳。

    (1)字符串转datetime:

    >>> string = '2014-01-08 11:59:58'

    >>> time1 = datetime.datetime.strptime(string,'%Y-%m-%d %H:%M:%S')

    >>> print time1

    2014-01-08 11:59:58

    (2)datetime转字符串:

    >>> time1_str = datetime.datetime.strftime(time1,'%Y-%m-%d %H:%M:%S')

    >>> time1_str

    '2014-01-08 11:59:58'

    (3)时间戳转时间对象:

    >>>time1 = time.localtime()

    >>>time1_str = datetime.datetime.fromtimestamp(time1)

    格式参数:

    %a 星期几的简写

    %A 星期几的全称

    %b 月分的简写

    %B 月份的全称

    %c 标准的日期的时间串

    %C 年份的后两位数字

    %d 十进制表示的每月的第几天

    %D 月/天/年

    %e 在两字符域中,十进制表示的每月的第几天

    %F 年-月-日

    %g 年份的后两位数字,使用基于周的年

    %G 年分,使用基于周的年

    %h 简写的月份名

    %H 24小时制的小时

    %I 12小时制的小时

    %j 十进制表示的每年的第几天

    %m 十进制表示的月份

    %M 十时制表示的分钟数

    %n 新行符

    %p 本地的AM或PM的等价显示

    %r 12小时的时间

    %R 显示小时和分钟:hh:mm

    %S 十进制的秒数

    %t 水平制表符

    %T 显示时分秒:hh:mm:ss

    %u 每周的第几天,星期一为第一天 (值从0到6,星期一为0)

    %U 第年的第几周,把星期日做为第一天(值从0到53)

    %V 每年的第几周,使用基于周的年

    %w 十进制表示的星期几(值从0到6,星期天为0)

    %W 每年的第几周,把星期一做为第一天(值从0到53)

    %x 标准的日期串

    %X 标准的时间串

    %y 不带世纪的十进制年份(值从0到99)

    %Y 带世纪部分的十制年份

    %z,%Z 时区名称,如果不能得到时区名称则返回空字符。

    %% 百分号

  • PowerShell脚本执行出错解决方法

     

    PowerShell脚本执行出错

    今天在在vscode的终端使用nodemon打开服务器express脚本的时候,显示报错信息如下:
    nodemon : 无法加载文件 C:\Users…,因为在此系统上禁止运行脚本。有关详细信息,请参阅 https:/go.microsoft.com/fwlink/
    在这里插入图片描述
    于是上网查了一下资料,发现有可能是在计算机上启动PowerShell 时,执行策略很可能是 Restricted(默认策略)
    在终端里输入get-executionpolicy可以查看此时的执行策略。
    在这里插入图片描述

    Restricted
    Windows 客户端计算机的默认执行策略。
    允许单独的命令,但不允许脚本。
    阻止运行所有脚本文件,包括格式设置和配置文件 (.ps1xml) 、模块脚本文件 (.psm1) 和 PowerShell 配置文件 (.ps1) 。

    我们可以更改执行策略

    RemoteSigned
    Windows server 计算机的默认执行策略。
    脚本可以运行。
    要求来自受信任的发布者的脚本和配置文件的数字签名,这些脚本和配置文件是从 internet 下载的,其中包括电子邮件和即时消息程序。
    不需要在本地计算机上编写的脚本上的数字签名,也不需要从 internet 下载。
    如果未对脚本进行阻止,则运行从 internet 下载的脚本,而不是未签名的脚本,例如通过使用 Unblock-File cmdlet。
    从 internet 以外的源运行未签名脚本的风险,以及可能是恶意的签名脚本。

    win+R输入powershell再按下ctrl+shift+enter即可以管理员身份打开powershell,键入命令Set-ExecutionPolicy -ExecutionPolicy RemoteSigned
    再输入Y回车即可
    在这里插入图片描述
    更多信息参考about_Execution_Policies
    ————————————————
    版权声明:本文为CSDN博主「PenculX」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
    原文链接:https://blog.csdn.net/laplacepoisson/article/details/120908991

  • vue实例和组件实例有什么区别?

    vue实例和组件实例有什么区别?感觉他们看起来很相似。

    答:vue组件本质就是vue实例。

    不过它们一点点区别就是:

    组件的data必须是一个function,非组件data可以是一个对象。另外,组件没有el挂载点这个选项。

    那为什么会有这两点区别呢?

    因为,组件是可复用的 Vue 实例,注意“可复用”。如果data是一个对象或者有el挂载点,那就不是可复用的了。

    根实例是什么?

    在vue项目中,一般只有一个VUE实例在main.js中定义,叫做根组件,其他都是vue组件。其实都是vue实例,但为了方便区分。根组件之外,components中还有很多小组件。

     

    附录:

    el: 实例接管页面某一部分dom的渲染

    data: 存放数据

    实例结果的DOM中有插值表达,会去data中找数据

    v-on:click/@click 来绑定事件

    Vue实例除了根实例外,每个组件也是一个实例

    通过$调用出vm实例的属性

    $后跟的都是Vue的实例属性/方法

    创建vue实例
    var vm = new Vue({
    el:'#root', //定义这个vue实例接管的dom的最外层标签
    data:{
    msg:'hello', //data存放数据
    },
    methods:{
    handleClick:function(){}, // 事件方法
    }
    }
    v-on:事件绑定,简写@,@click='handleClick'
    vue中的每个组件也是一个vue实例
    定义组件
    Vue.compontent('组件名',{
    template:'<div>*</div>'
    })

     

  • Vue生命周期函数

    生命周期函数就是在某个时间点自动执行的函数

    初始化事件&生命周期 =>

    自动执行beforeCreate()

    初始化注入&外部绑定 =>

    自动执行created()

    是否有el?

    有=> 是否有template?

    没有=> 将el的外层HTML作为template

    有=> 解析并将模版放入渲染函数

    模版和数据结合即将挂在到页面的一瞬间之前 =>

    自动执行beforeMount()

    挂在到页面之后 =>

    自动执行mounted

        在数据发生改变,DOM重新渲染之前 =>

        自动执行beforeUpdated

        DOM重新渲染之后

        自动执行updated

    组件即将被销毁时 =>

    自动执行beforeDestroy

    组件被销毁时 =>

    自动执行destroyed

    Vue生命周期函数,并不在methods里

  • Vue 模板语法与计算属性,方法,监听

    一、vue模板语法

    1. 插值表达式: {{}}

    2. v-text =“name”:name就不再是字符串了,而是一个js的表达式

      就是innerHTML,显示name变量所对应的值,可以将数据变量显示在页面上,实际和插值表达式{{}}是一样的

    3. v-html = “name”: 让innerHTML和name做一个数据绑定

    4. 区别:v-text 会转义输出,不会有任何样式改变(插值表达式也是)

                v-html 不会进行转义,输出带样式效果

    5. v-指令后面的内容为js表达式,除了写js表达式还可以在后面加上字符串(整体也是一个js表达式)

      例如:<div v-html ="name + ' Lee '"></div>

      插值表达式也一样,例如:{{name + ‘ Lee ’}}

    二、计算属性,方法,监听

    computed: 计算属性,有缓存。如果其依赖的数据项没有发生改变就不会重新计算,否则如果其依赖的数据项发生了改变就会触发里面的方法,与其无关的数据变化不会触发计算属性。

    methods:方法, 没有缓存,使用时要加上()实现方法的调用,只要数据发生变化就会触发,不管数据就没有关系。(因为是函数的调用,又没有缓存,每调用一次就重新执行一次)

    watch:监听器,有缓存。功能与computed相似,但是代码复杂。

    如果同一个功能,上述三个都可以实现,那么推荐computed,结构简单,性能好。