go给我的第一感受就是,它是很多语言拼出来的,至少它有很多其他语言的特征
下面就讲一下学到的go的基本语法以及今天照着敲的代码
- 变量声明:go的变量声明用var开头(呵呵,让我想起了js),但 go需要在变量名后面加上它的类型,也可以使用:=的方式来简写(但这种简写方式只能在函数中使用,这种方法中的类型是由右值推导出来的)
- 常量的话加 const关键字且不能使用上面说的:=来进行声明
下面举个简单的例子
package main
import (
"fmt"
)
func main() {
var xxx int = 4
yyy := xxx + 1
const con string = "abc"
fmt.Println(xxx, yyy)
fmt.Println(con)
}
- go中的for不用写小括号(),大括号却是必须的(c之类的通常写一句的话就不写大括号了)
- if也和 for一样不用写小括号,大括号必须写
- switch的 case不需要写break
- defer话会在当前那层的函数返回后再进行执行
package main
import "fmt"
func main() {
defer fmt.Println("this is a example of defer")
fmt.Println("in main func")
fmt.Println("about to end...")
}
运行结果如下
- 如果不止有一个defer的话呢,顺序是后进先出
- 可以看到结果是先把函数中内容进行完了之后进行defer里面的,先进行了第二个的输出然后才是第一个
package main
import "fmt"
func main() {
defer fmt.Println("1st example of defer")
fmt.Println("1 defer done,another to go(双关一下)")
defer fmt.Println("i am the second defer")
fmt.Println("about to end...")
}
- go中也有结构体和指针(类比c,不细说)
- 数组和切片,前者就像c中的数组,后者像py中的数组切片,但不能负索引
- 用make来进行动态的建立切片
package main
import "fmt"
func main() {
var arr1 [10]int
for i := 0; i < len(arr1); i++ {
arr1[i] = 10 - i
}
arr2 := [7]int{1, 2, 3, 4, 5, 6}
for i := 0; i < len(arr2); i++ {
fmt.Println(arr2[i])
}
arr3 := arr2[:4]
for i := 0; i < len(arr3); i++ {
fmt.Println(arr3[i])
}
fmt.Println("变大变糕")
fmt.Println(cap(arr3))
fmt.Println(len(arr3))
arr4 := make([]int, 100)
for i := 0; i < len(arr4); i++ {
fmt.Println(arr4[i])
}
}