Golang中如何追加双括号字符串?
Golang中如何追加双括号字符串? 如何追加双括号字符串
var buttons = [][]string{}
var dates = time.Now()
var years = dates.Year()
for i := years; i <= (years - 5); i-- {
var converti = strconv.Itoa(i)
buttons = append(buttons, "A"+converti)
}
感谢 @iegomez,那么问题是如何使用动态数据创建字符串数组的数组?比如通过循环或数据库?
// 代码示例保留原样
更多关于Golang中如何追加双括号字符串?的实战系列教程也可以访问 https://www.itying.com/category-94-b0.html
是的,这正是我期望的结果,但默认数组使用的是双括号字符串 请查看此URL中的keyboardhandler函数:https://github.com/yanzay/tbot

{“Some”, “Test”, “Buttons”} 和 {“Another”,“Row”} 不是字符串,它们是 []string 数组。因此,buttons 作为 [][]string(字符串数组的数组)可以使用这两个值进行初始化。
通过以下示例了解其工作原理(你可以在此运行):
package main
import (
"fmt"
)
func main() {
buttons := [][]string {
{"Some", "Test", "Buttons"},
{"Another","Row"},
}
fmt.Printf("整个数组: %v\n", buttons)
fmt.Printf("数组的第一个元素: %v\n", buttons[0])
fmt.Printf("数组的第二个元素: %v\n", buttons[1])
fmt.Printf("buttons中第一个数组的首个元素: %v\n", buttons[0][0])
fmt.Printf("buttons中第二个数组的首个元素: %v\n", buttons[1][0])
}
另外,你似乎刚接触 Go 语言。我建议你参加 Go 语言之旅来了解这门语言。
你好,你在那里犯了几个错误。首先,除非我理解错了你的想法,否则你需要的是一个字符串数组,而不是字符串数组的数组。其次,for循环的条件是反的,因为你是从初始化为当前年份的i递减到(当前年份-5),所以你应该在i大于等于(年份-5)时循环,而不是小于等于(当前年份是2018年,所以在你的代码中第一次迭代时你会比较2018 <= 2013,会立即退出for循环)。
所以,保持几乎所有内容不变,只修复这些错误,我认为你想要的是这样的:
package main
import (
"fmt"
"time"
"strconv"
)
func main() {
var buttons = []string{}
var dates = time.Now()
var years = dates.Year()
for i := years; i >= (years - 5); i-- {
var converti = strconv.Itoa(i)
buttons = append(buttons, "A"+converti)
}
fmt.Println(buttons)
}
我在最后添加了Println,在playground中会打印这样的结果(那里的日期固定为2009-11-10 23:00:00,所以初始年份是2009而不是2018):
[A2009 A2008 A2007 A2006 A2005 A2004]
这是你期望的结果吗?
这在某种程度上取决于动态性质的内容:"大"数组、字符串数组,还是所有内容?
我将给你一个示例,其中容器数组的大小已知,在循环中填充字符串数组,其中一个数组会动态追加字符串:
package main
import (
"fmt"
)
func main() {
n := 10
//容器数组有固定大小
var bigArray = make([][]string, n, n)
for i := 0; i < n; i ++ {
//我们不知道字符串数组的大小
bigArray[i] = []string{}
//让我们通过追加到bigArray[5]来为位置5的数组添加一些字符串
if i == 5 {
for j := 0; j < 5; j++ {
bigArray[i] = append(bigArray[i], fmt.Sprintf("dynamic string %d", j))
}
}
fmt.Printf("strings array at %d has len %d\n", i, len(bigArray[i]))
}
//现在,让我们看看bigArray[5]中的内容
for i, str := range bigArray[5] {
fmt.Printf("found %s at postion %d of bigArray[5]\n", str, i)
}
}
这里是Go Playground上的示例:https://play.golang.org/p/fagiJyNW_UU
但再次建议,你应该参加Go语言之旅,阅读所有关于Go的资料,编写一些示例程序等等,来练习这门语言。
在您的代码中,buttons 被声明为 [][]string 类型(二维字符串切片),但您试图使用 append 添加一个字符串元素 "A"+converti,这会导致类型不匹配错误。要正确追加双括号字符串(即二维字符串切片),您需要追加一个 []string 类型的元素,而不是单个字符串。
以下是修正后的代码示例,将每个年份字符串包装在一个 []string 切片中再追加到 buttons:
package main
import (
"fmt"
"strconv"
"time"
)
func main() {
var buttons = [][]string{}
var dates = time.Now()
var years = dates.Year()
for i := years; i >= (years - 5); i-- {
var converti = strconv.Itoa(i)
buttons = append(buttons, []string{"A" + converti})
}
fmt.Println(buttons) // 输出: [[A2024] [A2023] [A2022] [A2021] [A2020] [A2019]]
}
关键修改点:
- 将
append(buttons, "A"+converti)改为append(buttons, []string{"A" + converti}),确保追加的元素是[]string类型。 - 修正了循环条件:原代码
i <= (years - 5)会导致循环不执行(因为years大于years-5),改为i >= (years - 5)以正确递减循环。 - 添加了
fmt.Println(buttons)以验证结果,输出一个包含多个[]string元素的二维切片。
这样,buttons 将正确存储为二维字符串切片,每个内部切片包含一个形如 "A年份" 的字符串。

