Go 程序的入口的package 和函数名,必须都是 main。如果是一个包,包里函数小写开头,只能在这个包内使用,大写开头,则包内包外都可以使用。
循环
package main
import (
"fmt"
)
func main() {
for i := 1; i <= 9; i++ {
for j := 1; j <= i; j++ {
fmt.Printf("%d*%d=%d\t", j, i, i*j)
}
fmt.Println()
}
}
如果是字符串、数组、slice、map或 channel的遍历,可以用 range 来进行遍历
package main
import (
"fmt"
)
func main() {
str := "sdfajlskfa"
for i, c := range str {
fmt.Printf("%c", c)
fmt.Printf("%d,", i)
}
result1, result2 := add(2, 3)
fmt.Print(result1, result2)
}
func add(a, b int) (int, int) {
return a + b, a * b
}
如果是可变参数,可以在参数类型前加上 ...
package main
import (
"fmt"
)
func main() {
sum := 0
sum = getSum(1, 2, 3)
fmt.Println("sum result: ", sum)
}
func getSum(num ...int) int {
sum := 0
for i := 0; i < len(num); i++ {
sum += num[i]
}
return sum
}
可变参数也是支持不确定类型的参数,示例:
func printType(args ...interface{}) {
for _, arg := range args {
switch arg.(type) {
case int:
fmt.Println(arg, " type is int")
case string:
fmt.Println(arg, " type is string")
default:
fmt.Println(arg, " type is unknown")
}
}
}
如果是在一个list后面加 ... 则表示解序列,示例:
var s []string
s = append(s, []string{"a", "b", "c"}...)
fmt.Println(s)
r := func(a, b int) int {
return a + b
}(3, 5)
fmt.Println(r)
函数式编程
回调函数
将函数作为另外一个函数的参数,这个函数是回调函数,调用方是高阶函数。示例 add 就是回调函数
func main() {
addR := operator(3, 4, add)
fmt.Println(addR)
}
func operator(a, b int, f func(int, int) int) int {
r := f(a, b)
return r
}
func add(a int, b int) int {
return a + b
}
首先项目里要有 go.mod 文件,这个文件里包含了依赖包的信息,如果想要整理下这个文件,可以用 go mod tidy,会清理没用到的包。如果没有 go mod文件,可以初始化这个go项目。比如go代码都在当前路径的 my_project 文件夹下,那么我们用下面的命令,可以在该文件夹下创建 go.mod