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

news2024/11/29 9:32:49

整形转字符串类型

实验介绍

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

知识点
  • strconv
  • fmt

Itoa 函数

代码实例

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

package main

import (
    "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 main

import (
    "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 main

import (
    "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 main

import (
    "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 main

import (
    "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 main

import (
    "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 main

import (
    "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 main

import "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 main

import (
    "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 main

import "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 main

import "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 }) // 2
    fmt.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 main

import (
    "fmt"
    "runtime"
)
func main(){

}

小贴士

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

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

package main

import (
    "fmt"
    "runtime"
)

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

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

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

相关文章

el-select filterable模糊搜索在iOS手机上无法弹出软键盘,解决方案

前提&#xff1a; el-select filterable模糊搜索在iOS手机上无法弹出软键盘&#xff0c;在手机上使用时&#xff0c;iOS手机&#xff0c;该组件无法唤起软键盘&#xff0c;导致没法进行模糊搜素。 于是。开始去找原因&#xff0c;发现主要是因为 组件中&#xff0c;input上有一…

分析GIS在疾病传播模型和公共卫生决策中的作用

在这个全球化日益加深的时代&#xff0c;疾病的跨国界传播成为全球公共卫生面临的重大挑战。地理信息科学&#xff08;GIS&#xff09;作为一门集成了空间数据采集、处理、分析及可视化的技术体系&#xff0c;在公共健康领域展现出其不可替代的价值。本文旨在深入探讨GIS如何助…

「面试必看」JS百题斩~ 原型 与 原型链

什么是原型&#xff0c;为什么需要原型 原型的强大之处在于&#xff0c;如果一组属性应该出现在每一个实例上&#xff0c;那我们就可以重用它们——尤其是对于方法。如下例子&#xff1a; function User(name,age){this.name name;this.age age;this.sayHi function(){con…

Linux命令-⽤户、权限管理

目录 <1>查看当前⽤户&#xff1a;whoami <2>查看登录⽤户&#xff1a;who <3>退出登录账户&#xff1a; exit <4>添加⽤户账号&#xff1a;useradd <5>设置⽤户密码&#xff1a;passwd <6>删除⽤户&#xff1a;userdel <7>切换⽤户…

【数据结构】双向链表(C语言)

哈喽铁子们&#xff0c;这里是博主鳄鱼皮坡。这篇文章将分享交流双向链表的相关知识&#xff0c;下面正式开始。 1. 双向链表的结构 注意&#xff1a;这里的“带头”跟前面我们说的“头节点”是两个概念&#xff0c;实际前面的在单链表阶段称呼不严 谨&#xff0c;但是为了老…

【教程】DGL单机多卡分布式GCN训练

转载请注明出处&#xff1a;小锋学长生活大爆炸[xfxuezhagn.cn] 如果本文帮助到了你&#xff0c;欢迎[点赞、收藏、关注]哦~ PyTorch中的DDP会将模型复制到每个GPU中。 梯度同步默认使用Ring-AllReduce进行&#xff0c;重叠了通信和计算。 示例代码&#xff1a; 视频&#xff1…

C++怎么根据变量名称返回变量的值?

在开始前刚好我有一些资料&#xff0c;是我根据网友给的问题精心整理了一份「C的资料从专业入门到高级教程」&#xff0c; 点个关注在评论区回复“888”之后私信回复“888”&#xff0c;全部无偿共享给大家&#xff01;&#xff01;&#xff01; 有点好奇你这么做是为了什么。…

[Redis] Redis Desktop Manager 安装包和连接和创建流程

1. 安装流程就是next&#xff0c;就可以。 2. 分别填写好&#xff1a; Name(自定义&#xff0c;redis这个库展示的名字), Host, Port, Auth(Redis 的连接password) 3. 要勾选上Use SSL Protocol 选项&#xff0c; 4. 连接到redis上&#xff0c;展示不同的database&#xff0c;…

cad标注尺寸很简单,这三个方法很好掌握!

在CAD&#xff08;计算机辅助设计&#xff09;的广阔领域中&#xff0c;标注尺寸是至关重要的一环。无论是初入CAD领域的新手&#xff0c;还是经验丰富的设计师&#xff0c;掌握标注尺寸的技巧都是提升工作效率和准确性的关键。今天&#xff0c;我们就来分享三个简单而实用的方…

AIGC数字人视频生成解决方案,赋能广电电视内容生产

AI数字人可以有效加大人工智能在内容生产的应用&#xff0c;推动广电电视节目创意生产&#xff0c;提高生产效率的同时&#xff0c;还能提升节目质量&#xff0c;增强互动呈现&#xff0c;为观众提供更加精彩的视听产品。 广州虚拟动力作为3D、AI数字人技术服务商及方案提供商…

5款非常好用的小众软件,你值得拥有

​ 今天为大家推荐五款不常见但好用的win10软件&#xff0c;它们都有着各自的特色和优势&#xff0c;相信你会喜欢的。 1. 文件夹查看——Folder Size View ​ Folder Size View是一款高效的文件夹大小查看工具&#xff0c;它能够快速扫描并展示文件夹及其子文件夹的占用空间…

np.array()按权重求平均值详解

代码如下&#xff1a; a np.array([[1, 4, 2, 6],[10, 41, 7, 3],[9, 1, 6, 2]]) v1 np.average(a, weights[3, 3, 4], axis0) print(v1) 运行结果 当执行这段代码时&#xff0c;np.average(a, weights[3, 3, 4], axis0)会根据指定的权重在列方向上计算加权平均值。 具体计…

告别枯燥:Python数据处理也可以很有趣

想要成为数据处理的超级英雄吗&#xff1f;阿佑将带你一探究竟&#xff01;我们将深入数据村&#xff0c;学习如何使用Python的超能力处理各种复杂的数据格式。从解码错误和字符集问题的解决&#xff0c;到大数据量的性能优化&#xff0c;再到数据验证与清洗&#xff0c;每一个…

git clone 项目报“鉴权失败”的解决办法

#问题展示# git clone https://gitee.com/soaringsoft/.....git 正克隆到...... Username for https://gitee.com:...... Password for https://.....gitee.com:...... remote: [session-1440f183] Unauthorized fatal: git clone https://gitee.com/soaringsoft/.....gi…

SpringMVC框架学习笔记(七):处理 json 和 HttpMessageConverter 以及文件的下载和上传

1 处理 JSON-ResponseBody 说明: 项目开发中&#xff0c;我们往往需要服务器返回的数据格式是按照 json 来返回的 下面通过一个案例来演示SpringMVC 是如何处理的 &#xff08;1&#xff09; 在web/WEB-INF/lib 目录下引入处理 json 需要的 jar 包&#xff0c;注意 spring5.x…

推荐网站(22)GeoSpy,根据图片显示地理位置

今天推荐一款名为GeoSpy的AI工具。它利用人工智能技术&#xff0c;通过分析照片中的光线、植被、建筑风格等细节线索&#xff0c;实现对拍摄地点的精确定位。令人难以置信的是,它对位置的定位准确度非常高。 GeoSpy之所以智能如此,是因为它将输入的照片与大量的街景和地理图像…

夹层辊能否解决智能测径仪量程不足的问题?

关键字:智能测径仪,测径仪夹层辊,测径仪量程,夹层辊作用,测径仪量程不足, 智能测径仪是一种高精度的测量设备&#xff0c;主要用于检测线材、管材等圆柱形物体的直径尺寸。在测径仪中&#xff0c;夹层辊是测径仪的关键部件之一&#xff0c;它负责引导和支撑被测物体&#xff0c…

Astar路径规划算法复现-python实现

# -*- coding: utf-8 -*- """ Created on Fri May 24 09:04:23 2024"""import os import sys import math import heapq import matplotlib.pyplot as plt import time 传统A*算法 class Astar:AStar set the cost heuristics as the priorityA…

企业里面最常用的6大管理系统!附6个模板下载!

企业管理系统旨在帮助企业优化工作流程&#xff0c;提高工作效率的信息化系统。它通过对一些流程的规范&#xff0c;可以极大地减少企业存在的一些流程重复造成的浪费&#xff0c;并通过规范每个员工的动作来提高效率。企业在选择管理系统时&#xff0c;注重功能的全面性、流程…

CentOS7下快速升级至OpenSSH9.7p2安全版本

一、CentOS7服务器上编译生成OpenSSH9.3p2的RPM包 1、编译打包的shell脚本来源于该项目 https://github.com/boypt/openssh-rpms解压zip项目包 unzip openssh-rpms-main.zip -d /opt cd /opt/openssh-rpms-main/ vim pullsrc.sh 修改第23行为source ./version.env 2、sh pull…