当前位置: 首页 > news >正文

Go基础知识学习-习题题解

这里给出来官方教程中部分题目的答案,都是自己练习的时候写的,可以参考来提供思路。

当然了,练习还是最好自己写,要不对相关的知识点不可能理解透彻。

Exercise: Loops and Functions

package mainimport ("fmt"
)func Sqrt(x float64) float64 {z:=1.0for i:=0;i<10;i++{z -= (z*z - x) / (2*z)fmt.Println(z)}return z
}func main() {fmt.Println(Sqrt(2))
}

Exercise: Slices

package mainimport ("golang.org/x/tour/pic"
)func Pic(dx, dy int) [][]uint8 {pic := make([][]uint8, dx)for x := range pic {pic[x] = make([]uint8, dy)for y := range pic[x] {pic[x][y] = uint8(255)}}return pic
}func main() {pic.Show(Pic)
}

Exercise: Maps

package mainimport ("golang.org/x/tour/wc""strings"
)func WordCount(s string) map[string]int {dataMap:=make(map[string]int)strArr:=strings.Fields(s)for _,x:= range strArr{dataMap[x]+=1}return dataMap
}func main() {wc.Test(WordCount)
}

Exercise: Fibonacci closure

package mainimport "fmt"// fibonacci is a function that returns
// a function that returns an int.
func fibonacci() func() int {le:=-1ri:=1return func()int{fib:=le+rile=riri=fibreturn fib}
}func main() {f := fibonacci()for i := 0; i < 10; i++ {fmt.Println(f())}
}

Exercise: Stringers

package mainimport "fmt"type IPAddr [4]byte// TODO: Add a "String() string" method to IPAddr.func (ip IPAddr) String() string{return fmt.Sprintf("%d.%d.%d.%d", ip[0], ip[1], ip[2], ip[3])
}func int2str(a byte) string{return string(int(a+'0'))
}func main() {hosts := map[string]IPAddr{"loopback":  {127, 0, 0, 1},"googleDNS": {8, 8, 8, 8},}for name, ip := range hosts {fmt.Printf("%v: %v\n", name, ip)}
}

Exercise: Errors

package mainimport ("fmt"
)type ErrNegativeSqrt float64func (e ErrNegativeSqrt) Error() string{return fmt.Sprintf("cannot Sqrt negative number: %v",float64(e))
}func Sqrt(x float64) (float64, error) {if x < 0{return 0,ErrNegativeSqrt(x)}z := 1.0for i := 0; i < 10; i++ {z -= (z*z - x) / (2 * z)}return z, nil
}func main() {fmt.Println(Sqrt(2))fmt.Println(Sqrt(-2))
}

Exercise: Readers

 package mainimport "golang.org/x/tour/reader"type MyReader struct{}// TODO: Add a Read([]byte) (int, error) method to MyReader.func (MyReader) Read(buf []byte)(int,error){buf[0]='A'return 1,nil
}func main() {reader.Validate(MyReader{})
}

Exercise: rot13Reader


import ("io""os""strings"
)type rot13Reader struct {r io.Reader
}func (rot13 *rot13Reader) Read(buf []byte) (int, error) {count, err := rot13.r.Read(buf)if count > 0 && err == nil {for i, c := range buf {if c >= 'a' && c <= 'z'{buf[i] = 'a'+(c-'a' + 13) % 26}else if c >= 'A' && c <= 'Z'{buf[i] = 'A'+(c-'A' + 13) % 26}}}return count, err
}func main() {s := strings.NewReader("Lbh penpxrq gur pbqr!")r := rot13Reader{s}io.Copy(os.Stdout, &r)
}

Exercise: Images

package mainimport ("golang.org/x/tour/pic""image/color""image"
)type Image struct{}func (Image) Bounds() image.Rectangle{return image.Rect(0,0,233,233)
}func (Image) ColorModel() color.Model{return color.RGBAModel;
}func (Image) At(x,y int) color.Color{return color.RGBA{uint8(x),uint8(x+y),uint8(x-y),uint8(y)}
}func main() {m := Image{}pic.ShowImage(m)
}

Exercise: Equivalent Binary Trees

package mainimport ("fmt""golang.org/x/tour/tree"
)/*type Tree struct {Left  *TreeValue intRight *Tree
}
*/// Walk walks the tree t sending all values
// from the tree to the channel ch.
func Walk(t *tree.Tree, ch chan int) {if t != nil {Walk(t.Left, ch)ch <- t.ValueWalk(t.Right, ch)}
}// Same determines whether the trees
// t1 and t2 contain the same values.
func Same(t1, t2 *tree.Tree) bool {ch1 :=make(chan int,10)ch2:=make(chan int,10)go Walk(t1,ch1)go Walk(t2,ch2)for i:=0;i<10;i++{if <-ch1 != <- ch2{return false}}return true
}func main() {ch:=make(chan int,10)go Walk(tree.New(1), ch)for i := 0; i < 10; i++ { // Read and print 10 values from the channelfmt.Println(<-ch)}fmt.Println(Same(tree.New(1), tree.New(1))) // should print truefmt.Println(Same(tree.New(1), tree.New(2))) // should print false
}

Exercise: Web Crawler

package mainimport ("fmt""sync"
)type Fetcher interface {// Fetch returns the body of URL and// a slice of URLs found on that page.Fetch(url string) (body string, urls []string, err error)
}type urlCache struct{mux sync.Mutexurls map[string]bool
}
func (cache *urlCache) add(url string){cache.mux.Lock()cache.urls[url] = truecache.mux.Unlock()
}func (cache *urlCache) isVisited(url string) bool{cache.mux.Lock()defer cache.mux.Unlock()return cache.urls[url]
}var visited = urlCache{urls: make(map[string]bool)}// Crawl uses fetcher to recursively crawl
// pages starting with url, to a maximum of depth.
func Crawl(url string, depth int, fetcher Fetcher,wg *sync.WaitGroup) {defer wg.Done()// TODO: Fetch URLs in parallel.// TODO: Don't fetch the same URL twice.// This implementation doesn't do either:if depth <= 0||visited.isVisited(url) {return}visited.add(url)body, urls, err := fetcher.Fetch(url)if err != nil {fmt.Println(err)return}fmt.Printf("found: %s %q\n", url, body)for _, u := range urls {wg.Add(1)go Crawl(u, depth-1, fetcher,wg)}return
}func main() {var wg sync.WaitGroupwg.Add(1)go Crawl("https://golang.org/", 4, fetcher,&wg)wg.Wait()
}// fakeFetcher is Fetcher that returns canned results.
type fakeFetcher map[string]*fakeResulttype fakeResult struct {body stringurls []string
}func (f fakeFetcher) Fetch(url string) (string, []string, error) {if res, ok := f[url]; ok {return res.body, res.urls, nil}return "", nil, fmt.Errorf("not found: %s", url)
}// fetcher is a populated fakeFetcher.
var fetcher = fakeFetcher{"https://golang.org/": &fakeResult{"The Go Programming Language",[]string{"https://golang.org/pkg/","https://golang.org/cmd/",},},"https://golang.org/pkg/": &fakeResult{"Packages",[]string{"https://golang.org/","https://golang.org/cmd/","https://golang.org/pkg/fmt/","https://golang.org/pkg/os/",},},"https://golang.org/pkg/fmt/": &fakeResult{"Package fmt",[]string{"https://golang.org/","https://golang.org/pkg/",},},"https://golang.org/pkg/os/": &fakeResult{"Package os",[]string{"https://golang.org/","https://golang.org/pkg/",},},
}

 

相关文章:

Go基础知识学习-习题题解

这里给出来官方教程中部分题目的答案&#xff0c;都是自己练习的时候写的&#xff0c;可以参考来提供思路。 当然了&#xff0c;练习还是最好自己写&#xff0c;要不对相关的知识点不可能理解透彻。 Exercise: Loops and Functions package mainimport ("fmt" )fu…...

MyBatis中的XML实现和动态SQL实现

文章目录 一、XML实现1.1增1.2删1.3查1.4改 二、XML方式实现动态SQL2.1if标签2.2trim标签2.3where标签2.4set标签2.5foreach标签2.6include标签和sql标签 一、XML实现 先在新建的XML文件中写入如下内容&#xff1a; <?xml version"1.0" encoding"UTF-8&qu…...

clickhouse计算前后两点间经纬度距离

问题 计算如图所示前后两点经纬度的距离&#xff1f; 方法 1、用开窗函数将如图所示数据下移一行 selectlongitude lon1,latitude lat1,min(longitude) over(order by time1 asc rows between 1 PRECEDING and 1 PRECEDING) lon2,min(latitude) over(order by time1 asc row…...

【51单片机】DS18B20(江科大)

一、DS18B20温度传感器 1.DS18B20介绍 DS18B20是一种常见的数字温度传感器,其控制命令和数据都是以数字信号的方式输入输出,相比较于模拟温度传感器,具有功能强大、硬件简单、易扩展、抗干扰性强等特点 测温范围 :- 55℃到125℃ 通信接口:1-Wire(单总线) 其它特征:可形成…...

Windows平台git clone文件路径太长报错

问题描述 在Windows下拉取一些比较大的开源项目经常会提示文件路径太长&#xff08;filename too long&#xff09;&#xff0c;然后死活都不成功 解决办法 1.配置git git config --system core.longpaths true2.修改文件C:\Program Files\Git\etc\gitconfig&#xff08;需…...

中科大计网学习记录笔记(十):P2P 应用

前言&#xff1a; 学习视频&#xff1a;中科大郑烇、杨坚全套《计算机网络&#xff08;自顶向下方法 第7版&#xff0c;James F.Kurose&#xff0c;Keith W.Ross&#xff09;》课程 该视频是B站非常著名的计网学习视频&#xff0c;但相信很多朋友和我一样在听完前面的部分发现信…...

Python算法题集_LRU 缓存

Python算法题集_LRU 缓存 题146&#xff1a;LRU 缓存1. 示例说明2. 题目解析- 题意分解- 优化思路- 测量工具 3. 代码展开1) 标准求解【队列字典】2) 改进版一【有序字典】3) 改进版二【双向链表字典】 4. 最优算法 本文为Python算法题集之一的代码示例 题146&#xff1a;LRU …...

局部加权回归

局部加权回归&#xff08;Local Weighted Regression&#xff09;是一种非参数回归方法&#xff0c;用于解决线性回归模型无法很好拟合非线性数据的问题。它通过给不同的样本赋予不同的权重&#xff0c;使得在拟合模型时更加关注靠近目标点附近的样本数据。 局部加权回归的基本…...

国内国外最好的数据恢复软件评测,哪种数据恢复软件最有效?

随着数字和商业格局在多个领域不断发展&#xff0c;变得更加依赖数据&#xff0c;威胁数据的努力也同样存在。 计算机病毒、勒索软件和恶意软件是导致数据丢失的主要威胁&#xff0c;可能会让您的组织陷入停机或严重影响您的工作效率。而解决这个问题的方法就是数据恢复。 什么…...

bugku 1

Flask_FileUpload 文件上传 先随便传个一句话木马 看看回显 果然不符合规定 而且发现改成图片什么的都不行 查看页面源代码&#xff0c;发现提示 那应该就要用python命令才行 试试ls 类型要改成图片 cat /flag 好像需要密码 bp爆破 根据提示&#xff0c;我们先抓包 爆破 …...

C++ bfs再探迷宫游戏(五十五)【第二篇】

今天我们用bfs解决迷宫游戏。 1.再探迷宫游戏 前面我们已经接触过了迷宫游戏&#xff0c;并且学会了如何使用 DFS 来解决迷宫最短路问题。用 DFS 求解迷宫最短路有一个很大的缺点&#xff0c;需要枚举所有可能的路径&#xff0c;读入的地图一旦很大&#xff0c;可能的搜索方案…...

【Spring原理进阶】SpringMVC调用链+JSP模板应用讲解

&#x1f389;&#x1f389;欢迎光临&#x1f389;&#x1f389; &#x1f3c5;我是苏泽&#xff0c;一位对技术充满热情的探索者和分享者。&#x1f680;&#x1f680; &#x1f31f;特别推荐给大家我的最新专栏《Spring 狂野之旅&#xff1a;底层原理高级进阶》 &#x1f680…...

23种计模式之Python/Go实现

目录 设计模式what?why?设计模式&#xff1a;设计模式也衍生出了很多的新的种类&#xff0c;不局限于这23种创建类设计模式&#xff08;5种&#xff09;结构类设计模式&#xff08;7种&#xff09;行为类设计模式&#xff08;11种&#xff09; 六大设计原则开闭原则里氏替换原…...

Qt可视化大屏布局

科技大屏现在非常流行&#xff0c;这里分享一下某个项目的大屏布局&#xff08;忘了源码是哪个博主的了&#xff09; 展示 这个界面整体是垂直布局&#xff0c;分为两个部分&#xff0c;标题是一个部分&#xff0c;然后下面的整体是一个layout布局&#xff0c;为另外一部分。 l…...

re:从0开始的CSS之旅 14. 显示模式的切换

1. 两个属性 display 属性可以用于转换元素的显示模式 可选值&#xff1a; block 转换为块元素 inline 转换为行内元素 inline-block 转换为行内块元素 none 不显示元素&#xff0c;并且不占用元素的位置 visibility 属性用于设置元素是否显示 可选值&#xff1a; visible 显示…...

K8S系列文章之 [Alpine基础环境配置]

用户手册&#xff1a;Alpine User Handbook 官方WIKI&#xff1a;Alpine Linux WIKI 安装 安装的实际逻辑是通过 setup-alpine​ 脚本去调用其他功能的脚本进行配置&#xff0c;可以通过 vi 查看脚本。如果某个部分安装失败&#xff0c;可退出后单独再次执行。通过镜像文件&a…...

单页404源码

<!doctype html> <html> <head> <meta charset"utf-8"> <title>简约 404错误页</title><link rel"shortcut icon" href"./favicon.png"><style> import url("https://fonts.googleapis.co…...

MySQL-运维

一、日志 1.错误日志 错误日志是MySQL中最重要的日志之一&#xff0c;它记录了当mysql启动和停止时&#xff0c;以及服务器在运行过程中发生任何严重错误时的相关性息。当数据库出现任何故障导致无法正常使用时&#xff0c;建议首先查看此日志。 该日志是默认开启的&#xf…...

Waymo数据集下载与使用

在撰写论文时&#xff0c;接触到一个自动驾驶数据集Waymo Dataset 论文链接为&#xff1a;https://arxiv.org/abs/1912.04838v7 项目链接为&#xff1a;https://github.com/waymo-research/waymo-open-dataset 数据集链接为&#xff1a;https://waymo.com/open waymo提供了两种…...

蓝桥杯每日一题----素数筛

素数筛 素数筛的作用是筛选出[2,N]范围内的所有素数&#xff0c;本次主要讲解两种方法&#xff0c;分别是埃氏筛和欧拉筛。证明时会提到唯一分解定理&#xff0c;如果不知道的小伙伴可以先去学一学&#xff0c;那我们开始啦&#xff01; 1.埃氏筛 主要思想&#xff1a;当找到…...

多云管理“拦路虎”:深入解析网络互联、身份同步与成本可视化的技术复杂度​

一、引言&#xff1a;多云环境的技术复杂性本质​​ 企业采用多云策略已从技术选型升维至生存刚需。当业务系统分散部署在多个云平台时&#xff0c;​​基础设施的技术债呈现指数级积累​​。网络连接、身份认证、成本管理这三大核心挑战相互嵌套&#xff1a;跨云网络构建数据…...

Leetcode 3576. Transform Array to All Equal Elements

Leetcode 3576. Transform Array to All Equal Elements 1. 解题思路2. 代码实现 题目链接&#xff1a;3576. Transform Array to All Equal Elements 1. 解题思路 这一题思路上就是分别考察一下是否能将其转化为全1或者全-1数组即可。 至于每一种情况是否可以达到&#xf…...

通过Wrangler CLI在worker中创建数据库和表

官方使用文档&#xff1a;Getting started Cloudflare D1 docs 创建数据库 在命令行中执行完成之后&#xff0c;会在本地和远程创建数据库&#xff1a; npx wranglerlatest d1 create prod-d1-tutorial 在cf中就可以看到数据库&#xff1a; 现在&#xff0c;您的Cloudfla…...

【CSS position 属性】static、relative、fixed、absolute 、sticky详细介绍,多层嵌套定位示例

文章目录 ★ position 的五种类型及基本用法 ★ 一、position 属性概述 二、position 的五种类型详解(初学者版) 1. static(默认值) 2. relative(相对定位) 3. absolute(绝对定位) 4. fixed(固定定位) 5. sticky(粘性定位) 三、定位元素的层级关系(z-i…...

【ROS】Nav2源码之nav2_behavior_tree-行为树节点列表

1、行为树节点分类 在 Nav2(Navigation2)的行为树框架中,行为树节点插件按照功能分为 Action(动作节点)、Condition(条件节点)、Control(控制节点) 和 Decorator(装饰节点) 四类。 1.1 动作节点 Action 执行具体的机器人操作或任务,直接与硬件、传感器或外部系统…...

华为OD机试-食堂供餐-二分法

import java.util.Arrays; import java.util.Scanner;public class DemoTest3 {public static void main(String[] args) {Scanner in new Scanner(System.in);// 注意 hasNext 和 hasNextLine 的区别while (in.hasNextLine()) { // 注意 while 处理多个 caseint a in.nextIn…...

AspectJ 在 Android 中的完整使用指南

一、环境配置&#xff08;Gradle 7.0 适配&#xff09; 1. 项目级 build.gradle // 注意&#xff1a;沪江插件已停更&#xff0c;推荐官方兼容方案 buildscript {dependencies {classpath org.aspectj:aspectjtools:1.9.9.1 // AspectJ 工具} } 2. 模块级 build.gradle plu…...

push [特殊字符] present

push &#x1f19a; present 前言present和dismiss特点代码演示 push和pop特点代码演示 前言 在 iOS 开发中&#xff0c;push 和 present 是两种不同的视图控制器切换方式&#xff0c;它们有着显著的区别。 present和dismiss 特点 在当前控制器上方新建视图层级需要手动调用…...

(一)单例模式

一、前言 单例模式属于六大创建型模式,即在软件设计过程中,主要关注创建对象的结果,并不关心创建对象的过程及细节。创建型设计模式将类对象的实例化过程进行抽象化接口设计,从而隐藏了类对象的实例是如何被创建的,封装了软件系统使用的具体对象类型。 六大创建型模式包括…...

【Linux】自动化构建-Make/Makefile

前言 上文我们讲到了Linux中的编译器gcc/g 【Linux】编译器gcc/g及其库的详细介绍-CSDN博客 本来我们将一个对于编译来说很重要的工具&#xff1a;make/makfile 1.背景 在一个工程中源文件不计其数&#xff0c;其按类型、功能、模块分别放在若干个目录中&#xff0c;mak…...