###常见问题
-
if else语句
else { 必须和 if 的 } 在同一行 -
在调用函数时,注意函数的参数和返回值。
eg:
/*type Time struct {
sec int64 // 从1年1月1日 00:00:00 UTC 至今过去的秒数
nsec int32 // 最近一秒到下一秒过去的纳秒数
loc *Location // 时区
}*/
//获得现在的日期
// time.Time 类型
// today := 切片使用必须是没有被定义过的,不能够跟函数参数相同
func getWeekday(t time.Time) {
today := time.Now().Weekday()
switch time.Saturday {
case today + 0:
fmt.Println("today")
case today + 1:
fmt.Println("tomorrow")
case today + 2:
fmt.Println("in tow days")
case today + 5:
fmt.Println("today is Mondy")
default:
fmt.Println("xixi")
}
}
func main(){
var today time.Time
//调用函数时注意 函数的参数和返回值
getWeekday(today)
- switch 可以没有条件
switch{
case:
case:
default:
}
-
defer 语句会将函数推迟到外层函数返回之后执行。
原理:推迟的函数调用会被压入一个栈中。当外层函数返回时,被推迟的函数会按照后进先出的顺序调用。 -
特殊的前缀 & 返回一个指向结构体的指针。
// 创建一个 *Vertex 类型的结构体(指针)
p = &Vertex{1, 2}
//创建结构体
v2 := struct1{5, 6}
v3 := struct1{x1: 5} //y:0 隐形赋值
v4 := struct1{} // x,y = 0
p = &struct1{2, 6}
fmt.Println(v2, v3, v4, p, *p)
{5 6} {5 0} {0 0} &{2 6} {2 6}
- append 的第一个参数 s 是一个元素类型为 T 的切片,其余类型为 T 的值将会追加到该切片的末尾。
append 的结果是一个包含原切片所有元素加上新添加元素的切片。
var s []int
// 可以一次性添加多个元素
s = append(s, 2, 3, 4)
- 使用for 循环类型的 range 遍历切片,一次返回两个值:下标和对应的副本
可以将下标或值赋予 _ 来忽略它。
xixi := []int{5, 9, 6, 7, 66, 49, 1}
for i, v := range xixi {
fmt.Println(i, v)
}
for i, _ := range xixi //省略值
for _, value := range xixi //省略下标