09 2018 档案
摘要:首先需要安装一个命令行的工作,我们这里安装的是msys2,直接百度地址然后安装即可,我这里安装的是64位 安装好之后进行该软件源配置 修改mirrorlist.msys 修改mirrorlist.mingw32 修改mirrorlist.mingw64 使用msys安装软件 # pacman -S 
        阅读全文
                
摘要:package main import ( "fmt" "strconv" "net/http" "regexp" "strings" "os" ) //地址的规律 //第一页:https://www.pengfu.com/xiaohua_1.html //第二页:https://www.pengfu.com/xiaohua_2.html //...
        阅读全文
                
摘要:package main import ( "fmt" "strconv" "net/http" "os" "io" ) //百度贴吧的地址规律 //第一页:https://tieba.baidu.com/f?kw=%E7%BB%9D%E5%9C%B0%E6%B1%82%E7%94%9F&ie=utf-8(&pn=0) //第二页:https://ti...
        阅读全文
                
摘要:开发同事在提交代码到gitlab后,需要使用jenkins对代码进行构建,每次都需要手动操作会很繁琐,如果工程很大,那么也会浪费时间,gitlab的webhook功能,可以在代码提交后自动调用jenkins进行指定的项目构建 这里默认已经安装过了jenkins和gitlab 1、配置自己的项目,在项
        阅读全文
                
摘要:执行的结果,当有任何一个新用户登录了,其他所有的用户都会收到登录提醒,这里以ip加端口号的试做为一个唯一标识
        阅读全文
                
摘要:发送方 接收方 先开始发送方的服务后再开始接收方,在发送方输入发送的文件名
        阅读全文
                
摘要:package main import ( "net" "fmt" "os" ) func main() { //连接服务器 conn, err:=net.Dial("tcp", "127.0.0.1:8000") if err != nil { fmt.Println("net.Dial error = ", err) ...
        阅读全文
                
摘要:这段代码执行后不会打印任何东西,因为主协程和子协程的执行几乎是同时的,那么它的打印自然不会被执行。 还有一个重置的例子
        阅读全文
                
摘要:package main import ( "time" "fmt" ) func main() { <-time.After(2*time.Second) //这个方法表示的是在此等待2秒,并返回一个通道,很常用 fmt.Println("时间到。。。。") time.Sleep(2*time.Second) fmt.Println("时间...
        阅读全文
                
摘要:执行的结果为 timer的触发事件本来就是一次性的,来验证一下 如果不是一次性的,那么它应该不断的打印"时间到" 执行结果为 死锁了。。。。确实是一次性的
        阅读全文
                
摘要:var ch1 chan int //ch1是一个正常的channel,不是单向的 var ch2 chan <- float64 //ch2是一个单向的channel,只用于写float64的数据 var ch3 <- chan int //ch3是一个单向的channel,只用于读取int数据 
        阅读全文
                
摘要:并不是往通道里放多少次数据,就必须取多次少数据的(之前的例子都是放3次取3次,放10次取10次),我们可以做一个操作,当子协程没有新放入的时候,主协程不再去取,这就是关闭通道 执行结果
        阅读全文
                
摘要:有缓冲通道就是在有能力保留数据的通道,那么通道在满的时候或者通道是空的时候,存数据和取数据就会发生阻塞 执行的结果 在主协程等待的2秒内,子协程完全可以进行3个值的写入,因为循环只有3次,所以才会看到这样的结果,但如果主协程和子协程都循环10次呢 因为是并发的执行,所以在每次执行的结果并不是完全一样
        阅读全文
                
摘要:无缓冲通道(unbuffered channel)是指在接收前没有能力保存任何值的通道,在之前的例子中使用的都是无缓冲通道,需要注意的是,对于无缓冲通道而言,不管是往通道里写数据还是从通道里读数据,都会造成阻塞,并且通过len或者cap函数,得到的结果都为0,看下面的例子 执行的结果为 对于结果的理
        阅读全文
                
摘要:执行的结果 主协程和子协程近乎是同时执行,但是主协程因为有了管道的阻塞所以一直都不会执行打印 子协程在执行过自己的循环之后才会对管道进行一个写值,这时主协程一旦看到管道里有值就会立刻执行下面的程序
        阅读全文
                
摘要:goroutine运行在相同的地址空间,因此访问共享内存必须 做好同步。goroutine奉行通过通信来共享内存,而不是共享内存通信 它跟map一样,使用make来创建,它是一个引用 ,而不是值传递 make(chan Type, capacity) channel <- value //发送val
        阅读全文
                
摘要:这段代码执行的结果为 可以看到因为使用了并发它的打印是交叉了的,但是在实际的使用过程中,我们肯定是希望打印了person1的任务后再打印person2的任务,如何在使用并发的时候也能实现呢?下一篇,Channel的使用
        阅读全文
                
摘要:会发现打印结果里有大片的1或者0 那如果指定两个核呢 那么结果会很不一样 可以看得出来并发的时间片出让明显快了很多 那么4核 虽然看不出来啥,
        阅读全文
                
摘要:这里执行的结果为 但是如果在defer fmt.Println("cccccccccccc")的下面加一句return呢? 那么执行结果就是 return的意思是终止此函数,那么在终止前又有一个defer所以才会打印ccccccccc,那么dddddddddddd自然不会被执行 下面我们的goexi
        阅读全文
                
摘要:Gosched:让出CPU时间片 Goexit:退出当前的协程 GOMAXPROCS:设置使用最大的CPU数量(哇,牛逼了。。。) 如果程序写在这样的话,那么子协程是永远都不会被执行的,因为在go中向来都先执行主协程,这里主协程的循环明显比子协程要短,那么子协程永远都不会被执行 所以需要主协程让出时
        阅读全文
                
摘要:执行的结果 这里有一点需要注意的是:在一个程序启动时,其主函数即在一个单独的goroutine中运行,我们叫它main goroutine,新的goroutine会用go语句来创建,当主协程(main goroutine)退出时,其它的子协程也会退出,验证一下 执行结果 被调用的匿名函数是无限循环,
        阅读全文
                
摘要:并行:指在同一时刻,有多条指令在多个处理器上同时执行 并发:指在同一时刻只能有一条指令执行,但多个进程指令被快速的轮换执行,使得在宏观上具有多个进程同时执行的效果,但在微观上并不是同时执行的,只有把时间分成若干段,使多个进程快速交替的执行 对于go语言来说:它是从语言层面上来支持并发的,开发者不用去
        阅读全文
                
摘要:writestring的方式只适用于字符串的写入,对于十进制文件的写入只要使用write就可以了 然后使用命令进行exe文件的创建 然后直接运行程序就可以了
        阅读全文
                
摘要:执行结果 可以看到这里i=0后面的\n也被读取了
        阅读全文
                
摘要:首先写一个文件 执行完成后就会在程序的同目录生成一个demo.txt的文件,下面是文件的读 执行的结果为
        阅读全文
                
摘要:package main import ( "os" "fmt" ) func main() { os.Stdout.WriteString("are you ok?\n") //标准输出到屏幕 //os.Stdout.Close() 这里如果把注释放开就会导致不输出后程序退出 //os.Stdout是标准的设备文件,默认已经打开,用户可以直接使用 ...
        阅读全文
                
摘要:执行的结果为 这里可以看到,将json解析到map与解析到结构各有各的好处,在声明上,结构体需要声明结构类型,而map只需要一个make函数,但是一旦得到了值以后,结构休的方式可以直接操作,map方式需要一个一个进行断言判断才行
        阅读全文
                
摘要:执行的结果为 如果其中只想需打印结果体的下面两行,只需要修改结构体为 那么执行的结果自动的解析 为
        阅读全文
                
摘要:执行的结果为 这样可读性不太好,如果用于展示可以使用这个函数 执行的结果就会好看一些 当然这样的结果对于开发数据交换里可以会有问题,比如在Isok那一栏里就有可能别人需要的是“true",而不是true,那这样就可以使用_struct_tag方式 将结构体变更为这样的方式 执行的结果为
        阅读全文
                
摘要:对于字符串的操作的话最好使用strings这个包进行,strings不行的时候再使用正则表达式的包 而且strings这个包在字符串的处理上效率也高于正则 FindAllStringSubmatch(s, -1)里,这个-1表壳输出所有的匹配结果,也可以写成正数1,2表示 输入1个或者2个匹配的结果
        阅读全文
                
摘要:error的函数只是用来报一些低等级的错误,panic是报那些会导致程序崩溃的错误,但是会有一个问题就是panic也会导致程序中断 ,如果我们需要程序在报错之后继续运行并报出错误的信息 就需要使用到recover 这里传的值小于10的时候,正常打印 传的值大于10的时候则会打印异常日志并继续执行程序
        阅读全文
                
摘要:对于异常的处理,error表示的是不太致使的错误,但是如果遇到数组越界或者是空指针这种会导致程序崩溃无法恢复的错误时,就需要使用以panic了 我们不应该使用panic去报error的错误,而是只使用它去报那些致使的错误,当panic发生时,程序中断运行 运行的结果 在第二行的位置就会看到相应的报错
        阅读全文
                
摘要:这里打印的结果就很简单了,就是打印了两行的this sis a normal error 但是这里需要强调的是error里的New方法,可以看看源码 通过源码我们可以学习到一个规范的接口是怎么写成的 如果b为不为零输结果,如果为0则输出报错信息
        阅读全文
                
摘要:使用if实现断言 执行的结果为 如果是使用switch的方式进行断言的话就会像这样 执行结果
        阅读全文
                
摘要:package main import "fmt" //空接口的实际意义就在于在使用函数时,空接口可以接收任意类型的值,类似于python中的*args, **kwargs func xxx(arg ...interface{}) { } func main() { //定义一个空接口类型,在它里面没有任何的方法 //空接口是一个万能的类型,它能接收任意类型的值...
        阅读全文
                
摘要:完成了EL/FK的搭建之后,在kibana的主页只能看到默认的索引? 其实这个索引名字的设置是在logstash-smaple.conf(elk6.4)里的设置,比如我这样设置 那么重启了logstash的服务之后 ,我在kibana的控制面板里就能看到这样的一提示 再然后就可以点击next ste
        阅读全文
                
摘要:执行的结果为 方法表达式 执行结果 本人表达方式不好就不总结 了,看了下面的区别相信每个人都有自己的理解
        阅读全文
                
摘要:执行结果 这里不太好懂,记 一下我个人的理解,对于这种 我觉得相当于为结构体person绑定了一个setinfo或者printinfo的方法,如果有变量做了person的初始化,那么这个变量就有这些函数的属性 比如p为结构体person的初始化,那么就可以执行p.printinfo的函数,因为结构体
        阅读全文
                
摘要:找了很久才找到一个博客写得比较全面的,FrankDeng 系统环境:CentOS7 相关软件:node-v10.9.0.tar.gz、kibana-6.4.0-linux-x86_64.tar.gz、logstash-6.4.0.zip、elasticsearch-6.4.0.tar.gz,下载地址
        阅读全文
                
摘要:结构体是一种聚合的数据类型,它是由一系列相同类型或者不同类型的数据构成的数据集合,每个数据称为结构体的成员 1、结构体的初始化 执行结果
        阅读全文
                
摘要:随机生成四位数字,然后用户输入四位数字,然后根据提示一步步猜到随机数 执行结果
        阅读全文
                
摘要:本次执行的结果为 每次的执行结果都是不一样的
        阅读全文
                
摘要:执行的结果为: 通过结果就能看得出来,虽然s1对数组进行了截取,我们看到的结果也是截取的片段,但它只是显示出了我们想看到的,其它在它之后还是存在着原始切片的值的 而且通过对新的切片做的修改,原始的切片的元素也发生了变更 通过试验得到,不管a是数组还是切片,结果都是相同的
        阅读全文
                
摘要:比如这里要对一个数组进行切片 package main import "fmt" func main() { array := [...]int{10, 20, 30, 0, 0} //三个点也可以不写 slice := array[0:3:5] fmt.Println("slice = ", sl
        阅读全文
                
 
                     
                    
                 
                    
                
 
         浙公网安备 33010602011771号
浙公网安备 33010602011771号