这是我参与「第五届青训营」伴学笔记创作活动的第1天
这篇笔记记录了go语言的语法基础,包括主要包括变量、控制语句、数据结构、函数、指针、结构体与结构体方法、异常、内置包
- 从hello world开始
package main import ( "fmt" ) func main() { fmt.Println("hello world") }
2.变量 Go语言有两种变量声明方式
①指定变量数据类型
var b, c int = 1, 2
②根据值自行判断变量类型
var a = "initial"
③:=
g := a + "foo"
3.控制语句
①if语句
与C语言不同的是,可在条件判断时声明变量,如:
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")
}
②for语句
取消了while循环,全部用for实现循环
```
i := 1
for{
fmt.Println("loop")
break
}
for j := 7; j<9; j++ {
fmt.Println(j)
}
for n :=0;n<5;n++ {
if n%2 == 0 {
continue
}
fmt.Println(n)
}
for i<= 3 {
fmt.Println(i)
i = i+ 1
}
```
③switch
没什么特别的,case中后自动跳出Switch
```
a := 2
switch a{
case 1:
fmt.Println("one")
case 2:
fmt.Println("two")
case 3:
fmt.Println("three")
case 4, 5:
fmt.Println("four or five")
default:
fmt.Println("other")
}
```
4.数据结构
①数组
```
var a[5]int
a[4] = 100
fmt.Println(a[4], len(a))
```
②切片
与python的切片很类似
用make语句定义
```
s := make([]string, 3)
```
```
fmt.Println(s[2:5])//输出从第2到第5个,不包括第五个
fmt.Println(s[:5])//输出从第0个到第5个
fmt.Println(s[2:])//输出从第2个到最后一个
```
③map
用make语句定义,索引顺序与加入顺序和key值无关,无序。
```
m := make(map[string]int)//定义一个key为字符串,value为int的map
m["one"] = 1//赋值
r, ok := m["unknow"]//取值,r获取value值,ok获取元素是否存在
```
④range
m := map[string]string{"a": "A", "b": "B"}
for k, v := range m {
fmt.Println(k, v)
}
5.函数
组成结构分别为函数名,参数,返回值
`func exists(m map[string]string, k string) (v string, ok bool) {
v, ok = m[k]
return v, ok
}`
6.指针
与C语言的指针类似
7.结构体和结构体方法
结构体与C语言类似,用点运算符访问。
结构体方法与java中的类方法相似
`type user struct {
name string
password string
}
func (u users)checkPassword(password string) bool {
return u.password == password
}`
8.异常
`func findUser(users []user, name string)(v *user, err error) {
for _,u := range users{
if u.name == name {
return &u, nil
}
}
return nil, errors.New("not found")
}`
9.内置包
go中实现了大量的内置包,如strings、fmt、json、time、strconv、env等,具体使用方法可查阅https://studygolang.com/pkgdoc