这是我参与「第五届青训营 」伴学笔记创作活动的第 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
}