自己的golang学习及速查笔记——基本语法

1. 变量

1.1 基本类型、引用类型、结构类型

Go语言的基本类型有:

  • bool
  • string
  • int、int8、int16、int32、int64
  • uint、uint8、uint16、uint32、uint64、uintptr
  • byte // uint8 的别名
  • rune // int32 的别名 代表一个 Unicode 码
  • float32、float64
  • complex64、complex128

Go语言的引用类型:
切片、映射、通道、接口和函数类型

结构类型

1.2 变量的声明

标准格式

Go 语言的变量声明的标准格式为:

var 变量名 变量类型

变量声明以关键字 var 开头,后置变量类型,行尾无须分号。

批量格式

觉得每行都用 var 声明变量比较烦琐?没关系,还有一种为懒人提供的定义变量的方法:

var (
    a int
    b string
    c []float32
    d func() bool
    e struct {
        x int
    }
)

简短格式

名字 := 表达式
a, s := 1, "abc"

例子

package main
import "fmt"
func main() {
	
	var 可以声明 1 个或者多个变量。
    var a string = "initial"
    
	你可以申明一次性声明多个变量。
    var b, c int = 1, 2
    
	Go 将自动推断已经初始化的变量类型。
    var d = true
    
	声明变量且没有给出对应的初始值时,变量将会初始化为零值 。例如,一个 int 的零值是 0var e int
    
	:= 语句是申明并初始化变量的简写,例如这个例子中的 var f string = "short"。
    f := "short"
}

1.3 变量的初始化

变量初始化的标准格式

var 变量名 类型 = 表达式
var hp int = 100

编译器推导类型的格式

在标准格式的基础上,将 int 省略后,编译器会尝试根据等号右边的表达式推导 hp 变量的类型。

var hp = 100

短变量声明并初始化

var 的变量声明还有一种更为精简的写法,例如:

hp := 100

多重赋值(初始化、交换、返回值)

var a int = 100
var b int = 200
b, a = a, b
fmt.Println(a, b)

多重赋值时,变量的左值和右值按从左到右的顺序赋值。
多重赋值在 Go 语言的错误处理和函数返回值中会大量地使用。

扫描二维码关注公众号,回复: 8622917 查看本文章

2. 常量

package main
import "fmt"
import "math"

const 用于声明一个常量。
const s string = "constant"

func main() {

	const 语句可以出现在任何 var 语句可以出现的地方
    const n = 500000000
    
	常数表达式可以执行任意精度的运算
    const d = 3e20 / n
    
	数值型常量是没有确定的类型的,直到它们被给定了一个类型,比如说一次显示的类型转化。
    fmt.Println(int64(d))
    
	当上下文需要时,一个数可以被给定一个类型,比如变量赋值或者函数调用。举个例子,这里的 math.Sin函数需要一个 float64 的参数。
    fmt.Println(math.Sin(n))
}

3. 循环

3.1 普通循环

package main
import "fmt"

func main() {

	最常用的方式,带单个循环条件。
    i := 1
    for i <= 3 {
        fmt.Println(i)
        i = i + 1
    }
    
	经典的初始化/条件/后续形式 for 循环。
    for j := 7; j <= 9; j++ {
        fmt.Println(j)
    }
    
	不带条件的 for 循环将一直执行,直到在循环体内使用了 break 或者 return 来跳出循环。
    for {
        fmt.Println("loop")
        break
    }
}

3.2 range循环

需要强调的是,range 创建了每个元素的副本,而不是直接返回对该元素的引用。因此直接改变value是没用用的。

arr := [3]int{1, 4, 5}

for index, value := range arr {
    fmt.Println(index, value)
}

对数组使用range会自动迭代,并在每次迭代返回两个值,第一个是索引,第二个是值,但是在go语言中,只要定义的变量就必须使用,而且我们常常用不到索引,那么怎么办呢?
用单下划线来替代索引,这样就省略了变量的定义。

for _, v := range arr {
    fmt.Println(v)
}

4. 条件

package main
import "fmt"

func main() {

	这里是一个基本的例子。
    if 7%2 == 0 {
        fmt.Println("7 is even")
    } else {
        fmt.Println("7 is odd")
    }
    
	你可以不要 else 只用 if 语句。
    if 8%4 == 0 {
        fmt.Println("8 is divisible by 4")
    }
    
	在条件语句之前可以有一个语句;任何在这里声明的变量都可以在所有的条件分支中使用。
    if num := 9; num < 0 {
        fmt.Println(num, "is negative")
    } else if num < 10 {
        fmt.Println(num, "has 1 digit")
    } else {
        fmt.Println(num, "has multiple digits")
    }
}

5. switch



 1 package main
 2 import "fmt"
 3 import "time"
 4 func main() {
 
 5     一个基本的 switch7     i := 2
 8     fmt.Print("write ", i, " as ")
 9     switch i {
10     case 1:
11         fmt.Println("one")
12     case 2:
13         fmt.Println("two")
14     case 3:
15         fmt.Println("three")
16     }


17 	   在一个 case 语句中,你可以使用逗号来分隔多个表达式。在这个例子中,我们很好的使用了可选的default 分支。
19     switch time.Now().Weekday() {
20     case time.Saturday, time.Sunday:
21         fmt.Println("it's the weekend")
22     default:
23         fmt.Println("it's a weekday")
24     }


25     不带表达式的 switch 是实现 if/else 逻辑的另一种方式。这里展示了 case 表达式是如何使用非常量的。
27     t := time.Now()
28     switch {
29     case t.Hour() < 12:
30         fmt.Println("it's before noon")
31     default:
32         fmt.Println("it's after noon")
33     }
34 }
发布了113 篇原创文章 · 获赞 6 · 访问量 7124

猜你喜欢

转载自blog.csdn.net/swallowblank/article/details/100185908
今日推荐