当前位置: 首页 > news >正文

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

Golang方向

  1. 区块链

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

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

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

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

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

我们有一个需求

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

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

传统方法可以,但不够好

使用新技术 ajax

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

快速入门案例

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

讨论新技术/知识点 的细节(这里非常考察程序员的水平)
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. 包的概念
    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

简单程序入门

开发一个hello.go 程序

开发步骤

目录结构

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


package mainimport "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的执行流程如下图
在这里插入图片描述
如果我们是对源码直接执行 go run 源码,Go 的执行流程如下图
在这里插入图片描述

在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 文件,以确保依赖项版本的一致性。

在这里插入图片描述
改成下面可以通过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 mainimport ("log""fmt" //fmt包中提供格式化,输出,输入的函数。
)func getVal(num1 int, num2 int) (int, int) {sum := num1 + num2sub := num1 - num2return 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.
在这里插入图片描述

官网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

http://www.lryc.cn/news/181881.html

相关文章:

  • 整理了197个经典SOTA模型,涵盖图像分类、目标检测、推荐系统等13个方向
  • 10.4 小任务
  • AJAX--Express速成
  • 开题报告 PPT 应该怎么做
  • JavaScript系列从入门到精通系列第十四篇:JavaScript中函数的简介以及函数的声明方式以及函数的调用
  • 当我们做后仿时我们究竟在仿些什么(三)
  • 如何将超大文件压缩到最小
  • [C#]C#最简单方法获取GPU显存真实大小
  • 【数据结构】红黑树(C++实现)
  • day-64 代码随想录算法训练营(19)图论 part 03
  • xss测试步骤总结
  • 2023最新简易ChatGPT3.5小程序全开源源码+全新UI首发+实测可用可二开(带部署教程)
  • 【Redis】数据过期策略和数据淘汰策略
  • RPA的优势和劣势是什么,RPA能力边界在哪里?
  • Kubernetes 学习总结(38)—— Kubernetes 与云原生的联系
  • 号卡推广管理系统源码/手机流量卡推广网站源码/PHP源码+带后台版本+分销系统
  • 【C语言】汉诺塔 —— 详解
  • 【云备份】
  • 第四十六章 命名空间和数据库 - 系统提供的数据库
  • 【贪心的商人】python实现-附ChatGPT解析
  • 解决nvm切换node版本失败的终极办法-秒杀网上99%的水文
  • 2023蓝帽杯半决赛电子取证+CTF部分题解
  • OCTA数据集(Rose)+ OCTA-Net
  • java Spring Boot 手动启动热部署
  • Autosar诊断实战系列20-UDS首帧数据接收及流控帧发送代码级分析
  • C/C++ 数据结构 - 队列
  • 免杀对抗-DLL劫持免杀
  • Anaconda添加channels后出现unexpected urllib3 DEBUG logging from conda-build
  • python 将二维数组的数据保存到csv文件中
  • UGUI交互组件Button