【GO全栈掌握入门】

GO语言全栈学习咯 ~

  • 1. GO 语言简介
  • 2.语言特性
  • 3.哪些公司使用GO语言?
  • 3. 安装GO开发环境
  • 4. 学习说明:
  • 5. GO结构篇
    • 5.1 工作空间
    • 5.2 导入包
    • 5.3 组织结构
    • 5.4 依赖管理
  • 6. GO骨肉篇
  • 7.GO工具篇

1. GO 语言简介

起源于2007年,GO语言之年轻如你所见,抛弃了历史设计的包袱,从轻出发。兼具python和C/C++优点
。突出之处便是:网络编程、系统编程、并发编程、分布式编程等。
创始人: Ken Thompson、Rob Pike、Robert Griesemer(三位对计算机底层设计头顶大佬皇冠的大神)

GO是编译型语言

2.语言特性

  • 语言简单:Go 与 C99、C11 相似之处颇多,这也是Go语言被冠以“NextC”名号的重要原因
  • 并发模型:运行时用 Goroutine 运行所有的一切,包括 main.main 入口函数。
  • 内存分配: Go 选择了 tcmalloc,它本就是为并发而设计的高性能内存分配组件。
  • 垃圾回收:Go 的 1.5 版本实现并发标记,逐步引入三色标记和写屏障等等,都是为了能让垃圾回收在不影响用户逻辑的情况下更好地工作。
  • 静态链接:态链接被当作优点宣传。只须编译后的一个可执行文件,无须附加任何东西就能部署。
  • 标准库:功能完善、质量可靠的标准库为编程语言提供了充足动力。
  • 工具链:内置完整测试框架,其中包括单元测试、性能测试、代码覆盖率、数据竞争,以及用来调优的 pprof,这些都是保障代码能正确而稳定运行的必备利器。

3.哪些公司使用GO语言?

  1. Google:作为创造了Go语言的 google 公司,当然会力挺Go语言了。Google 有很多基于 Go 开发的开源项目,比如 kubernets,docker,大家可以参考《哪些项目使用Go语言开发》一节了解更多的Go语言开源项目。
  2. FacebookFacebook 也在使用Go语言,为此他们还专门在 Github 上建立了一个开源组织 facebookgo。大家可以通过 https://github.com/facebookgo 访问查看 facebook 开源的项目,其中最具代表性的就是著名平滑重启工具 grace。
  3. 腾讯:腾讯在 15 年就已经做了 Docker 万台规模的实践。因为腾讯主要的开发语言是 C/C++ ,所以在使用Go语言方面会方便很多,也有很多优势,不过日积月累的 C/C++ 代码很难改造,也不敢动,所以主要在新业务上尝试使用 Go。
  4. 百度:百度主要在运维方面使用到了Go语言,比如百度运维的一个 BFE 项目,主要负责前端流量的接入,其次就是百度消息通讯系统的服务器端也使用到了Go语言。
  5. 七牛云:七牛云算是国内第一家选Go语言做服务端的公司。早在 2011 年,当Go语言的语法还没完全稳定下来的情况下,七牛云就已经选择将 Go 作为存储服务端的主体语言
  6. 京东:京东云消息推送系统、云存储,以及京东商城的列表页等都是使用Go语言开发的。
  7. 小米:小米对Go语言的支持,在于运维监控系统的开源,它的官方网址是 http://open-falcon.org/。此外,小米互娱、小米商城、小米视频、小米生态链等团队都在使用Go语言。
  8. 360:360 对Go语言的使用也不少,比如开源的日志搜索系统 Poseidon,大家可以通过 https://github.com/Qihoo360/poseidon 查看,还有 360 的推送团队也在使用Go语言。

3. 安装GO开发环境

  1. 下载GO SDK
  2. 安装GO开发工具GOLang(安装步骤略…)

4. 学习说明:

之前大家学习一门语言,都是从变量、类型、自定义类型等入手,再到表达式、运算符、方法等,再到面向对象这样的路径前进。这次呢,我们反其道行之,我们先对整个GO项目的结构有个了解,杀个回马枪,去接受和对比、类比学习GO语言,岂不胸有成竹,不迷路?Let 's go!

在这里插入图片描述

5. GO结构篇

5.1 工作空间

1. 工作空间讲解:

workspace/
	| 
	+ ---src/	//源码目录(包含子包在内的所有源码)
	|	  |
	|     + --server/
	| 	  | 	|
	|	  | 	+ --main.go
	|	  | 	
	|	  +--service/
	|	  		|
	|			+--user.go
	|
	+ ---bin/ 	//可执行文件安装路径,不会创建额外的子目录
	|	  |
	|	  +--server
	|
	+ ---pkg/	//包安装路径,按操作系统和平台隔离
		  |
		  + --linux_amd64
		  		|
		  		+ --service.a

2. 环境变量
GOROOT: 是Go的安装路径。GOROOT在绝大多数情况下都不需要修改
GOPATH: GOPATH是开发时的工作目录。
		保存编译后的二进制文件。
		go get和go install命令会下载go代码到GOPATH。
		import包时的搜索路径
在使用Git等版本控制工具时,建议忽略pkg、bin目录。直接在src,或具体的子包下创建代码仓库
(repository)。

5.2 导入包

1. import导入
起点是GOPATH的绝对路径
eg: import "net/http" => import /usr/local/go/src/net/http

2. 别名
import osx "github.com/apple/osx/lib"
import nix "github.com/linux/lib"
导入参数是路径,而非包名

3.四种导入方式:
import    "github.com/qyuhen/test"     默认方式:test.A
import X "github.com/qyuhen/test"     别名方式:X.A
import .  "github.com/qyuhen/test"     简便方式:A
import _  "github.com/qyuhen/test"     初始化方式: 无法引用,仅用来初始化目标包

5.3 组织结构

包(package)由一个或多个保存在同一目录下(不含子目录)的源码文件组成。包的用途类似名字
空间(namespace),是成员作用域和访问权限的边界。

包名与目录名并无关系,不要求保持一致。
go list net/...  // 查看net下所有的包

权限: 所有成员在包内均可访问。只有名称首字母大写的为可导出成员,在包外可视。
	   可通过指针转换等方式绕开该限制

初始化:包内每个源码文件都可定义一到多个初始化函数,但编译器不保证执行次序。

编译器首先确保完成所有全局变量初始化,然后才开始执行初始化函数。直到这些全部结束后,
运行时才正式进入main.main入口函数。

是不是有个疑惑呢?

  • 什么是初始化函数呢?
  1. 在Go语言中,初始化函数是指在程序执行前自动调用的特殊函数。
  2. 初始化函数没有参数和返回值,且无法手动调用。它们通常用于初始化程序的状态、执行一些必要的设置或者注册一些信息。在同一个包中可以定义多个初始化函数,它们的执行顺序是随机的。初始化函数会在程序开始执行之前自动调用,确保在程序正式运行之前进行必要的初始化操作。

内部包:Go语言内部包–控制包成员的对外暴露
总之:外部包调用外部包是可以的,只要属性是公开的;但是内部包只能在同父级目录下的子包引入,其他包是不能引入的。

5.4 依赖管理

这个是非常重要的,否则可能会导致项目编译失败。
走过岁月,仍发现,一个优秀的产品不是一蹴而就的。

在这里插入图片描述

  1. 模块与包:
    关系如:集合与元素的关系。模块包含多个包。

  2. 包的分类:
    标准包:随源码发布的
    第三方包:第三方提供的,如github

    匿名包: 只导入而不使用的包。通常情况下,我们只是想使用导入包产生的副作用,即引用包级别的变量、常量、结构体、接口等,以及执行导入包的init()函数。
    内部包: 项目内部的包,位于项目目录下。

  3. go Modules 的命令

go mod download: 下载 go.mod 文件中记录的所有依赖包。
go mod edit:编辑 go.mod 文件。
go mod graph:查看现有的依赖结构。
go mod init:把当前目录初始化为一个新模块。
go mod tidy:添加丢失的模块,并移除无用的模块。默认情况下,Go 不会移除 go.mod 文件中的无
   用依赖。当依赖包不再使用了,可以使用go mod tidy命令来清除它。
go mod vendor:将所有依赖包存到当前目录下的 vendor 目录下
go mod verify:检查当前模块的依赖是否已经存储在本地下载的源代码缓存中,以及检查下载后是否
   有修改。
go mod why:查看为什么需要依赖某模块。

6. GO骨肉篇

7.GO工具篇

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/480481.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

深度学习:复杂工业场景下的复杂缺陷检测方法

摘要:在复杂的工业场景中,缺陷检测一直是一个重要而具有挑战性的任务。近年来,深度学习技术的快速发展为复杂工业场景下的缺陷检测提供了新的解决方案。本文将介绍深度学习在复杂工业场景下的复杂缺陷检测中的应用,并探讨其技术进…

基于NetCoreServer的WebSocket客户端实现群播(学习笔记)

一、NetCoreServer介绍 超快速、低延迟的异步套接字服务器和客户端 C# .NET Core 库,支持 TCP、SSL、UDP、HTTP、HTTPS、WebSocket 协议和 10K 连接问题解决方案。 开源地址:https://github.com/chronoxor/NetCoreServer 支持: Example: TC…

Python:熟悉简单的skfuzzy构建接近生活事件的模糊控制器”(附带详细注释说明)+ 测试结果

参考资料:https: // blog.csdn.net / shelgi / article / details / 126908418 ————通过下面这个例子,终于能理解一点模糊理论的应用了,感谢原作。 熟悉简单的skfuzzy构建接近生活事件的模糊控制器 假设下面这样的场景, 我们希望构建一套…

隐语笔记3 —— 隐语架构

隐语架构一览 隐语产品层 定位: 通过可视化产品,降低终端用户的体验和演示成本。通过模块化API降低技术集成商的研发成本。 人群画像: 隐私保护计算集成商,产品人员,隐私保护计算需求方,开发人员&#xff…

2024年全球生成人工智能全景图【中文】

2024年全球生成人工智能全景图【中文】 在过去的一年中,产生式人工智能(GenAI)无疑成为了全球各行各业的热门话题。特别是ChatGPT的发布,激发了公众对GenAI强烈的兴趣和激动,唤醒了我们对其变革潜力的认知。 虽然我们…

Redis中的缓存雪崩

缓存雪崩 🤔现象分析 缓存雪崩是指在同一时段大量的缓存key同时失效或者缓存服务(Redis等)宕机,导致大量请求到达数据库,带来巨大压力。 👊 解决方案 利用Redis集群提高服务的可用性,避免缓存服务宕机给缓存业务添…

软件架构和基于架构的软件开发方法知识总结

一、软件架构定义 软件架构为软件系统提供了一个结构、行为和属性的高级抽象 软件架构是一种表达,使软件工程师能够: (1)分析设计在满足所规定的需求方面的有效性 (2)在设计变更相对容易的阶段,…

当我想用ChatGPT-Next-Web来套壳Azure OpenAI Service时

使用Cloudflare worker来代理Azure OpenAI API, 并将其转换为兼容OpenAI的API 一直没能搞定OpenAI的订阅, 就因为没有搞定国外的信用卡, 所以就一直使用GPT-3.5来处理日常的文字生成工作, 例如写文档, 生成一些简单的脚…

python网络相册设计与实现flask-django-nodejs-php

此系统设计主要采用的是python语言来进行开发,采用django框架技术,框架分为三层,分别是控制层Controller,业务处理层Service,持久层dao,能够采用多层次管理开发,对于各个模块设计制作有一定的安…

前端学习笔记 | AJAX

一、axios 是什么:AJAX是异步的JavaScript和XML。它可以在不重新刷新页面的情况下与服务器通信,交换数据,或更新页面。 概念:AJAX是浏览器与服务器进行数据通信的技术。 1、使用axios库与服务器进行数据通信 (1&#x…

skywalking监听apisix

一、原理 Skywalking结合OpenTelemetry Collector Apisix的promethus插件实现对apisix metrics数据的收集。 二、数据流图 1. Apisix Promethus插件从Apisix收集指标数据。 2. OpenTelemetry Collector通过promethus receiver获取来自Apisix Promethus插件的指标数据&#…

Codeforces Round 498 (Div. 3)

目录 A. Adjacent Replacements B. Polycarps Practice C. Three Parts of the Array D. Two Strings Swaps E. Military Problem F. Xor-Paths A. Adjacent Replacements 简单思维题 每一个数都变成第一个小于等于自己的的奇数 void solve(){cin>>n;while(n--){…

现在阿里云云服务器租用多少钱?一张表,报价单

2024年阿里云服务器优惠价格表,一张表整理阿里云服务器最新报价,阿里云服务器网整理云服务器ECS和轻量应用服务器详细CPU内存、公网带宽和系统盘详细配置报价单,大家也可以直接移步到阿里云CLUB中心查看 aliyun.club 当前最新的云服务器优惠券…

c++核心学习5

4.6继承 有些类与类之间存在特殊的关系,例如下图中: 我们发现,定义这些类时,下级别的成员除了拥有上一级的共性,还有自己的特性。这个时候我们就可以考虑利用继承的技术,减少重复代码 4.6.1继承的基本语法…

Nature:“量子龙卷风”首次模拟黑洞

科学家们在超流体氦气中首次创造出了一个巨大的“量子漩涡”(quantum vortex),用以模拟黑洞。这一成就不仅使他们能够更加细致地观察模拟黑洞的行为,还能探究其与周围环境的交互作用。 诺丁汉大学的研究团队与伦敦国王学院和纽卡斯…

酷开会员 |酷开科技通过酷开系统让内容和用户完成适配

互联网大屏电视的趋势早有,从智能电视发行时就已见苗头,不过随着各大厂商在技术上的不断革新、模式上的不断突进,OTT模式给电视机行业带来了新一轮的风口。不论是什么企业或者行业,想要提升整体的效益,从效益层面来讲&…

后端程序员入门react笔记(九)- react 插件使用

setState setState引起的react的状态是异步的。操作完毕setState之后如果直接取值,可能取不到最新的值,我们举个例子console.log(this.state.num)打印的值,总是上一次的值而不是最新的。 import React, {Component} from react; class Ap…

[linux][调度] 内核抢占入门 —— 线程调度次数与 CONFIG_PREEMPTION

在工作中,如果你正在做开发的工作,正在在写代码,这个时候测试同事在测试过程中测出了问题,需要你来定位解决,那么你就应该先暂停写代码的工作,转而来定位解决测试的问题;如果你正在定位测试的问…

瑞_23种设计模式_状态模式

文章目录 1 状态模式(State Pattern)1.1 介绍1.2 概述1.3 状态模式的结构1.4 状态模式的优缺点1.5 状态模式的使用场景 2 案例一2.1 需求2.2 代码实现(未使用状态模式)2.3 代码实现(状态模式) 3 案例二3.1 …

数据中台:如何构建企业核心竞争力_光点科技

在当今信息化快速发展的商业环境下,“数据中台”已经成为构建企业核心竞争力的关键步骤。数据中台不仅是数据集成与管理的平台,更是企业智能化转型的加速器。本文将深入探讨数据中台的定义、特点、构建方法及其在企业中的作用。 数据中台的定义 数据中台…