这是我参与「第三届青训营 -后端场」笔记创作活动的的第一篇笔记
GO语言基础
GO语言的背景和特点
Go语言官方自称,之所以开发Go 语言,是因为“近10年来开发程序之难让我们有点沮丧”。 这一定位暗示了Go语言希望取代C和Java的地位,成为最流行的通用开发语言。
对于Go语言的特性来说最主要的是如下几个方面:
- 自动垃圾回收
- 更丰富的内置类型
- 函数多返回值
- 错误处理
- 匿名函数和闭包
- 类型和接口
- 并发编程
- 反射
- 语言交互性
Go语言基础语法
第一个Go程序
经久不衰的Hellow World
package main
import "fmt"// 使用fmt包中的Println()函数
func main() {//这里要注意,大括号必须在本行!
fmt.Println("Hello world")
}
这样就可以运行出Hello world了
Go语言中的变量和变量声明
变量(variable)的定义在Go语言中的变量使用与C语言类似,但是比C语言更灵活也更具简洁 在GO语言中变量的定义为
var 变量名称 变量类型 var是“变量”英文名称的缩写,因此不难理解Go中对于变量定义的形式
- 变量的声明:
var v1 int //整型
var v2 string //字符串型
var v3 [10]int // 数组
var v4 []int // 数组切片
var v5 struct { //结构体型
f int
}
var v6 *int // 指针
var v7 map[string]int // map,key为string类型,value为int类型
- 变量的初始化: Go中常见的变量初始化有三种
var v1 int=1
var v2=2
v3 :=3
- Go中的切片:
- 切片是一个可变长度的数组,并且切片是引用传递,数组是值传递。你可以任意时刻更改切片的长度。切片可以用make创造,并且分配容量。切片可以用append追加容量和数值,但增加后必须要有一个接收值,他对于原切片并不会改变。
- slice实际上是存储了一个 长度加容量加上一个指向数组的指针。
举个例子:
package main
import "fmt"
func main() {
// 先定义一个数组
var Array [10]int = [10]int{1, 2, 3, 4, 5, 6, 7, 8, 9, 10}
// 基于数组创建一个数组切片
var Slice []int = Array[:5]
fmt.Println("Elements of Array: ")
for _, v := range Array {
fmt.Print(v, " ")
}
fmt.Println("\nElements of mySlice: ")
for _, v := range Slice {
fmt.Print(v, " ")
}
fmt.Println()
}
运行结果为:
-
Go语言中的range:
使用range可以快速遍历;
遍历数组的时候会返回两个值,第一个值为数组下标,第二个值为数组下标所对应的值。
遍历map的时候 第一个返回值是key 第二个值是value(遍历的结果也是随机出现的,因为map是无序的。)
-
Go语言中的map: 在大多数语言中,map一般都是以库的方式只提供,而在Go中则不需要引入库
package main
import "fmt"
// PersonInfo是一个包含个人详细信息的类型
type PersonInfo struct {
ID string
Name string
Address string
}
func main() {
var personDB map[string] PersonInfo
personDB = make(map[string] PersonInfo)
// 往这个map里插入几条数据
personDB["12345"] = PersonInfo{"12345", "Tom", "Room 203,..."}
personDB["1"] = PersonInfo{"1", "Jack", "Room 101,..."}
// 从这个map查找键为"1234"的信息
person, ok := personDB["1234"]
// ok是一个返回的bool型,返回true表示找到了对应的数据
if ok {
fmt.Println("Found person", person.Name, "with ID 1234.")
} else {
fmt.Println("Did not find person with ID 1234.")
}
}
- Go语言中字符串操作:
package main
import (
"fmt"
"strings"
)
func main() {
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
}
总结:这是我将自己的所学所总结出来的,不乏有些不够全面,坚持下来!