这是我参与「第五届青训营 」伴学笔记创作活动的第 1 天
一、本堂课重点内容
本堂课首先对go语言进行了简要介绍;然后进行了一个go语言的入门,讲解了相应的开发环境、一些基础语法和go的一些标准库
二、详细知识点介绍
1.go语言特点
据了解,字节跳动已经全面拥抱了go语言,同时开源了GO RPC框架KiteX。腾讯、百度、美团、滴滴、等互联网大公司也在大量使用Go语言。国外Google Facebook等公司也在大量使用Go语言。Go语言能够做到如此,是由于它具有很多优点:1.高性能高并发。go语言的开发就是为了高并发场景,其自带go routine可以进行并发;2语法简单,学习曲线平滑。在学习中发现很多c系语言的影子;3.具有丰富的标准库;4.具有完善的工具链;5.静态链接;6.跨素编译;7.跨平台;8.具有自己的垃圾回机制,和java语言相似,不需要程序员手动进行垃圾回收。
2.编译器推荐
推荐使用Goland或Visual Studio Code 搭配go相关的插件。
3.基础语法
首先引库是通过
import (
"fmt"
)
即可引入标准输入输出库。 一些关键字:
func //函数关键字
const //常量
var //变量
变量申明:go语言是一门强类型语言,每一个变量都有它自己的变量类型。常见的变量类型包括字符串、整数、浮点型、布尔型等。在go语言里面,大部分运算符的使用和优先级都和 C 或者 C++ 类似。 下面讲述go语言里面的变量的声明,在go语言里面变量的声明有两种方式,一种是通过 var name string = "" 这种方式来声明变量,声明变量的时候,一般会自动去推导变量的类型。如果有需要,也可以显示写出变量类型。另一种声明变量的方式是: 使用变量 冒号 := 等于值。 go语言里面的常量没有确定的类型,会根据使用的上下文来自动确定类型。
循环结构:go语言中循环结构只有for。它可以通过不同的写法当作while使用
//for 使用方法:与c中相似,但条件部分不用括号
for j := 7; j < 9; j++ {
fmt.Println(j)
}
//充当while的使用格式:
for i <= 3 {
fmt.Println(i)
i = i + 1
}
if 结构的条件同样不需要括号:
if 7%2 == 0 {
fmt.Println("7 is even")
} else {
fmt.Println("7 is odd")
}
switch结构的case可以使用变量,同时不需要写break也只执行一个就跳出。它也可以用于多个if-else看起来复杂的情况如下:
switch {
case t.Hour() < 12:
fmt.Println("It's before noon")
default:
fmt.Println("It's after noon")
}
slice:切片。是go中常用的数据结构,底层是一个变长的数组,使用如下:
//创建
s := make([]string, 3)
注意:切片有两个属性,一个length长度,表示当前切片中存储的元素数量。一个是capacity容量,表示这个切片还能够装多少元素而不需要扩容。当容量满的时候可以继续给切片中加值,但是底层会复制原切片所有的值并拷贝到一个新创建的容量更大的切片中。
//添加
s = append(s, "d")
s = append(s, "e", "f")
//将s复制给c
c := make([]string, len(s))
copy(c, s)
map:即python中字典。
//创建方法1:
m := make(map[string]int)
m["one"] = 1
m["two"] = 2
//创建方法2:
m2:= map[string]int{"one":1,"two":2}
//创建方法3:
var m3 = map[string]int{"one":1,"two":2}
fmt.Println(m["hhh"])
//输出为0,碰到没有的键值时会返回默认的值
v,ok := m["hhh"]
//输出为0,false,可以用来判断键值是否存在于该map中。
结构体:通过type关键字创建,其他用法与c基本一样。
type user struct {
name string
password string
}
string:go中内置string结构,用法如下:
a := "hello"
fmt.Println(strings.Contains(a, "ll")) // true
fmt.Println(strings.Count(a, "l")) // 2
fmt.Println(strings.HasPrefix(a, "he")) // true
fmt.Println(strings.HasSuffix(a, "llo")) // true
fmt.Println(strings.Index(a, "ll")) // 2
fmt.Println(strings.Join([]string{"he", "llo"}, "-")) // he-llo
fmt.Println(strings.Repeat(a, 2)) // hellohello
fmt.Println(strings.Replace(a, "e", "E", -1)) // hEllo
fmt.Println(strings.Split("a-b-c", "-")) // [a b c]
fmt.Println(strings.ToLower(a)) // hello
fmt.Println(strings.ToUpper(a)) // HELLO
fmt.Println(len(a)) // 5
b := "你好"
fmt.Println(len(b)) // 6
三、总结
go语言的基础语法有很多与c的相似之处,但是也有很多不同。它更加的简洁易学。