切片指针跟指针切片的循环注意事项(重要)
package main
import "fmt"
func main() {
//var x,y,z = 1,2,3
var s []*int = []*int{new(int)}
for i:=range s {
fmt.Println(*s[i]) //s=nil会报错,空指针不可取值 = 0
}
var l *[]int
l=&[]int{1,2,3}
*l= append(*l, *l...)
for _,x:=range (*l) {
fmt.Println(x) // 被引用 1,2,3 1,2,3
}
}
package main
import "fmt"
func RemoveSlicStr(o []string,p string) []string { //单个切片切割,浅拷贝
for i:=0;i<len(o);i++{
if o[i] == p {
o = append(o[:i], o[i+1:]...)
i--
}
}
return o
}
func main() {
o:=[]string{"cheyunhua","che"}
fmt.Println(RemoveSlicStr(o,"che"))
}
package main
import "fmt"
func RemoveSlicStr(o []string,p string) (n []string) { //比较消耗资源,引用类型,深
for i,v:=range o{
if o[i] != p {
n = append(n, v)
return n
}
}
return
}
func main() {
o:=[]string{"cheyunhua","che"}
fmt.Println(RemoveSlicStr(o,"che"))
}
//结果
0
1
2
3
1
2
3
func DemoRemoveDubb(o,n []string) []string{
var l []string
m:=map[string]int{}
for _,v:=range o{
m[v]++
}
for _,x:=range n{
m[x]++
if m[x] > 1{
l=append(l, x)
//return l //返回等于 [cheyunhua】不对
}
}
return l
}
func main() {
o:=[]string{"cheyunhua","test","ffdsf"}
n:=[]string{"cheyunhua","test","xxx"}
fmt.Println(DemoRemoveDubb(o,n))
}
//
[cheyunhua test]