• Golang 语言学习 01 包含如何快速学习一门新语言


    Golang方向

    1. 区块链

    2. go服务器端 (后台流量支撑程序)

    支撑主站后台流量(排序,推荐,搜索等),提供负载均衡,cache,容错,按条件分流,统计运行指标 (qps, latency 中)等功能

    1. 游戏软件(数据平台)

    2. golang分布式/云计算/云服务

    如何快速深入学习新技术 or 知识点

    我们有一个需求

    1. 项目开发时,我们需要解决某个问题
    2. 跳槽,学习新技术

    先看现有技术是否可以解决

    传统方法可以,但不够好

    使用新技术 ajax

    解决快速入门问题
    1. 学习基本原理 和 基本语法

    快速入门案例

    案例要求:
    			1. 简单
    			2. 了解新技术 or 知识点的 基本适用
    			3. 不涉及 技术细节
    
    • 1
    • 2
    • 3
    • 4

    讨论新技术/知识点 的细节(这里非常考察程序员的水平)
    1. 怎么使用规范
    2. 使用陷阱
    3. 使用时,需要注意什么

    小节

    在这里插入图片描述

    编程通识基本概念

    什么是程序

    完成某个功能指令的集合。

    编写源代码
    Write source code

    源代码编译 得到 二进制可移植性文件
    Compile source code to obtain binary portability files

    类比 理解

    在这里插入图片描述

    什么是指令

    程序是 一系列 有序 指令的集合。

    Go语言发展史

    核心开发人员

    Ken Thompson: C语言 和 B语言 发明人
    Rob Pike: Unix团队成员, BEll Labs
    Rovert Griesemer: Java的HotSpot编辑器,Chrome浏览JS

    长处

    可以合理利用多核多CPU
    风格统一
    计算能力增强
    处理大并发
    C/C++ 运行快,但是编译慢,而且内存泄露

    时间

    2007开始
    2009 开源
    2015 1.5版本
    2018 Go 1.10

    Go特点

    Go = C + Python
    继承 C, 存在 参数调用 和 指针

    1. 指针
    func testPtr(num *int) {
    		*num =20
    }
    
    • 1
    • 2
    • 3
    1. 包的概念
      Go 语言的—个文件都要归属于—个包,而不能单独存在。

    在这里插入图片描述

    1. 垃圾回收机制
      内存自动回收

    2. 天然并发
      goruitine 轻量级线程, 实现 大并发处理
      局域CPS并发模型 Communicating Sequential Processes实现

    3. 管道通信机制
      channel 实现 goroute 之间相互通信

    4. 函数返回多值
      在这里插入图片描述

    5. 切边slice 和 延时执行defer

    编辑器

    VS code
    Sublime Text
    Vim
    Emacs

    环境搭建 + 安装SDK(Mac)

    bashrc配置环境变量路径
    我用的是bash
    所以打开根目录下的bashrc添加go的路径就好了

    下面只是一个例子,具体的路径,需要你在自己电脑上找
    在这里插入图片描述
    source 一下bashrc

    检查是否安装成功

    go version
    
    • 1

    简单程序入门

    开发一个hello.go 程序

    开发步骤

    目录结构

    在这里插入图片描述
    写程序

    
    package main
    
    import "fmt"
    
    func main() {
        fmt.Println("Hello, world!")
    }
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9

    执行文件
    go run hello.go

    或者先

    go build hello.go
    
    • 1

     ./hello
    
    • 1

    如果要指定文件名

    go build -o myhello.exe hello.go
    
    • 1

    Golang执行流程

    如果是对源码编译后,再执行,Go的执行流程如下图
    在这里插入图片描述
    如果我们是对源码直接执行 go run 源码,Go 的执行流程如下图
    在这里插入图片描述

    在VScode编写项目

    配置go.mod

    要在你创建的project下,通过

    go mod init 项目名
    
    • 1

    生成一个go.mod配置
    用于管理模块依赖关系的文件

    模块路径(Module Path):go.mod 文件中包含了当前项目的模块路径,模块路径是项目在代码仓库中的唯一标识符,通常以域名逆序形式(例如 github.com/user/project)。

    依赖项管理:go.mod 文件列出了项目所依赖的其他模块以及它们的版本信息。这些依赖项通常包括项目引用的外部库。Go 模块系统会确保依赖项的版本不会与其他依赖项冲突,以确保构建稳定的代码。

    版本信息:对于每个依赖项,go.mod 文件记录了所使用的版本号或版本范围,以确保项目在不同的构建之间具有一致的依赖关系。

    自动依赖管理:Go 模块系统允许开发者引入新的依赖项,同时自动更新 go.mod 文件,以确保依赖项版本的一致性。

    在这里插入图片描述
    改成下面可以通过vscode看到输出结果

    package main
    
    
    // import "fmt" //fmt包中提供格式化,输出,输入的函数。
    
    import (
        "log"
    )
    
    func main() {
        // fmt.Println("Hello, world!")
    
        log.Println("Hello world!")
        log.Println("tom\tjack")
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15

    转义字符

    \t 制表符
    \n 换行符
    \r 回车
    
    • 1
    • 2
    • 3

    改进,并增加 测试 两个输出的

    package main
    
    
    import (
        "log"
        "fmt" //fmt包中提供格式化,输出,输入的函数。
    )
    
    func getVal(num1 int, num2 int) (int, int) {
        
        sum := num1 + num2
        sub := num1 - num2
    
        return sum, sub
    }
    
    func main() {
        // fmt.Println("Hello, world!")
    
        log.Println("Hello world!")
        log.Println("tom\tjack")
        // log.Println("天龙八部\r张飞")
        fmt.Println("天龙八部\r张飞")
    
        // a, b := getVal(1, 2)
        a, b := getVal(1, 2)
    	fmt.Println("Sum:", a)
    	fmt.Println("Subtraction:", b)
    
    
        var str1 = "hello1"
        var str2 = "world2"
    
        fmt.Println(str1 + str2)
    
    
    }
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38

    常见问题

    文件名 和 路径问题
    The system cannot find the file specified.
    在这里插入图片描述

    官网Doc

    https://go.dev/learn/
    https://go.dev/tour/welcome/1

    中文文档
    https://studygolang.com/pkgdoc

    API

    application program interface
    包的应用的各个接口

    数据类型

    data type

    基本数据类

    整数类型

    int
    int8 (1个字节)
    int16 (2个字节)
    int32 (4个字节)
    int64 (8个字节)

    有符号
    在这里插入图片描述
    推导

    第一位用来表示符号位
    其余用来表示数值大小
    所以 int8
    是 -2的7次方 到 2 七次方-1

    无符号
    在这里插入图片描述

    int其他类型

    在这里插入图片描述

    浮点类型

    float32
    float64

    字符型

    没有,用bye 保存单个字符

    布尔型

    bool

    字符串

    string

    byte unit8的别名
    rune int32的别名

    派生/复杂数据类型

    指针pointer

    数组

    结构体 struct

    管道channel (多并发)

    函数

    切片 slice

    接口 interface

    map

  • 相关阅读:
    Vue-2.8插槽
    蓝桥杯刷题day13——乘飞机【算法赛】
    84 柱状图中的最大的矩形(单调栈)
    Linux使用systemctl实现开机自启动
    Redis篇 String的基本命令
    数据分箱(分层)的几种方法
    python Playwright优化页面等待和处理异步操作
    中贝通信-603220 三季报分析(20231120)
    sql:group by和聚合函数的使用
    Ubuntu18.04添加rc.local启动项
  • 原文地址:https://blog.csdn.net/weixin_46969441/article/details/133534702