GO语言基础-基础语法| 青训营笔记

113 阅读4分钟

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

一、本堂课重点内容:

  • 配置go语言环境
  • 了解go语言基础语法
  • 理解一些简单项目的代码原理

二、详细知识点介绍:

1.1什么是go语言

go语言是谷歌出品的一门编程语言,具有高性能、高并发的特点。

其语法简单易懂,go语言风格像C语言并且进行了大幅度的简化,学习曲线平缓。

同时它还具有功能丰富,质量完善的标准库,不需要借助第三方库就能完成大部分基础功能的开发。

go语言还具有静态语言里几乎最快的编译速度,这个速度对于C++开发者来说简直不可想象。

go语言也支持跨平台,像windows,linux等操作系统都支持运行。

go语言自带垃圾回收,写代码时无需考虑内存的分配释放。

2.1开发环境安装

略(注意安装goland的话学生可以免费申请使用)

2.2基础语法

变量:

Go 语言变量名由字母、数字、下划线组成,其中首个字符不能为数字。一般声明变量是使用var关键字,可以一次声明多个变量,如下列代码示例

package main

import (
   "fmt"
   "math"
)

func main() {

   var a = "initial"

   var b, c int = 1, 2

   var d = true

   var e float64

   f := float32(e)

   g := a + "foo"
   fmt.Println(a, b, c, d, e, f) // initial 1 2 true 0 0
   fmt.Println(g)                // initialapple

   const s string = "constant"
   const h = 500000000
   const i = 3e20 / h
   fmt.Println(s, h, i, math.Sin(h), math.Sin(i))
}

if else:

和C语言没有什么太大区别,就是条件语句不需要加括号了

循环:

go语言只有for循环,但是其for循环有多种形式。可以像C语言一样的for循环,也可以像python一样的range格式对数组等数据结构进行迭代循环

switch:

比C语言更方便,判断条件可以不止为整数值,类似if语句一样条件可以为语句,并且进入条件之后不会继续往下执行语句。

数组;

可以像C语言一样直接找下标,也可以像python一样进行切片操作,注意数组初始化,参考下面代码示例

package main

import "fmt"

func main() {

   var a [5]int
   a[4] = 100
   fmt.Println("get:", a[2])//get: 0
   fmt.Println("len:", len(a))//len: 5

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

   var twoD [2][3]int
   for i := 0; i < 2; i++ {
      for j := 0; j < 3; j++ {
         twoD[i][j] = i + j
      }
   }
   fmt.Println("2d: ", twoD)//2d: [[0 1 2] [1 2 3]]
}

切片(动态数组):

切片相比于数组其长度不固定,可以追加元素,使用make函数来初始化切片,还可以用len函数获取长度并且可以用cap()函数测量切片最长可以达到多少。如果想增加切片容量必须创造一个新的更大的切片并用copy()函数拷贝原切片

map:

类似C语言的unordermap,内部是无序的,可以用make函数来进行初始化。也可以用delete删除索引

函数;

基本和C语言类似,只是返回值经常是多个值。

指针:

go语言里面的指针的一个用途就是传给函数地址,使得在函数里改的是原本的值而不是拷贝后的新值

结构体:

和C语言类似,不过多赘述

结构体方法:

注意不是写在结构体内部而是外部的

字符串操作:

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
   fmt.Println(len(a))                                   // 5
   b := "你好"
   fmt.Println(len(b)) // 6
}

三、实践练习例子:

1.猜谜游戏

这个项目注意是了解输入输出,注意seed要给个种子,不然随机没有效果。

2.在线词典

主要了解如何抓包,并利用代码生成工具来生成代码

3.SOCKS5代理

主要是计算机网络安全知识以及实现

四、课后个人总结:

主要还是项目实现,尤其是最后一个项目SOCKS5代理部分原理的理解困难,总的来说go语言的语法还是简单的。

五、引用参考:

第五届字节跳动青训营 Go语言基础-基础语法