当数组长度不为空时出现“恐慌:运行时错误:索引超出范围”

2023-11-21

我很难学习如何在 Go 中循环字符串来做一些事情(具体来说,分隔单词而不是包含元音)。

我写了这个代码片段:https://play.golang.org/p/zgDtOyq6qf.

这是我运行时遇到的错误:

panic: runtime error: index out of range

goroutine 1 [running]:
panic(0x1045a0, 0x1040a010)
    /usr/local/go/src/runtime/panic.go:500 +0x720
main.myFunc(0x114130, 0x4, 0x0, 0x0, 0x0, 0x3ba3)
    /tmp/sandbox960520145/main.go:19 +0x1a0
main.main()
    /tmp/sandbox960520145/main.go:10 +0x40

我在这个论坛搜了一下,有人说是数组长度的问题,但这里不是这样的。我不知道如何解决这个问题。 有人可以建议一下吗?


首先我们来解释一下:

result := make([]string, 0, 4)

The make内置函数分配并初始化类型的对象[]string叫它Slice of string

切片内部结构:

切片是数组段的描述符。它由一个指针组成 到数组,段的长度及其容量(最大 段的长度)。

So result := make([]string, 0, 4)分配并初始化类型的对象[]string with length = 0 and capacity = 4.
And result := make([]string, 4, 4)分配并初始化类型的对象[]string with length = 4 and capacity = 4,等于result := make([]string, 4).

现在有什么区别result := make([]string, 0, 4) and result := make([]string, 4):

With result := make([]string, 0, 4)该 Slice 的底层数组为空意味着使用result[0]会恐慌:运行时错误:索引超出范围。

With result := make([]string, 4)该 Slice 的底层数组有 4string元素,意思是使用result[0], result[1], result[2], result[3] is OK:

package main

import "fmt"

func main() {
    result := make([]string, 4)
    fmt.Printf("%q, %q, %q, %q \n", result[0], result[1], result[2], result[3])
}

output:

"", "", "", "" 

And result := make([]string, 4)等于result := []string{"", "", "", ""}这段代码的意思是:

package main

import "fmt"

func main() {
    result := []string{"", "", "", ""}
    fmt.Printf("%q, %q, %q, %q \n", result[0], result[1], result[2], result[3])
}

输出与上面的代码相同:

"", "", "", "" 

The append内置功能 将元素附加到切片的末尾。如果容量足够的话 目的地被重新切片以容纳新元素。如果它 否则,将分配一个新的底层数组。追加返回 更新了切片。因此需要保存结果 附加,通常在保存切片本身的变量中:

slice = append(slice, elem1, elem2)
slice = append(slice, anotherSlice...)

作为一种特殊情况,将字符串附加到字节切片是合法的, 像这样:

slice = append([]byte("hello "), "world"...)

现在在你的函数内的代码中myFunc after result := make([]string, 0, 4),你可以使用append,就像这个工作代码(围棋游乐场):

package main

import (
    "fmt"
    "strings"
)

func main() {
    strs := strings.Fields("Political srt")
    fmt.Println(len(strs)) // It's not empty so why index out of range
    fmt.Println(strs, strs[0], strs[1])
    fmt.Println(strings.ContainsAny(strs[0], "eaiuo"))
    fmt.Println(myFunc("Political srt"))
}

func myFunc(input string) []string {
    strs := strings.Fields(input)
    result := make([]string, 0, 4)
    for i := 0; i < len(strs); i++ {
        if strings.ContainsAny(strs[i], "eaiu") {
            result = append(result, strs[i])
        } else {
            result = append(result, strs[i])
        }
    }
    return result
}

您可以简化该代码,例如这个工作代码(围棋游乐场):

package main

import (
    "fmt"
    "strings"
)

func main() {
    fmt.Println(myFunc("Political srt"))
}

func myFunc(input string) []string {
    strs := strings.Fields(input)
    result := make([]string, 0, 4)
    for _, s := range strs {
        if strings.ContainsAny(s, "eaiu") {
            result = append(result, s)
        }
    }
    return result
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

当数组长度不为空时出现“恐慌:运行时错误:索引超出范围” 的相关文章

  • Knuth-Morris-Pratt 算法

    解决方案是Knuth Morris Pratt 算法 https en wikipedia org wiki Knuth E2 80 93Morris E2 80 93Pratt algorithm 干草堆 AAAAAAAAA 针 AAA
  • JavaScript 按属性删除对象数组中的元素

    我有一个以下形式的对象数组 prop1 value1 banks id value property2 value2 所以我想要做的是通过搜索 id 值来删除 banks 属性中的元素 然后从banks数组中删除找到的元素 id 属性具有唯
  • 如何在Powershell控制台中分配多行字符串

    当我在 powershell 控制台中输入此内容时 test Test Test 并且输入多次 它会一直打印 gt gt 所以我永远无法完成命令 该怎么办 应该是行中的第一件事 或者它被认为只是字符串的一部分 test Test Test
  • 删除数组中的重复元素[重复]

    这个问题在这里已经有答案了 可能的重复 在 JavaScript 数组中查找重复值的最简单方法 https stackoverflow com questions 840781 easiest way to find duplicate v
  • Bash 字符串之间的比较 - 相等但不相等

    我只想在 Bash 中的两个字符串之间进行非常简单的比较 stat curl Is url head n 1 echo stat if stat HTTP 1 1 200 OK then echo symbol is OK echo sta
  • 如何读取 UDP 连接直至超时?

    我需要读取 UDP 流量 直到超时 我可以通过在 UDPConn 上调用 SetDeadline 并循环直到出现 I O 超时错误来做到这一点 但这看起来很黑客 基于错误条件的流量控制 下面的代码片段看起来更正确 但并没有终止 在生产中 这
  • Python 中 a -= b 和 a = a - b 之间的区别

    我最近申请了this https stackoverflow com questions 30379311 fast way to take average of every n rows in a npy array对矩阵的每 N 行进行
  • C# 使文本框中的一组字符表现得像一个字符

    基本上 我有这样的关键字sin and cos 在文本框中 我希望它的行为像单个字符 当我在下面提到整个字符串时 它指的是字符组 例如 sin Using sin 举个例子 如果插入符号位于此位置 在s 如果你按下del 它将删除整个字符串
  • 需要Python字长函数示例

    我的家庭作业有点困难 我本来应该编写一个函数 limitWords 将输入限制为 20 个单词 如果输入超过 20 个单词 则将输入截断为仅 20 个单词 我使用 len text split 作为计算单词的方法 因此 20 个或更少的部分
  • Hive:在查询中将 array 转换为 array

    我有两张桌子 create table a 1 array
  • 从 Golang 调用 C 函数

    我想在 Golang 中编写控制器逻辑并处理 json 和数据库 同时在 C 中使用我的数学处理模型 在我看来 调用 C 函数的开销必须尽可能低 就像设置寄存器 rcx rdx rsi rdi 一样 执行一些操作fastcall 并获取 r
  • Django Rest框架Json解析

    我想解析传入的POSTdjangoviews py 文件中的数据 发布数据 number 17386372 data banana apple grapes 这是我尝试读取上述传入数据的方法request views py class Fr
  • 按 Enter 继续

    这不起作用 string temp cout lt lt Press Enter to Continue cin gt gt temp cout lt lt Press Enter to Continue cin ignore 或更好 in
  • 将结构体数组传递给函数 C++

    抱歉这个菜鸟问题我只是有点困惑 如果我在 main 中有一个结构数组 我想将其传递给函数 struct MyStruct int a int b char c mayarray 5 MyStruct StructArray 10 myFun
  • 如何在 Yii2 应用程序中显示多个选择下拉列表中的选定值?

    我正在研究 Yii2 我正在使用这样的自定义数组创建多个选择下拉菜单 在控制器文件中 all groups Groups find gt where group created by id gt orwhere new Expression
  • 将字符串中的 i 个连续相同字符分组到列表中[重复]

    这个问题在这里已经有答案了 我希望以这样的方式分隔输入字符串 即所有连续的相同字符都分组在一个列表中 示例1 str aabbcccdeddgg output aa bb ccc d e dd 期望的输出 aa bb ccc d e dd
  • Python 将字符串组合成尽可能短的字符串?

    如果我有一个字符串列表 我想将它们组合成一个具有重叠字符的字符串 如果没有剩余的重叠字符串 请将其添加到末尾 这是一个过于简化的版本 input one two output twone 我正在寻找一种方法来对输入列表中的任意数量的字符串执
  • 不区分大小写的 array_unique

    我正在尝试编写几行代码来创建一个不区分大小写的数组唯一类型函数 这是我到目前为止所拥有的 foreach topics as value lvalue strtolower value uvalue strtolower value if
  • 打印“X”个字符数与“X”字符串长度的所有可能组合(暴力破解)

    我正在尝试编写一个单词组合生成器 我的意思是打印 X 个字符数与 X 字符串长度的所有可能组合 首先 我需要说的是 我在 StackOverFlow 中看到了一个关于这个问题的问题 其中有很多单词生成器的答案来执行此操作 在不同的语言上 但
  • Visual Studio 2015:v120 与 v140?

    仅供参考 Win10 x64 我今天开始尝试 Visual Studio 2015 在弄清楚如何运行 C C 部分后 我尝试加载一个大型个人项目 该项目使用非官方的glsdk http glsdk sourceforge net docs

随机推荐

  • WinForms 全局异常处理?

    我已经实现了具有 DLL 库的软件 其中包含一组类 其中包括我的软件的所有方法 现在我希望能够处理一些全局错误 例如错误 26 它是所有这些类上的非网络相关错误 而不是转到每个类并添加它 我该怎么做呢 If 26是一个例外 那么你可以使用A
  • 在Python中将int转换为二进制字符串

    如何在 Python 中将整数转换为二进制字符串 37 100101 Python 的字符串格式方法可以采用格式规范 gt gt gt 0 b format 37 100101 Python 2 的格式规范文档 Python 3 的格式规范
  • CPU 中的 LRU 缓存是如何实现的?

    我正在为面试做准备 想重温一下我对缓存的记忆 如果CPU有一个带有LRU替换策略的缓存 那么它在芯片上实际上是如何实现的呢 每个缓存行会存储一个时间戳记吗 另外 在双核系统中两个 CPU 同时写入同一个地址时会发生什么情况 对于只有两种路的
  • AngularJs:替换字符串的一部分

    AngularJs 有没有办法替换字符串 我正在尝试做类似的事情 string replace some thing Thanks 你的片段有效 demo http plnkr co edit yNuNeE5yO3rgKAYfGx48 p
  • 相当于 C# 中 VB 的格式

    等效代码是什么Format iCryptedByte 000 VB NET 在 C 中 String Format format iCryptedByte where format like 0 D2 参见MSDN1 2 3
  • 在 Matplotlib 中绘制 k-NN 决策边界图

    How do I color the decision boundaries for a k Nearest Neighbor classifier as seen here I ve got the data for the 3 clas
  • Android:Edittext-获取当前行

    在编辑文本中是否有获取光标当前行的方法 如果没有 我会编写自己的方法 但只是想检查一下 如果我确实编写自己的方法 最好的方法是遍历编辑文本中的每个字符 直到选择开始并使用 For 循环计算 n 的数量 还是有更好的方法 谢谢 只是为了让人们
  • Angular 2 中无法加载图像

    HTML 文件 div img src New Google Logo png div 这里 New Google Logo png 与 html 文件位于同一文件夹中 但是在 ng 服务之后 html 页面会加载其他详细信息 但不会加载图
  • 如何在 Windows 上 pip 或 easy_install tkinter [重复]

    这个问题在这里已经有答案了 IDLE 抛出错误并说tkinter无法导入 有没有简单的安装方法tkinter via pip or easy install 似乎有很多软件包名称为此而流传 这个和其他各种变体tkinter pypy不工作
  • auto 关键字在 Dev C++ 中不起作用[重复]

    这个问题在这里已经有答案了 这是我写的代码 看看如何auto关键字有效 但它没有在 Dev C 中编译并给出以下警告 警告 C 11 auto 仅适用于 std c 11 或 std gnu 11如何克服这个故障并按照警告的指示去做 inc
  • Xamarin Forms:TabbedPage 中的内容页

    我正在尝试将一些自定义内容页面放入选项卡式页面中 遗憾的是我不确定如何使用 XAML 语法执行此操作 我的虚拟项目如下所示 Page 1
  • 将 AsyncRead 转换为 TryStream 字节的最佳方法是什么?

    我有一个AsyncRead并想将其转换为Stream
  • 同一个表中与 SQLAlchemy 的多对一关系

    我有一张 客户 表 其中客户可以是另一个客户的子项 这是表定义 ClientID int IDENTITY 1 1 NOT NULL name varchar 50 NOT NULL VPFSID varchar 50 NOT NULL T
  • 在 WebView 中从相机或图库上传图像

    此应用程序中的 WebView 打开一个带有上传按钮的页面 下面的代码块允许打开一个对话框以从图库或相机上传图像 在我的活动中 我有 private WebView wv make HTML upload button work in We
  • 一个干净的 CSS3 3 列布局,从哪里开始?

    我目前正在更新一个相当旧的网站 上次更新是在 2001 年左右 并同意使用 HTML5 和 CSS3 对于总体设计 我正在研究一种非常干净的白色和灰色色调风格 带有许多填充和边距 我的问题出在主页上 我想要一个 3 列居中布局 但从哪里开始
  • Python ctypes 加载错误:未定义的符号

    我试图使用 ctypes 将从 C 源代码编译的共享库加载到 Python 中 共享库 名为 库子库 下面 使用libusb图书馆 这就是 make 所做的 gcc c O2 Wall Werror g I src I boot vnd f
  • 从 CSV 文件中提取数据(融合表和 kml 解决方法)

    在使用 C 的 Android 版 Xamarin 谷歌地图中 您可以基于此创建多边形tutorial public void OnMapReady GoogleMap googleMap mMap googleMap PolylineOp
  • TransactionScope 无法与并行扩展一起使用?

    如果我执行以下操作 Using scope New TransactionScope entries Content ReadAs Of IList Of WebMaint AsParallel ForAll Sub entry repos
  • jquery推送制作多维数组

    我在没有帮助的情况下查看了其他类似的帖子 它们都是从已经制作的多维数组开始的 我想通过使用 push 神奇地制作一个 我的阵列 ItemsArray push RoomName RoomName Item this is where I w
  • 当数组长度不为空时出现“恐慌:运行时错误:索引超出范围”

    我很难学习如何在 Go 中循环字符串来做一些事情 具体来说 分隔单词而不是包含元音 我写了这个代码片段 https play golang org p zgDtOyq6qf 这是我运行时遇到的错误 panic runtime error i