go语言圣经电子书(go语言圣经是哪本书)

编码的实现环境是go1.15.6、LiteIDE X37.3、win7。是《Go语言圣经》 的练习及作业,个别代码有修改,仅供交流学习之用。
//Dup1打印在标准输入中出现多次的每一行的文本,并以其计数为前导。
package main import(‘ bufio ‘ ‘ fmt ‘ ‘ OS ‘)func main(){ counts :=make(map[string]int)input :=bufio .新闻扫描器(操作系统.标准输入)fmt .Println(‘inputs: ‘,输入)用于输入Scan() { //下面语句等价于//第:行=输入text()//counts[line]=counts[line]1 counts[input .Text()] }fmt .Println(‘counts: ‘,counts)//NOTE:忽略输入中的潜在错误第:行的Err ()范围计数{如果n 1 { fmt .Printf(‘wo:%d\t%s\n ‘,n,line) }}}//Dup2打印在输入中出现多次的行数和文本。
//它从标准输入设备或命名文件列表中读取。
package main import(‘ bufio ‘ ‘ fmt ‘ ‘ OS ‘)func main(){ counts :=make(map[string]int)files :=OS .args[1:]if len(files)==0 { count lines(OS .Stdin,counts)} else { for _,arg :=range files { f,err :=os .Open(arg) if err!=零{ fmt .Fprintf(os .Stderr,’ dup2: %v\n ‘,err) continue } countLines(f,counts) f.Close() }}for line,n :=范围计数{如果n 1 { fmt .Printf(‘后面用法:%d\t%s\n ‘,n,line) }}}func countLines(f *os .File,counts map[string]int){ input :=bufio .新闻扫描器//fmt .输入用于输入Scan() { //fmt .Println(‘前,计数)计数[输入. text()]如果计数[输入. text()]==counts[输入Text()] { fmt .fmt .Println(‘后,计数)//逐行显示文件内容} //注意:忽略输入中的潜在错误Err()}//Dup3一次性把文件的全部输入数据读到内存中,一次分割为多行,然后处理它们。
//引入了读文件函数(来自于io/ioutil包),其读取指定文件的全部内容,字符串。裂开函数把字符串分割成子串的切片。
package main import(‘ io/iou til ‘ ‘ fmt ‘ ‘ OS ‘ ‘ strings ‘)func main(){ counts :=make(map[string]int)for _,filename :=range os .Args[1:] { data,err :=ioutil .ReadFile(文件名)//ReadFile函数返回一个字节切片(字节片)如果呃!=零{ fmt .Fprintf(os .Stderr,’ dup3: %v\n ‘,err) continue } //ReadFile函数返回一个字节切片(字节片),必须把它转换为字符串,才能用弦乐。裂开分割对于_,第:行=范围字符串Split(string(data),’ \n’) { counts[line] }}for line,n :=范围计数{ fmt .Println(line,n) if n 1 { fmt .Printf(‘%d\t%s\n ‘,n,line) }}}//李沙育生成随机李沙育图形的GIF格式动画。
//执行语句:去运行李萨如out.gif
package main import(‘ image ‘ ‘ image/color ‘ ‘ image/gif ‘ ‘ io ‘ ‘ math ‘ ‘ math/rand ‘ ‘ OS ‘ ‘ time ‘)//var palette=[]color。颜色{颜色。白色,彩色。Black} //复合声明,生成切片var palette=[]color . color { color . rgba { 255,180,0,255},color.rgba {0,255,0,255 } }//将面板设置为绿色。RGBA{0xRR。0xGG,0xBB,0xff}const ( whiteIndex=0 //调色板中的第一种颜色blackIndex=1 //调色板中的下一种颜色)func main() { //图像的序列是确定的,除非我们使用当前时间播种伪随机数生成器。兰德。种子(时间。现在()。UTC()。UnixNano())李沙育(os。Stdout)}func lissajous(out io。Writer) { const ( cycles=5 //完整的x振荡转数完整的x振荡器转数RES=0.001//角度分辨率size=200//图像画布封面[-size.尺寸]图像画布封面[-尺寸.size]n frames=64//动画帧数delay=8///以10ms为单位的帧间延迟)freq :=rand . float 64()* 3.0//y振荡器的相对频率//生成struct结构的复合语句。结构是一组值或字段。在一个结构中设置不同的类型允许我们把它们作为一个统一的单元来处理。//内部字段将被设置为各自类型的默认零值。struct内部的变量可以通过点(.).anim :=gif . gif { LoopCount 3360 frames }//其内部变量loop count字段将被设置为nframes;相位:=0.0 //相位差//外环会循环64次,每次都会生成一个单独的动画帧。它生成一个201*201大小的图片,有两种颜色,白色和黑色。//默认情况下,所有像素都将被设置为零值(即调色板调色板中的第0个值)。这里我们将其设置为白色。每个外部循环生成一个新图片,并将一些像素设置为黑色。//它的结果将被附加在前一个结果之后。将结果附加到动画中帧列表的末尾,并将默认延迟值设置为80毫秒。对于I :=0;i nframesI {rect3360=image.rect (0,0,2 * size1,2 * size 1)img 3360=image . new palette(rect,palette)//在内循环中设置两个偏振值。x轴极化使用正弦函数。y轴极化也是正弦波,但它相对于X轴的极化是0-3的随机值,初始极化值为零值,随着动画的每一帧逐渐增大。//循环将一直运行到X轴,完成五个完整的循环。在每一步,它调用SetColorIndex将(x,y)点染成黑色。对于t :=0.0测试周期* 2 *数学。pi;t=res { x :=math。Sin(t) y :=数学。正弦(t *频率相位)img。SetColorIndex(size int(x * size 0.5),size int(y * size 0.5),Index)} phase=0.1 anim . delay=append(anim . delay,delay)anim . image=append(anim . image,img)}//循环结束后,将所有延迟值编码到GIF图片中,结果写入输出流。变量out的类型是io。Writer,支持将输出结果写入多个目标。gif。EncodeAll(out,anim)}//Fetch打印在URL中找到的内容。
//execute语句:go run fetch . go https://www.baidu.com
程序包主导入(‘ fmt ‘ ‘ io ‘//’ io/iou til ‘ ‘ net/http ‘ ‘ OS ‘ ‘ strings ‘)func main(){ for _,url :=range os .Args[1:] { ret :=字符串HasPrefix(url,’ https://’)if ret==false { URL=’ https://’ URL } resp,err :=http .获取(url) fmt .Println(‘http状态码:’,分别为。状态)如果呃!=零{ fmt .Fprintf(os .’标准错误’获取错误: %v\n ‘,err) os .Exit(1) } //b,err :=ioutil .全部读取(分别为.Body) //将上述代码利用木卫一.复制方法实现dst :=os .Stdout b,err :=io .复制(夏令时,分别Body) resp .身体。如果出错,则关闭()。=零{ fmt .Fprintf(os .标准错误,’ fetch:正在读取$s: %v\n ‘,url,err)操作系统.退出(1)fmt .Printf(‘%s ‘,b) }}//Fetchall并行获取统一资源定位器并报告它们的时间和大小。
//执行语句:去跑费查尔。去https://www.baidu.com
程序包主导入(‘ fmt ‘ ‘ io ‘ ‘ io/iou til ‘ ‘ net/http ‘ ‘ OS ‘ ‘ time ‘)func main(){ start :=time .现在()ch :=make(更改字符串)//用制造函数创建了一个传递线类型参数的_的频道,url :=操作系统范围Args[1:] { go fetch(url,ch) //创建一个戈鲁丁,并且让函数在这个不到异步执行http .得到方法为范围操作系统启动一个goroutine } .Args[1:] { fmt .fmt .printf(%)。2fs已用时间\n),时间。自(开始)。Seconds())}func fetch(url string,ch chan – string) { start :=time .Now() resp,err :=http .如果出错,则获取(网址)!=nil { ch – fmt .sprint(err)//开始一个go例程return } nbytes,err :=io .复制(直到.丢弃,分别. Body) //io .复制会把响应的身体内容拷贝到我知道.抛弃输出流中分别是.身体。Close() //如果犯罪就不要泄漏资源!=nil { ch – fmt .Sprintf(‘当读取%s: %v时,url,err) return } secs :=time .自(开始)。秒()ch – fmt .Sprintf(‘%.2sf } %s ‘,sec,nbytes,url)}//Server1是最小的“回声”服务器。
//执行语句:运行服务器1。去http://本地主机:8000
//在浏览器里输入http://本地主机:8000,观察结果。
包主导入(‘ fmt ‘ ‘ log ‘ ‘ net/http ‘)//主函数将所有发送到/路径下的请求和处理者函数关联起来,/开头的请求其实就是所有发送到当前站点上的请求,服务监听8000端口func main() { http .HandleFunc(‘/’,handler) //每个请求调用处理程序日志。致命(http .ListenAndServe(‘ localhost :8000 ‘,nil))}//发送到这个服务的”请求”是一个http .请求类型的对象,这个对象中包含了请求中的一系列相关字段,其中包括网址。//当请求到达服务器时,这个请求会被传给处理者函数来处理,函数会将/你好这个路径从请求的统一资源定位器中解析出来,然后把其发送到响应中,这里用标准输出流的fmt .Fprintf。//处理程序回显请求统一资源定位器的路径部分函数处理程序(带http .回复作者.请求){ fmt .Fprintf(w,’ URL .Path=%q\n ‘,r.URL.Path)}//Server2是最小的“回声”和计数器服务器。
//执行语句:运行服务器1。去http://本地主机:8000
//在浏览器里输入http://本地主机:8000,观察结果。
package import(‘ fmt ‘ ‘ log ‘ ‘ net/http ‘ ‘ sync ‘)varmusync . mutex var count int//main函数将所有发送到/path的请求与handler函数相关联,/开头的请求实际上是所有发送到当前站点的请求。该服务侦听端口8000。//这个服务器有两个请求处理函数,根据请求的url会调用不同的函数:对url /count的请求会调用counter函数,其他url会调用默认的处理函数。//如果您的请求模式以/结尾,则所有以此URL为前缀的URL都将与此规则匹配。func main() { http。HandleFunc(‘/’,handler) //每个请求调用处理程序http。HandleFunc(‘/count ‘,Counter)log . fatal(http . listenandserve(‘ localhost :8000 ‘,nil))}//发送到此服务的“请求”是http类型的对象。请求,它包含请求中的一系列相关字段,包括URL。//当请求到达服务器时,这个请求将被传递给处理函数进行处理。该函数将从请求的URL中解析路径/hello,然后将其发送到响应。这里,fmt。使用标准输出流的Fprintf。//处理程序回显请求URL的路径部分。//服务器每收到一个请求进行处理,就会启动另一个goroutine,这样服务器就可以同时处理多个请求。//但是在并发的情况下,如果真的同时有两个更新count的请求,那么这个值可能不会正确增加;这个程序可能会导致一个严重的错误:竞态条件(见9.1)。//为了避免这个问题,需要保证每次修改变量的时候最多只能有一个goroutine,所以所有修改count的行为都是通过调用mu来包装在中间的。Lock()和mu。解锁()。函数处理程序(w http。ResponseWriter。请求){ mu。Lock()计数mu。解锁()fmt。Fprintf(w,’ URL。Path=%q\n ‘,r.URL.Path)}//counter回显到目前为止的调用次数. func counter(w http。ResponseWriter。请求){ mu。Lock() fmt。Fprintf(w,’ count %d\ n ‘,count) mu。Unlock()}//Server3是显示请求参数的“echo”服务器。
//执行语句:gorunserver3.go。
//在浏览器中输入http://localhost:8000,观察结果。
package import(‘ fmt ‘ ‘ log ‘ ‘ net/http ‘ ‘ image ‘ ‘ image/color ‘ ‘ image/gif ‘ ‘ math ‘ ‘ math/rand ‘ ‘ io ‘)//main函数将所有发送到/path的请求与handler函数相关联,/开头的请求实际上是所有发送到当前站点的请求,service func main(){//handler :=func(w http。ResponseWriter。Request) { lissajous(w) } http。HandleFunc(‘/’,Handler)//每个请求调用Handler log . fatal(http . listenandserve(‘ localhost 33608000 ‘,nil))}//Handler函数将打印出请求的http头和请求的表单数据,这将更容易检查和调试该服务。//发送到该服务的“请求”是http类型的对象。请求,它包含请求中的一系列相关字段,包括URL。//当请求到达服务器时,这个请求将被传递给处理函数进行处理。该函数将从请求的URL中解析路径/hello,然后将其发送到响应。这里,fmt。使用标准输出流的Fprintf。//handler回显请求URL.func handler的路径部分(w http。ResponseWriter。请求){ fmt。Fprintf(w,’ %s %s %s \n ‘,r.Method,r.URL,r.Proto) for k,v :=range r.Header { fmt。Fprintf(w,’ Header[%q]=%q\n ‘,k,v) } fmt。Fprintf(w,’ Host=%q\n ‘,r.Host) fmt。Fprintf(w,Remoteaddr=% q \ n ‘,r . remote addr)//下面这里的ParseForm()嵌套在if语句中,也可以写成两行。将if与ParseForm结合可以使代码更简单,并限制err变量的范围。if err :=r . parse form();呃!=nil { log。Print(err) } for k,v :=range r.Form { fmtFprintf(w,’ Form[%q]=%q\n ‘,k,v) }}var palette=[]color。颜色{颜色。白色,彩色。Black} //复合语句,生成切片切片const(白色索引=0//调色板中的第一种颜色黑色索引=1//调色板中的下一种颜色)funclissajous(outio . writer){ const(cycles=5//完整的x振荡转数完整的x振荡转数RES=0.001//角度分辨率size=200//图像画布封面[-size.尺寸]图像画布封面[-尺寸.size]n frames=64//动画帧数delay=8///以10ms为单位的帧间延迟)freq :=rand . float 64()* 3.0//y振荡器的相对频率//生成struct结构的复合语句。结构是一组值或字段。在一个结构中设置不同的类型允许我们把它们作为一个统一的单元来处理。//内部字段将被设置为各自类型的默认零值。struct内部的变量可以通过点(.).anim :=gif . gif { LoopCount 3360 frames }//其内部变量loop count字段将被设置为nframes;相位:=0.0 //相位差//外环会循环64次,每次都会生成一个单独的动画帧。它生成一个201*201大小的图片,有两种颜色,白色和黑色。//默认情况下,所有像素都将被设置为零值(即调色板调色板中的第0个值)。这里我们将其设置为白色。每个外部循环生成一个新图片,并将一些像素设置为黑色。//它的结果将被附加在前一个结果之后。将结果附加到动画中帧列表的末尾,并将默认延迟值设置为80毫秒。对于I :=0;i nframesI {rect3360=image.rect (0,0,2 * size1,2 * size 1)img 3360=image . new palette(rect,palette)//在内循环中设置两个偏振值。x轴极化使用正弦函数。y轴极化也是正弦波,但它相对于X轴的极化是0-3的随机值,初始极化值为零值,随着动画的每一帧逐渐增大。//循环将一直运行到X轴,完成五个完整的循环。在每一步,它调用SetColorIndex将(x,y)点染成黑色。
对于t :=0.0测试周期* 2 *数学;t=res { x :=math .Sin(t) y :=数学。正弦(t *频率相位)img .SetColorIndex(size int(x * size 0.5),size int(y * size 0.5),blackIndex) } phase=0.1 anim .延迟=追加(动画。延迟,延迟)动画图像=追加(动画. Image,img) } //循环结束后所有的延迟值被编码进了GIF格式格式图片中,并将结果写入到输出流出去。这个变量是木卫一.作者类型,这个类型支持把输出结果写到很多目标。gif .EncodeAll(out,anim)}

好玩下载

设计坞下载,设计坞在线编辑教程

2024-2-6 19:25:54

好玩下载

dnf复仇者自带属性攻击吗 带什么属性攻击比较好

2023-8-18 7:17:26

购物车
优惠劵
搜索