Go基础 | 青训营笔记

69 阅读3分钟

这是我参与「第五届青训营 」伴学笔记创作活动的第 1 天

github文件上传和下载

git bash简单操作

进入本地文件夹

cd "D:\Program Files\typoraFile\course\bytedance_5\github"

初始化本地仓库

git init

复制远程仓库文件到本地仓库

git clone https://github.com/wangkechun/go-by-example.git

正文

一、go变量类型

字符串: go语言内置字符串类型,可以用+拼接,可以用==比较

整数

浮点型

布尔型

二、go变量声明

方法 1. var

var a = "hello" //自动识别变量类型
var b, c int = 5, 6 //手动定义变量类型

方法 2. :=

g := a + " world"

三、go常量声明

const a = 5 // 将var换成const即可

四、基础语法

1. if else

if判断条件可以不加小括号 (加了执行时也会自动删除) ,但是执行内容必须加大括号

if a == b {
    fmt.Println("a=b")
}

2.for循环

死循环

for {
    i++
}

正常循环:for循环的三段中任意一端均可以省略

for i := 0; i < n; i++ {
    a = i
    for j := i+1; j < n; j++ {
        if a != i {
            continue
        } 
    }
    break
}  

3.switch

异于c++: c++ 中 case 不加 break 会执行整个 switch 判断,即使匹配到对应的 case ,而 go 匹配到对应的 case 会自动跳出 swich , 不再执行后续语句。

var a = 1
switch a {
case 1:
    fmt.Println("1")
case 2:
    fmt.Println("2")
case 3:
    fmt.Println("3")
case 4:
    fmt.Println("4")
}

4.数组

长度不可变,在 go 中使用较少

var a[5] int
b := [5] int {1, 2, 3, 4, 5}
a[4] = 1
fmt.Println(a[4], b, len(b)) // 1 [1 2 3 4 5] 5

5.切片

可以理解为长度可变的数组,由指针、容量、数组组成,容量不够时会发生扩容,需要重新赋值给原来的变量

s := make([]string, 3)
s[0] = "a"
s[1] = "b"
s[2] = "c"
fmt.Println(s[0],len(s)) // a 3
s = append(s, "d", "e") // 重新赋值给原来的变量
c := make([]string, len(s))
copy(c,s)
fmt.Println(c) // [a b c d e]
fmt.Println( c[1:3] ) // [b c] 左闭右开
fmt.Println( c[:3] ) // [a b c] 左闭右开
fmt.Println( c[1:] ) // [b c d e] 左闭右开

6.map

完全无序

m := make(map[string] int) // 定义map   key是string型 value是int型
m["zhangsan"] = 1 // 写入map
m["lisi"] = 2 // 写入map
fmt.Println(m) // [zhangsan : 1, lisi : 2]
fmt.Println(len(m)) // 2
fmt.Println(m["zhangsan"]) // 1
fmt.Println(m["wangwu"]) // 0 不存在key value为0
r, ok := m["wangwu"]
fmt.Println(r, ok) // 0 false ok判断是否存在key

7.range

和python相似

b := [5] int {1, 2, 3, 4, 5}
//遍历数组
for i, ans := range b {
    fmt.Println(i, ":", ans) // [0:1, 1:2, 2:3, 3:4, 4:5 ] 索引和值
}

当遍历map时也是一样,i为key,ans为value, 也可只遍历 key

8.函数

变量类型后置

原生支持返回多个值

func add(a, b int) int {
    c, ok := a
    return c + b
}

9.指针

相比于c++中的指针,go语言指针支持的操作有限,主要用途是对传入的参数进行修改

func add(n *int) {
    *n += 2
}
func main() {
    n := 5
    add(&n)
    fmt.Println(n) //7
}

10.结构体

// 定义结构体
type user struct {
    name string
    password string
}
//结构体方法
func (u user) checkPassword(password string) bool {
    return u.password = password
}
func main() {
    // 三种创建结构体的方式
    var a user
    
    b := user{"laozhang", "123456789"}
    
    c := user{"laozwang"}
    c.password = 12345
    fmt.Println( b.checkPassword("123456788") ) //false
}