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)
}
6 回复

感谢 @iegomez,那么问题是如何使用动态数据创建字符串数组的数组?比如通过循环或数据库?

// 代码示例保留原样

更多关于Golang中如何追加双括号字符串?的实战系列教程也可以访问 https://www.itying.com/category-94-b0.html


是的,这正是我期望的结果,但默认数组使用的是双括号字符串 请查看此URL中的keyboardhandler函数:https://github.com/yanzay/tbot

image

{“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年份" 的字符串。

回到顶部