Golang 百题(实战快速掌握语法)_1

整形转字符串类型

实验介绍

本实验将展示三种方法来实现整形类型转字符串类型。

知识点
  • strconv
  • fmt

Itoa 函数

代码实例

Go 语言中 strconv 包的 itoa 函数输入一个 int 类型,返回转换后的字符串。下面是一个例子。

package mainimport ("fmt""strconv"
)func main() {// 输入一个整数,返回一个字符串a := strconv.Itoa(1234)fmt.Printf("%T %v\n",a, a)// Output:// "string 1234"
}

将代码保存为/home/project/itoa.go文件。

运行程序

打开 WebIDE 的 Terminal 终端,输入以下命令查看输出:

go run itoa.go

图片描述

FormatInt

代码实例

formatInt 函数将输入的 int64 类型整形转换为指定进制的字符串。格式如下所示:

FormatInt(i int64, base int)
// 以下函数将i转为二进制后返回它的字符串类型
FormatInt(i int64, 2)

我们来看一个例子:

package mainimport ("strconv""fmt"
)
func main() {// 输入int64类型的1234,设置为10进制b := strconv.FormatInt(int64(1234), 10)fmt.Printf("%T %v\n", b, b)
}

将代码保存为/home/project/formatInt.go文件。

运行程序

打开 WebIDE 的 Terminal 终端,输入以下命令查看输出:

go run formatInt.go

图片描述

Sprintf 函数

代码实例

Go 语言中 fmt 包下的 Sprintf 函数根据格式说明符进行格式化,并返回结果字符串。

package mainimport ("fmt"
)func main() {// sprintf函数返回转换后的字符类型c := fmt.Sprintf("%d", 1234)fmt.Printf("%T %v\n", c, c)
}

将代码保存为/home/project/sprintf.go文件。

运行程序

打开 WebIDE 的 Terminal 终端,输入以下命令查看输出:

go run sprintf.go

图片描述

实验总结

本实验我们学习了 itoa,formatInt 和 sprintf 函数的用法,它们都是 Go 语言中非常重要的知识,需要大家好好掌握。

整形转切片

实验介绍

本实验将展示如何通过strconv.Itoastrings.Split来实现整数转切片。

知识点
  • strconv
  • strings

整形转数组

代码实例

Go 语言中 strconv 包的 itoa 函数输入一个 int 类型,返回转换后的字符串。而 strings 包下的 Split 函数输入一个字符串和分隔符,返回分割后的切片,下面是一个例子。

package mainimport ("fmt""strconv""strings"
)//  转换int整形为数组
func Digits(n int) []int {s := strconv.Itoa(n)d := make([]int, len(s))for i, l := range strings.Split(s, "") {d[i], _ = strconv.Atoi(l)}return d
}
func main() {r := Digits(123) // [1 2 3]fmt.Println(r)
}

该程序的功能:

  • 使用strconv.Itoa来转换给定的数字为字符串。
  • 使用strings.Split()来分割转换后的字符串,并返回一个字符串切片。

将代码保存为/home/project/digits.go文件。

运行程序

打开 WebIDE 的 Terminal 终端,输入以下命令查看输出:

go run digits.go

图片描述

实验总结

本实验学习了如何整形转为切片,下个实验我们将讲解如何连接集合的所有元素。

连接集合的所有元素

实验介绍

Go 原生支持字符串切片转字符串,但并不直接支持整形切片转字符 String,本实验我们将学习如何通过反射和fmt.Sprintf来实现整形切片转字符串。

知识点
  • slice
  • reflect
  • fmt.Sprintf

连接集合中的所有元素

代码实例

我们可以遍历整形切片的每个元素,然后把每个整形转为字符后添加分隔符后加入到字符串中,下面是一个例子。

package mainimport ("fmt""reflect""strings"
)func Join(params ...interface{}) string {arr, sp := reflect.ValueOf(params[0]),reflect.ValueOf(params[1]).String()ars := make([]string, arr.Len())for i := 0; i < arr.Len(); i++ {ars[i] = fmt.Sprintf("%v", arr.Index(i))}return strings.Join(ars, sp)}
func main() {w := Join([]int{1, 2, 3}, ".")fmt.Printf("%T %v", w, w)
}

该程序的功能:

  • 使用relect.ValueOf()来获取数组或切片,还有字符串。

  • make 用来创建一个合适长度的字符串切片。

  • 使用 for 循环遍历每个元素,fmt.Sprintf()用来整形转字符类型。

  • strings.Join()的功能是使用提供的分隔符来组合字符串

将代码保存为/home/project/join.go文件。

运行程序

打开 WebIDE 的 Terminal 终端,输入以下命令查看输出:

go run join.go

图片描述

实验总结

本实验我们学习了如何连接集合中的所有元素,下个实验我们将学习如何获得两个集合中的所有组合。

两个集合的所有组合

实验介绍

本实验将展示如何创建两个集合的所有集合,集合均为没有重复值。

知识点
  • for

两个集合的所有组合

代码实例

为了获得两个集合的所有集合,我们可以先创建一个二维切片列表,然后 for 循环输出并且保存到二维切片列表中。

package mainimport ("fmt""reflect"
)func XProduct(params ...interface{}) [][]interface{} {a, b := reflect.ValueOf(params[0]), reflect.ValueOf(params[1])l := a.Len() * b.Len()r := make([][]interface{}, l)for i := 0; i < l; i++ {r[i] = []interface{}{a.Index(i % a.Len()).Interface(),b.Index((i / a.Len()) % b.Len()).Interface(),}}return r}
func main() {r := XProduct([]int{1, 2}, []string{"a", "b"}) // [[1 a] [2 a] [1 b] [2 b]]fmt.Println(r)
}

该程序的功能:

  • 使用reflect.ValueOf()来获取切片或者数组。
  • 使用 for 循环来填充生成的结果

将代码保存为/home/project/xProduct.go文件。

运行程序

打开 WebIDE 的 Terminal 终端,输入以下命令查看输出:

go run xProduct.go

图片描述

实验总结

本实验我们学习了如何通过反射和 for 循环获得两个集合的所有组合。下个实验我们将学习如何删除切片的重复元素。

删除切片重复元素

实验介绍

本实验将展示如何删除切片的重复元素。

知识点
  • range
  • append
  • make

删除切片重复元素

代码实例

删除重复切片的一个方法是创建一个字典来存储字符是否已经出现过。下面是一个例子。

package mainimport ("fmt"
)func DedupeInts(arr []int) []int {m, uniq := make(map[int]bool), make([]int, 0)for _, v := range arr {if _, ok := m[v]; !ok {m[v], uniq = true, append(uniq, v)}}return uniq
}
func main() {date := []int{1, 2, 1, 2, 3, 3, 4}res := DedupeInts(date)fmt.Printf("date: %v\nres: %v",date, res)
}

该程序的功能:

  • 使用 make 创建一个 map 来存储数据。
  • for 循环遍历传入切片的每一个元素,并进行判断是否在 map 中重复,如果不重复则加入到 map 中。

将代码保存为/home/project/dedupeInts.go文件。

运行程序

打开 WebIDE 的 Terminal 终端,输入以下命令查看输出:

go run dedupeInts.go

图片描述

实验总结

本实验我们使用 map 类型来删除切片的重复元素。下个实验我们将学习如何得到集合频率的映射。

集合频率的映射

实验介绍

本实验将展示统计集合中数值出现的频率并返回。

知识点
  • for
代码实例

为了获得集合中数值的频率,我们可以创建一个 map 函数来存储,下面是具体的实现。

package mainimport "fmt"func FrequenciesInt(arr []int) map[int]int {m := make(map[int]int)for _, v := range arr {if f, ok := m[v]; ok {m[v] = f + 1} else {m[v] = 1}}return m
}
func FrequenciesFloat64(arr []float64) map[float64]int {m := make(map[float64]int)for _, v := range arr {if f, ok := m[v]; ok {m[v] = f + 1} else {m[v] = 1}}return m
}
func FrequenciesBool(arr []bool) map[bool]int {m := make(map[bool]int)for _, v := range arr {if f, ok := m[v]; ok {m[v] = f + 1} else {m[v] = 1}}return m
}
func FrequenciesString(arr []string) map[string]int {m := make(map[string]int)for _, v := range arr {if f, ok := m[v]; ok {m[v] = f + 1} else {m[v] = 1}}return m
}
func main() {i := []int{1, 1, 3, 1, 4}s := []string{"a", "d", "a", "d", "c"}r1 := FrequenciesInt(i)r2 := FrequenciesString(s)fmt.Println(i, "\t", r1, "\n", s, "\t", r2)
}

该程序的功能:

  • 使用make来创建一个字典。
  • 使用 for 循环来遍历给定的切片,对每个元素进行判断,如果是没有出现过则赋值为 1,否则进行累加。

将代码保存为/home/project/frequencies.go文件。

运行程序

打开 WebIDE 的 Terminal 终端,输入以下命令查看输出:

go run frequencies.go

图片描述

实验总结

本实验我们学习了获得集合频率的映射,下个实验我们将要学习返回带有索引的切片。

返回带有索引的切片

实验介绍

本实验将通过创建 map 实现返回带有索引的切片。

知识点
  • map
  • reflect
代码实例

我们可以使用 for 循环来遍历输入的参数,然后把索引和相关的值保存到 map 中。下面是一个例子。

package mainimport ("fmt""reflect"
)func WithIndex(params ...interface{}) map[int]interface{} {arr, m := reflect.ValueOf(params[0]),make(map[int]interface{})for i := 0; i < arr.Len(); i++ {m[i] = arr.Index(i).Interface()}return m
}
func main() {r := WithIndex([]int{4, 3, 2, 1}) // [0:4 1:3 2:2 3:1]fmt.Println(r)
}

该程序的功能:

  • 使用reflect.ValueOf()来获取切片或者数组。
  • 使用 for 循环来遍历数组,把每个元素添加到字典中。

将代码保存为/home/project/withIndex.go文件。

运行程序

打开 WebIDE 的 Terminal 终端,输入以下命令查看输出:

go run withIndex.go

图片描述

实验总结

本实验我们学习了如何返回带有索引的切片,下个实验我们将学习如何使用函数参数的用法。

复制指定条件的切片

实验介绍

本实验将展示对输入的切片进行判断,并且返回符合指定条件的切片。

知识点
  • range
  • 函数参数
  • append
代码实例

Go 中可以把函数作为参数传入,所有我们可以对传入的参数进行遍历,每个元素通过传入的函数来进行判断,下面是一个例子。

package mainimport "fmt"func FilterInt(arr []int, f func(int) bool) []int {arf := make([]int, 0)for _, v := range arr {if f(v) {arf = append(arf, v)}}return arf
}
func FilterFloat64(arr []float64, f func(float64) bool) []float64 {arf := make([]float64, 0)for _, v := range arr {if f(v) {arf = append(arf, v)}}return arf
}
func FilterBool(arr []bool, f func(bool) bool) []bool {arf := make([]bool, 0)for _, v := range arr {if f(v) {arf = append(arf, v)}}return arf
}
func FilterString(arr []string, f func(string) bool) []string {arf := make([]string, 0)for _, v := range arr {if f(v) {arf = append(arf, v)}}return arf
}
func main() {intCheck := func(x int) bool { return x > 1 }fmt.Println(FilterInt([]int{0, 2}, intCheck)) // [2]float64Check := func(x float64) bool { return x > 0.5 }fmt.Println(FilterFloat64([]float64{0.0, 1.0}, float64Check)) // [1.0]boolCheck := func(x bool) bool { return x }fmt.Println(FilterBool([]bool{false, true}, boolCheck)) // [true]stringCheck := func(x string) bool { return len(x) > 1 }fmt.Println(FilterString([]string{"", "hi"}, stringCheck)) // ["hi"]
}

该程序的功能:

  • 创建一个条件函数,来作为参数传入主功能函数中
  • for 循环遍历每个元素,使用传入的函数进行判断

将代码保存为/home/project/filterInt.go文件。

运行程序

打开 WebIDE 的 Terminal 终端,输入以下命令查看输出:

go run filterInt.go

图片描述

实验总结

本实验我们学习了如何通过函数传递条件函数,会返回符合指定条件的切片,下个实验我们同样使用函数参数,来实现返回集合中满足指定条件的第一个元素。

返回集合中符合条件的第一个元素

实验介绍

本实验将展示如何返回给定集合中符合条件的第一个元素。

知识点
  • for
代码实例

我们可以使用 for 循环来遍历输入的集合,然后通过传入的判断函数来进行判断,下面是一个具体例子。

package mainimport "fmt"func FindIndexInt(arr []int, f func(int) bool) int {for i, v := range arr {if f(v) {return i}}return -1
}
func main() {r1 := FindIndexInt([]int{1, 1, 2}, func(x int) bool { return x%2 == 0 }) // 2fmt.Println(r1)
}

该程序的功能:

  • 使用 range 来正向遍历切片,用 f 函数来判断是否符合条件。

将代码保存为/home/project/findIndexInt.go文件。

运行程序

打开 WebIDE 的 Terminal 终端,输入以下命令查看输出:

go run findIndexInt.go

图片描述

实验总结

本实验我们学习了 如何通过参数来获得条件函数,然后返回集合中符合条件的第一个元素,下一个我们将做一个简单的挑战。

课后习题:

打印当前版本

挑战介绍

打印当前环境中 Go 的版本信息

挑战内容

本次挑战中,你需要打印当前 WebIDE 中 Go 的版本信息。

输出参考格式为:

Go version: 1.xx

挑战要求

  • 请自行在环境主目录/home/project下新建 print_version.go 文件,并复制示例代码到文件中完成补充。补充完整后点击「提交检测」,系统将会给出判定结果。

图片描述

示例代码

package mainimport ("fmt""runtime"
)
func main(){}

小贴士

  • 可以使用 runtime 包中的函数打印当前 Go 的版本。
  • 为了保证能被系统准确检测,挑战中的每一句话都非常重要,请仔细阅读。跳跃式浏览易导致挑战无法按要求通过。
参考代码

以下内容仅供参考,为了能有更好的学习效果,请尽量按自己的想法来完成挑战。

package mainimport ("fmt""runtime"
)func main() {fmt.Printf("Go version: %s\n", runtime.Version())
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/web/28671.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

wps 二维数据转转一维度数据

HSTACK(TOCOL(C2:H2&A3:A8),TOCOL(B3:B8&C1:H1),TOCOL(C3:H8))

网络编程(三)UDP TFTP协议

文章目录 一、 UDP&#xff08;一&#xff09;概述&#xff08;二&#xff09;流程 二、收发函数&#xff08;一&#xff09;recvfrom&#xff08;二&#xff09;sendto 三、实现一个简单的udp服务端和客户端四、实现tftp客户端协议 一、 UDP &#xff08;一&#xff09;概述 …

Spring-事件

Java 事件/监听器编程模型 设计模式-观察者模式的拓展 可观察者对象(消息发送者) Java.util.Observalbe观察者 java.util.Observer 标准化接口(标记接口) 事件对象 java.util.EventObject事件监听器 java.util.EventListener public class ObserverDemo {public static vo…

Spring IoC【控制反转】DI【依赖注入】

文章目录 控制反转&#xff08;IoC&#xff09;依赖注入&#xff08;DI&#xff09;IoC原理及解耦IoC 容器的两种实现BeanFactoryApplicationContext IoC 是 Inversion of Control 的简写&#xff0c;译为“控制反转”&#xff0c;它不是一门技术&#xff0c;而是一种设计思想&…

解放双手 免费AI编程工具---Fitten Code

前言 相信大家在2023年后听说了不少的关于人工智能的话题&#xff0c;对于这种全新的科技又好奇又恐惧&#xff0c;今天我们来见识下一个在VS中的AI代码工具吧。 配置环境 安装 首先我们找到管理扩展&#xff0c;然后再搜索Fitten Code下载安装。 我这里已经下好过了&#xff…

MacOS系统搭建Appium自动化测试环境

一、Appium简介 1.1 什么是APPium APPium是一个开源测试自动化框架,适用于原生、混合或移动Web应用程序的自动化测试工具。 APPium使用WebDriver协议驱动iOS、Android等应用程序。 APPium具有如下特点: 支持多平台(Android、iOS等)。支持多语言(python、java、ruby、js…

【每日刷题】Day67

【每日刷题】Day67 &#x1f955;个人主页&#xff1a;开敲&#x1f349; &#x1f525;所属专栏&#xff1a;每日刷题&#x1f34d; &#x1f33c;文章目录&#x1f33c; 1. 23. 合并 K 个升序链表 - 力扣&#xff08;LeetCode&#xff09; 2. 1189. “气球” 的最大数量 - …

网络安全 - kali 安装

文章目录 Kali 安装教程下载镜像 Kali 安装教程 下载镜像 kali-images安装包下载_开源镜像站-阿里云 (aliyun.com) 下载对应镜像&#xff08;自己挑&#xff09; 打开本机 cmd 并输入一下命令 ipconfig找到 NAT 模式的 IP 地址并从虚拟机中 ping

6月15号作业

使用手动连接&#xff0c;将登录框中的取消按钮使用第二中连接方式&#xff0c;右击转到槽&#xff0c;在该槽函数中&#xff0c;调用关闭函数 将登录按钮使用qt4版本的连接到自定义的槽函数中&#xff0c;在槽函数中判断ui界面上输入的账号是否为"admin"&#xff0…

一键掌控,4G红外插座引领智能生活新潮流!

随着科技的进步&#xff0c;市场上出现大量带语音、手机APP可控制的智能插座产品&#xff0c;由此可看出客户对产品的功能要求也越来越高&#xff0c;追求舒适的体验感&#xff0c;特别是对操控性的要求越来越高。但是目前大部分红外遥控插座均为WiFi插座类型&#xff0c;WiFi红…

gitlab仓库中用git bash生成不是默认路径的ssh秘钥

使用命令 ssh-keygen -t rsa -b 4096 -C "your_emailexample.com" 会在默认路径生成秘钥&#xff0c;&#xff08;C:\Users\用户\.ssh\&#xff09; 想要修改默认路径使用如下命令&#xff1a; ssh-keygen -t rsa -b 4096 -C "your_emailexample.com"…

【吉林大学Java程序设计】第11章:网络编程技术

第11章&#xff1a;网络编程技术 1.网络协议概述2.网络类及应用&#xff08;1&#xff09;InetAddress类&#xff08;2&#xff09;ServerSocket类&#xff08;3&#xff09;Socket类基于TCP的点对点通信基于TCP的点对面通信&#xff08;一个服务器&#xff0c;多个客户端&…

如何通过数据库与AI实现以图搜图?OceanBase向量功能详解

OceanBase支持向量数据库的基础能力 当前&#xff0c;数据库存储系统与人工智能技术的结合&#xff0c;可以体现在两个主要的应用方向上。 一、近似搜索。它利用大语言模型&#xff08;LLM&#xff0c;简称大模型&#xff09;的嵌入&#xff08;embedding&#xff09;技术&am…

环境科学SCI期刊,IF=8.5+,期刊发展势头非常好

一、期刊名称 SUSTAINABLE DEVELOPMENT 二、期刊简介概况 期刊类型&#xff1a;SCI 学科领域&#xff1a;环境科学与生态学 影响因子&#xff1a;8.562 中科院分区&#xff1a;2区 三、期刊征稿范围 该期刊是一本跨学科出版物&#xff0c;旨在解决和讨论实现可持续发展的…

硬件开发笔记(十八):核心板与底板之间的连接方式介绍说明:板对板连接器

若该文为原创文章&#xff0c;转载请注明原文出处 本文章博客地址&#xff1a;https://hpzwl.blog.csdn.net/article/details/139663096 长沙红胖子Qt&#xff08;长沙创微智科&#xff09;博文大全&#xff1a;开发技术集合&#xff08;包含Qt实用技术、树莓派、三维、OpenCV…

最佳Google Chrome扩展和Mozilla Firefox扩展自动解决验证码

在这个信息爆炸的时代&#xff0c;我们每天都要处理大量的在线内容&#xff0c;验证码已成为不可避免的挑战。尽管它们旨在保护网站安全&#xff0c;但也常常成为我们获取信息的障碍。那么&#xff0c;有没有更简单的方法绕过这些验证码呢&#xff1f;答案是肯定的。通过使用一…

算法之分治

分而治之 分治法所能解决的问题一般具有以下几个特征&#xff1a; 1) 该问题的规模缩小到一定的程度就可以容易地解决 2) 该问题可以分解为若干个规模较小的子问题&#xff0c;即该问题具有最优子结构性质 3) 利用该问题分解出的子问题的解可以合并为该问题的解 4) 该问题所分…

ubuntu gitlab 部署 私有git库

我的版本 ubuntu-22.04.2-live-server-amd64 GitLab 社区版 v17.0.1 注意剩余硬盘需要3GB以上 一、更新软件 sudo apt update二、gitLab 需要一些依赖项才能正常运行 sudo apt install -y curl openssh-server ca-certificates postfix1、出现邮件 选择 “Internet Site”并…

数据库原理(关系数据库规范化理论)——(4)

一、关系模式规范化的必要性 1.关系可能出现的问题 数据冗余大&#xff1b;插入异常&#xff1b;删除异常&#xff1b;更新异常&#xff1b; 2.关系模式应满足的基本要求 元组的每个分量必须是不可分割的数据项&#xff1b;数据库中的数据冗余应尽可能少&#xff1b;不要出…

Neo4j Desktop界面认识以及数据库备份与还原

Neo4j Desktop界面认识以及数据库备份与还原 neo4j 版本信息&#xff1a;Neo4j Desktop Version 1.5.9&#xff1b;neo4j 5.12.0 系统信息&#xff1a;windows 11 Neo4j Desktop 界面 每个 Project 下可以有多个 DBMS&#xff0c;而每个 DBMS 中默认有 system 和 neo4j (def…