GO语言开学第一课 基础语言篇 | 青训营笔记

136 阅读3分钟

博客图片.webp 这是我参与「第三届青训营 -后端场」笔记创作活动的的第一篇笔记

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()
}

运行结果为:

QQ图片20220605170934.png

  • 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
}

总结:这是我将自己的所学所总结出来的,不乏有些不够全面,坚持下来!