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

news2024/12/25 15:01:30

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

官网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.coloradmin.cn/o/1059516.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

java飞机大战

一、 概述 1.1 项目简介 本次Java课程设计是做一个飞机大战的游戏,应用Swing编程,完成一个界面简洁流畅、游戏方式简单,玩起来易于上手的桌面游戏。该飞机大战项目运用的主要技术即是Swing编程中的一些窗口类库、事件监听以及贴图技术。 1…

微信小程序WebSocket实现stream流式聊天对话功能

要在微信小程序实现聊天对话功能,回话是流式应答,这里使用了WebSocket技术。WebSocket大家应该都很熟悉,使用wx.connectSocket就可以了。这里可能需要注意下的是流式应答,后端如何发送,前端如何接收。直接上代码&#…

【1】c++设计模式——>UML类图的画法

UML介绍 UML:unified modeling language 统一建模语言 面向对象设计主要就是使用UML类图,类图用于描述系统中所包含的类以及他们之间的相互关系,帮助人们简化对系统的理解,他是系统分析和设计阶段的重要产物,也是系统编码和测试的…

小程序 用户反馈 与 客服对话 使用说明

在开发小程序时,通过翻阅官方文档,会发现 button 的 open-type 属性有很多值可以选。因此,我们就可以实现相应的按钮功能。 微信开发文档-表单组件-buttonhttps://developers.weixin.qq.com/miniprogram/dev/component/button.html contact…

嵌入式学习笔记(44)S5PV210的SD卡启动实战

8.5.1任务:大于16KB的bin文件使用SD卡启动 (1)总体思路:将我们的代码分为2部分,第一部分BL1小于等于16KB,第二部分为任意大小,iROM代码执行完成后从SD卡启动会自动读取BL1到iRAM中执行;BL1执行时负责初始化…

ChatGPT启蒙之旅:弟弟妹妹的关键概念入门

大家好,我是herosunly。985院校硕士毕业,现担任算法研究员一职,热衷于机器学习算法研究与应用。曾获得阿里云天池比赛第一名,CCF比赛第二名,科大讯飞比赛第三名。拥有多项发明专利。对机器学习和深度学习拥有自己独到的见解。曾经辅导过若干个非计算机专业的学生进入到算法…

腾讯云服务器哪个配置比较值得?

腾讯云服务器哪款配置比较好值得买?轻量应用服务器性价比值得买,轻量2核2G3M带宽95元一年、2核4G5M带宽218元一年、2核2G4M带宽三年540元一年、4核8G12M配置446元一年、8核16G18M带宽1668元15个月、16核32G28M轻量服务器3468元15个月。腾讯活动入口&…

tiny模式基本原理整合

【Tiny模式】的基本构成 M【首头在首位】 U【/】 V【HTTP/】 Host H【真实ip】 XH \r回车 \n换行 \t制表 \ 空格 一个基本的模式构成 [method] [uri] [version]\r\nHost: [host]\r\n[method] [uri] [version]\r\nHost: [host]\r\n 检测顺序 http M H XH 有些地区 XH H M 我这边…

lenovo联想台式机 拯救者 刃7000-28ICBR(90KX)原装出厂Windows10系统镜像

LENOVO联想拯救者(90KX)原厂WIN10系统 下载链接:https://pan.baidu.com/s/1beocPJSmnFbY4Y_ZQM2djA?pwd4d1n 系统自带所有驱动、出厂主题壁纸LOGO、Office办公软件、联想电脑管家等预装程序 所需要工具:16G或以上的U盘 文件格式:ISO 文件大…

华为云云耀云服务器L实例评测|云耀云服务器L实例部署ZFile在线网盘服务

华为云云耀云服务器L实例评测|云耀云服务器L实例部署ZFile在线网盘服务 一、云耀云服务器L实例介绍1.1 云耀云服务器L实例简介1.2 云耀云服务器L实例特点 二、ZFile介绍2.1 ZFile简介2.2 ZFile特点 三、本次实践介绍3.1 本次实践简介3.2 本次环境规划 四、购买华为云…

《幸福之路》罗素(读书笔记)

目录 作者简介 作者的感悟 经典摘录 一、不幸福的成因 1、一部分要归咎于社会制度 2、一部分则得归咎于个人心理——当然,你可以说个人心理是社会制度的产物。 二、欠缺某些想要的东西,是快乐的必要条件 三、无聊与刺激 四、现代人的精神疲劳 五…

word已排序好的参考文献,插入新的参考文献,序号更新

原排序好的文献序号。 现在在3号后面插入一个新文献。4,5号应该成为5,6 这时在3号后面,回车,就会自动的增长。如下图: 但是如果手滑,把[4]删除了如何排序?? 如下图: …

基于Java的医院药品管理系统设计与实现(源码+lw+部署文档+讲解等)

文章目录 前言具体实现截图论文参考详细视频演示为什么选择我自己的网站自己的小程序(小蔡coding)有保障的售后福利 代码参考源码获取 前言 💗博主介绍:✌全网粉丝10W,CSDN特邀作者、博客专家、CSDN新星计划导师、全栈领域优质创作…

聊天记录一句一句出现的视频制作,制作抖音聊天记录视频教程

聊天记录情感中视频制作工具是一款专注于将聊天记录转化为抖音视频的工具。它可以将平淡的聊天截图转化为生动有趣的视频,让你的回忆变得更加具有观赏性和情感共鸣。 首先,聊天记录一句一句出现的视频制作功能是该工具的一大特点。通过这个功能&#xf…

应力分析概要

1.概述 应力分析是一种用于结构件寿命分析的方法,最早的应用场景可能是路桥,因为西方提前我们两百年以上进入大工业时代。许多人工建筑的寿命是有限的,这类实际需求催生出寿命预测和诊断。结构件的失效,最根本的因素是因为应力的…

基于Matlab求解高教社杯全国大学生数学建模竞赛(CUMCM2004A题)-奥运会临时超市网点设计(附上源码+数据)

文章目录 题目思路源码数据下载 题目 2008年北京奥运会的建设工作已经进入全面设计和实施阶段。奥运会期间,在比赛主场馆的周边地区需要建设由小型商亭构建的临时商业网点,称为迷你超市(Mini Supermarket, 以下记做MS)网&#xf…

mybatis项目启动报错:reader entry: ���� = v

问题再现 解决方案一 由于指定的VFS没有找,mybatis启用了默认的DefaultVFS,然后由于DefaultVFS的内部逻辑,从而导致了reader entry乱码。 去掉mybatis配置文件中关于别名的配置,然后在mapper.xml文件中使用完整的类名。 待删除的…

排序---P1781 宇宙总统

思路: 当我们要对这些超大数进行比较排序时,如果我们用int或long基本数据类型时,会超出能承载的范围,因此我们选择用引用数据类型:BigDecimal或BigInteger。 区别在于基本数据类型直接比较大小,而是调用这…

平面图—简单应用

平面图:若一个图𝐺能画在平面𝑆上,且使𝐺的边仅在端点处相交,则称图𝐺为可嵌入平面𝑆,𝐺称为可平面图,简称为平面图。 欧拉公式:设有…

机器学习笔记 - 深入研究spaCy库及其使用技巧

一、简述 spaCy 是一个用于 Python 中高级自然语言处理的开源库。它专为生产用途而设计,这意味着它不仅功能强大,而且快速高效。spaCy 在学术界和工业界广泛用于各种 NLP 任务,例如标记化、词性标注、命名实体识别等。 安装,这里使用阿里的源。 pip install spacy…