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

Golang方向

  1. 区块链

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

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

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

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

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

我们有一个需求

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

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

传统方法可以,但不够好

使用新技术 ajax

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

快速入门案例

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

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

小节

Golang 语言学习 01 包含如何快速学习一门新语言_第1张图片

编程通识基本概念

什么是程序

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

编写源代码
Write source code

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

类比 理解

Golang 语言学习 01 包含如何快速学习一门新语言_第2张图片

什么是指令

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

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. 包的概念
    Go 语言的—个文件都要归属于—个包,而不能单独存在。

Golang 语言学习 01 包含如何快速学习一门新语言_第3张图片

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

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

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

  4. 函数返回多值
    Golang 语言学习 01 包含如何快速学习一门新语言_第4张图片

  5. 切边slice 和 延时执行defer

编辑器

VS code
Sublime Text
Vim
Emacs

环境搭建 + 安装SDK(Mac)

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

下面只是一个例子,具体的路径,需要你在自己电脑上找
Golang 语言学习 01 包含如何快速学习一门新语言_第5张图片
source 一下bashrc

检查是否安装成功

go version

简单程序入门

开发一个hello.go 程序

开发步骤

目录结构

Golang 语言学习 01 包含如何快速学习一门新语言_第6张图片
写程序


package main

import "fmt"

func main() {
    fmt.Println("Hello, world!")
}

执行文件
go run hello.go

或者先

go build hello.go

 ./hello

如果要指定文件名

go build -o myhello.exe hello.go

Golang执行流程

如果是对源码编译后,再执行,Go的执行流程如下图
Golang 语言学习 01 包含如何快速学习一门新语言_第7张图片
如果我们是对源码直接执行 go run 源码,Go 的执行流程如下图
Golang 语言学习 01 包含如何快速学习一门新语言_第8张图片

在VScode编写项目

配置go.mod

要在你创建的project下,通过

go mod init 项目名

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

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

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

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

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

Golang 语言学习 01 包含如何快速学习一门新语言_第9张图片
改成下面可以通过vscode看到输出结果

package main


// import "fmt" //fmt包中提供格式化,输出,输入的函数。

import (
    "log"
)

func main() {
    // fmt.Println("Hello, world!")

    log.Println("Hello world!")
    log.Println("tom\tjack")
}

转义字符

\t 制表符
\n 换行符
\r 回车

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

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)


}

常见问题

文件名 和 路径问题
The system cannot find the file specified.
Golang 语言学习 01 包含如何快速学习一门新语言_第10张图片

官网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个字节)

有符号
Golang 语言学习 01 包含如何快速学习一门新语言_第11张图片
推导

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

无符号
Golang 语言学习 01 包含如何快速学习一门新语言_第12张图片

int其他类型

Golang 语言学习 01 包含如何快速学习一门新语言_第13张图片

浮点类型

float32
float64

字符型

没有,用bye 保存单个字符

布尔型

bool

字符串

string

byte unit8的别名
rune int32的别名

派生/复杂数据类型

指针pointer

数组

结构体 struct

管道channel (多并发)

函数

切片 slice

接口 interface

map

你可能感兴趣的:(golang,学习,开发语言)