Golang 不能在 function 內定義 function
func (繼承的方法) funcName(參數)(回傳值型態) {
}
有關funcName前面的參數可參考:https://tour.golang.org/methods/1
參數傳遞方式區別(pass by pointer, pass by value)
package main
import "fmt"
func test(x int) (int, int) {
return x, x + x
}
func main() {
person, testtt := test(5)
fmt.Printf("%v\n", person)
fmt.Printf("%v", testtt)
}
func Sum(numbers ...int) int {
var sum int
for _, number := range numbers {
sum += number
}
return sum
}
// fmt.Println(Sum(1, 2, 3)) // 6
// fmt.Println(Sum(1, 2, 3, 4)) // 10
宣告參數時用 ...,此參數本質上是個 slice,可以使用 for range 來走訪元素,可接受可變長度的參數只能有一個,而必須是最後一個參數
package main
import (
"fmt"
)
func test(x *int) *int {
*x += 5
return x
}
func main() {
apple := 5
test(&apple)
fmt.Printf("%v", test(&apple))
}
type testFunc func(int, int) int
或是
type testFunc = func(int, int) int
fmt.Println(&maximum) // 0xc00000e028
func max(a, b int) int {
if a > b {
return a
}
return b
}
fmt.Println(max) // 0x10994c0
package main
import "fmt"
func funcA() func(int) int {
x := 10
return func(n int) int {
return x + n
}
}
func main() {
fmt.Println(funcA()(2)) // 12
}
package main
import (
"fmt"
)
type Int int
type FuncInt func(Int)
func (n Int) Times(f FuncInt) {
var i Int
for i = 0; i < n; i++ {
f(i)
}
}
func main() {
var x Int = 10
x.Times(func(n Int) {
fmt.Println(n)
})
}
package main
import "fmt"
func forEach(elems []int, callback func(int)) {
for _, elem := range elems {
callback(elem)
}
}
func main() {
numbers := []int{1, 2, 3, 4, 5}
sum := 0
forEach(numbers, func(elem int) {
sum += elem
})
fmt.Println(sum) // 15
}
func Hello(value interface{}) {
switch v := value.(type) {
case string:
fmt.Println(v)
case int:
fmt.Printf("%d", v)
}
}