Golang里面的切片,很像Java中的ArrayList,可以实现数组的动态扩缩容。
创建
// Java的ArrayList定义
List<String> list = new ArrayList<String>();
// Java数组定义
String[] arrayRefVar = new String[5];
// go
slice := make([]string, 5)
Java中是通过new创建一个ArrayList,Go中是通过make来创建,这边就是语法上的不同。
赋值
在语法上趋近与数组的编写形式,而不像ArrayList的语法那么重量级。但是GO语言的数组[]
号在类型的前面,这个是Java开发语言的同学所不适应的。
初始化赋值
// Java数组赋值
String[] str = {"Red","Blue"};
// GO切片赋值
str := []string{"Red","Blue"}
可以看到
直接赋值
// Java
int[] b = new int[3];
b[0] = 100;
//GO
b := make([]int,3)
b[0] = 100
是不是跟Java的数组赋值差不多,GO语法中位置好多都是跟Java中相反的。
增加元素
// Java
String[] strs = new String[4];
strs[0] = "1";
strs[1] = "2";
strs[2] = "3";
strs[3] = "4";
List<String> list = new ArrayList<>(Arrays.asList(strs));
List<String> newList = list.subList(1,3);
System.out.println(newList.toString());
list.add("5");
System.out.println(list.toString());
//GO
strs := make([]string,4)
strs[0] = "1";
strs[1] = "2";
strs[2] = "3";
strs[3] = "4";
newStrs := strs[1:3]
t.Log(newStrs)
// 额外赋值的话
strs = append(strs,"5")
t.Log(strs)
这段代码的意思是创建一个动态数组
,可以看到Go的语法要比Java要简洁的多。
遍历
// Java
String[] strs = {"1","2","3","4"};
List<String> list = new ArrayList<>(Arrays.asList(strs));
for(String str : list){
System.out.println(str);
}
System.out.println("---------------");
for(int i=0;i<list.size();i++){ System.out.println("index="+i+",value="+list.get(i));
}
// GO
strs := []string{"1","2","3","4"}
for index, value := range strs{
fmt.Printf( "index=%d, value=%s\n", index, value)
}
for index:=0;index<len(strs);index++{
fmt.Printf( "index=%d, value=%s\n", index, strs[index])
}
GO语言for后面不用大括号,剩下的写法基本上一样。