package main import ( "fmt" ) func main() { var slice []any slice = append(slice, "张三") slice = append(slice, "男") slice = append(slice, 18) fmt.Println(slice) // [张三 男 18] // 可以看到两种方式打印出来的内容是一样的 fmt.Println(slice[0], slice[1], slice[2]) // 张三 男 18 fmt.Println(slice...) // 张三 男 18 } //========== 总结 ==========// // 1、切片变量名后面跟三个小数点的效果是把切片所有元素展开,在调用某些有不定形 // 参的方法时,使用这种方式将切片展开作为不定参数入参会使代码变得非常简洁。
package main import ( "fmt" ) // Iterator1 // @description 遍历切片 // @param names []string 切片 func Iterator1(names []string) { for _, name := range names { fmt.Printf("%+v ", name) } } // Iterator2 // @description 遍历可变参数 // @param names ...string 可变参数,重要说明:在这种情况下 ...string 其实就是 []string func Iterator2(names ...string) { for _, name := range names { fmt.Printf("%+v ", name) } } func main() { // 以切片类型入参 Iterator1([]string{"刘一", "陈二", "张三", "李四", "王五", "赵六", "孙七", "周八", "吴九", "郑十"}) // 刘一 陈二 张三 李四 王五 赵六 孙七 周八 吴九 郑十 fmt.Println() // 以可变参数入参 Iterator2("刘一", "陈二", "张三", "李四", "王五", "赵六", "孙七", "周八", "吴九", "郑十") // 刘一 陈二 张三 李四 王五 赵六 孙七 周八 吴九 郑十 fmt.Println() // 虽然Iterator2()的形参是可变参数,但是在实参后面加三个小数点也可以入参 Iterator2([]string{"刘一", "陈二", "张三", "李四", "王五", "赵六", "孙七", "周八", "吴九", "郑十"}...) // 刘一 陈二 张三 李四 王五 赵六 孙七 周八 吴九 郑十 } // ========== 总结 ========== // // 1、如果一个函数的形参可以设计为切片,也可以设计为可变参数,那么应该优先设计为可变参数,因为可变参数可以兼容切片(反之则 // 不行),只要在切片变量后面加三个小数点就可以作为可变参数入参。 // 2、函数的形参可以同时使用固定参数和可变参数,前提是可变参数必须放在形参列表最后,即作为最后一个参数。
Copyright © 2024 码农人生. All Rights Reserved