go对参数的处理偏向保守:
func test(p **int) { // 整型指针的地址
x := 100 // 变量x 为100
*p = &x // 整型指针指向x的地址
}
func main() {
var p *int
test(&p)
fmt.Println(*p)
}
type serverOption struct {
address string
port int
path string
timeout time.Duration
log *log2.Logger
}
func newOption() *serverOption {
return &serverOption{
address: "0.0.0.0",
port: 8080,
path: "/func/test",
timeout: time.Second * 5,
log: nil,
}
}
func server(option *serverOption) {}
func main() {
opt := newOption()
opt.port = 8085
server(opt)
}
变参:
func test(s string, a ...int) {
fmt.Printf("%T, %v\n", a, a)
}
func main() {
test("abc", 1,2,3,4,5)
}func test(s string, a ...int) {
fmt.Printf("%T, %v\n", a, a)
}
func main() {
s := [5]int{1,2,3,4,5}
test("abc", s[:]...)
}func test( a ...int) {
for i := range a{
a[i] += 200
}
}
func main() {
a := []int{1, 2, 3, 4}
test(a...)
fmt.Println(a)
}
知识补充:
- 形参,实参,可选参数,命名实参,传出参数区别