有没有办法让这个golang代码缩短?
<web-app>
<display-name>Archetype Created Web Application</display-name>
<servlet>
<servlet-name>stellar</servlet-name>
<servlet-class>
org.springframework.web.servlet.DispatcherServlet
</servlet-class>
<load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>stellar</servlet-name>
<url-pattern>/</url-pattern>
</servlet-mapping>
</web-app>
答案 0 :(得分:5)
您无法消除循环以将每个元素单独转换为int
,因为您无法转换不同元素类型的整个切片。有关说明,请参阅此问题:Type converting slices of interfaces in go
您可以做的最多的事情是使用命名结果类型,使用具有2个迭代值的for range
,您可以通过将其分配给blank identifier和第2个来省略第一个(索引)将是价值:
func MergeSlices(s1 []float32, s2 []int32) (s []int) {
for _, v := range s1 {
s = append(s, int(v))
}
for _, v := range s2 {
s = append(s, int(v))
}
return
}
但要知道你的代码是正常的。我的代码并不总是遵循,它是回答你的问题:如何缩短你的代码。如果你想改进你的代码,你可以先看看它的性能,甚至重构你的代码,最终不需要合并不同类型的切片。
答案 1 :(得分:1)
var s1 []int
var s2 []int
newSlice = append(s1, s2...)
答案 2 :(得分:0)
代码无法获得任何更短的,但这是一个值得怀疑的目标;它不是过于冗长的原样。但是,您可以通过消除中间分配来提高性能。每次调用append
时,如果目标切片没有足够的空间,它会扩展它,猜测必要的大小,因为你没有告诉它需要多少空间。
最简单的方法是预先设定目标切片(将var slice []int
替换为slice := make([]int, 0, len(s1) + len(s2))
;这样,追加永远不必扩展它。将第二个参数设置为0很重要,设置< em> length 为零,容量为所需的总大小,以便您的附加按预期工作。
一旦你预先确定了它,你可以完全摆脱附加,并直接设置每个索引:
func MergeSlices(s1 []float32, s2 []int32) []int {
slice := make([]int, len(s1) + len(s2))
for i,v := range s1 {
slice[i] = int(v)
}
for i,v := range s2 {
slice[i+len(s1)] = int(v)
}
return slice
}