Go编程基础3-项目与坑-创新互联
项目与坑
slice容量问题
初始容量被超过了,它会新建一个slice,然后把旧的内容拷贝过去,然后append数据,这就会导致底层数组改变了,期望的结果可能就不是预期的了
发展壮大离不开广大客户长期以来的信赖与支持,我们将始终秉承“诚信为本、服务至上”的服务理念,坚持“二合一”的优良服务模式,真诚服务每家企业,认真做好每个细节,不断完善自我,成就企业,实现共赢。行业涉及混凝土搅拌机等,在成都网站建设、全网整合营销推广、WAP手机网站、VI设计、软件开发等项目上具有丰富的设计经验。package main
import("fmt")
func Pingpong(s []int) {
s = append(s,3)//原来的容量为0,append之后,重新分配了内存地址,s跟原来的slice s已经不是同一个了
}
func main(){
s := make([]int,0) //初始化slice s,初始容量为0,长度为0
fmt.Println(s)
Pingpong(s)
fmt.Println(s)
}
两次打印的slice结果都是空
[]
[]
怎么解决这个问题,真的修改修改slice?增加返回值
package main
import("fmt")
func Pingpong(s []int ) []int { //希望修改slice的,设置返回值,通过返回值去返回数据
s = append(s,4)//原来的容量为0,append之后,重新分配了内存地址,s跟原来的slice s已经不是同一个了
return s
}
func main(){
s := make([]int, 0) //初始化slice s,初始容量为0,长度为0
fmt.Println(s)
s = Pingpong(s) //这里取出返回值
fmt.Println(s)
}
[]
[4]
time,用t.Format(time.ANSIC或者t.Format("Mon Jan _2 15:04:05 2006"这里不能调整,否则时间差异极大
package main
import(
"fmt"
"time"
)
func main(){
t := time.Now()
fmt.Println(t)
}
2018-07-09 11:51:25.906284 +0800 CST m=+0.000278103
如果不想要时区等信息,用format
package main
import(
"fmt"
"time"
)
func main(){
t := time.Now()
fmt.Println(t.Format(time.ANSIC))
}
Mon Jul 9 11:54:15 2018
https://gowalker.org/time#_constants
package main
import(
"fmt"
"time"
)
func main(){
t := time.Now()
fmt.Println(t.Format("Mon Jan _2 15:04:05 2006")) //这里是标准的对比时间,不能改变吗,否则差异很大
}
Mon Jul 9 11:58:18 2018
https://gowalker.org/time#_constants
package main
import(
"fmt"
"time"
)
func main(){
t := time.Now()
fmt.Println(t.Format("Mon Jan _2 15:04:05 2006"))
}
Mon Jul 9 11:59:48 2018
range、for range与闭包的坑
package main
import(
"fmt"
)
func main(){
s := []string{"a","b","c"}
for _,v := range s{
go func() { //通过for range启动doroutine,不用参数穿进去的值都是引用闭包的思想
fmt.Println(v)//这里都是引用了v的地址,v全等于c
}()
}
select { //为了防止main退出,写死slect
}
}
c
c
c
fatal error: all goroutines are asleep - deadlock!
package main
import(
"fmt"
)
func main(){
s := []string{"a","b","c"}
for _,v := range s{
go func(v string) { //通过for range启动doroutine,不用参数穿进去的值都是引用闭包的思想
fmt.Println(v)//这里都是引用了v的地址,v全等于c
}(v)
}
select { //为了防止main退出,写死slect
}
}
c //这里输出a和b,并不全是c
b
a
创新互联www.cdcxhl.cn,专业提供香港、美国云服务器,动态BGP最优骨干路由自动选择,持续稳定高效的网络助力业务部署。公司持有工信部办法的idc、isp许可证, 机房独有T级流量清洗系统配攻击溯源,准确进行流量调度,确保服务器高可用性。佳节活动现已开启,新人活动云服务器买多久送多久。
文章题目:Go编程基础3-项目与坑-创新互联
文章位置:http://ybzwz.com/article/ejdgs.html