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

【GoLang】Golang 快速入门(第一篇)

目录

1.简介:

2.设计初衷:

3.Go语言的 特点

4.应用领域:

5.用go语言的公司:

6. 开发工具介绍以及环境搭建

1.工具介绍:

2.VSCode的安装:

3.安装过程:

4.Windows下搭建Go开发环境--安装和配置SDK

1.搭建Go开发环境 - 安装和配置SDK

2.SDK下载

3.安装SDK

4.配置环境变量

5.再次验证path是否好用:(注意:控制命令台需要重启)


1.简介:

Go(又称 Golang)是 Google 的 Robert Griesemer,Rob Pike 及 Ken Thompson 开发的一种计算机编程语言语言。

2.设计初衷:

Go语言是谷歌推出的一种的编程语言,可以在不损失应用程序性能的情况下降低代码的复杂性。谷歌首席软件工程师罗布派克(Rob Pike)说:我们之所以开发Go,是因为过去10多年间软件开发的难度令人沮丧。派克表示,和今天的C++或C一样,Go是一种系统语言。他解释道,"使用它可以进行快速开发,同时它还是一个真正的编译语言,我们之所以现在将其开源,原因是我们认为它已经非常有用和强大。"

1) 计算机硬件技术更新频繁,性能提高很快。目前主流的编程语言发展明显落后于硬件,不能合理利用多核多CPU的优势提升软件系统性能。 2) 软件系统复杂度越来越高,维护成本越来越高,目前缺乏一个足够简洁高效的编程语言。 3) 企业运行维护很多c/c++的项目,c/c++程序运行速度虽然很快,但是编译速度确很慢,同时还存在内存泄漏的一系列的困扰需要解决。

解释性语言和编译性语言的区别主要在于代码的执行方式不同。Java是一种解释性语言,它需要Java虚拟机(JVM)来解释和执行程序。当你编写Java程序时,代码会被编译成字节码,这是一种中间代码。然后,当你运行Java程序时,JVM会读取字节码并将其转换为机器语言。这个过程是即时编译(Just-In-Time Compilation,JIT)的,意味着代码在运行时才会被编译。

相比之下,C++是一种编译性语言,它需要一个编译器将源代码编译成可执行文件。这个编译过程通常会将源代码翻译成汇编语言,然后再将汇编代码翻译成机器语言。由于编译器可以在编译期间对代码进行优化,因此C++程序的执行速度通常比Java程序快。

3.Go语言的 特点

高效性:Go语言是一种编译型语言,能够生成高效的机器码。同时,Go语言的垃圾回收机制和协程支持使其在处理大规模并发任务时非常高效。

并发性:Go语言内置支持协程和通道,能够方便地编写并发程序。协程可以轻松实现高并发,通道可以方便地进行通信和同步,这使得Go语言在网络编程、分布式系统和大数据处理等领域具有优势。

简单性:Go语言语法简洁,容易学习和理解。Go语言没有继承和多态等复杂的语言特性,使得程序设计更加直观和简单。

可读性:Go语言具有良好的代码风格和格式,使得代码易于阅读和维护。Go语言的代码组织方式和注释规范使得代码的可读性和可维护性得到保证。

安全性:Go语言具有内置的安全特性,如内存安全、类型安全和并发安全等。Go语言的垃圾回收机制可以避免内存泄露,类型安全可以防止代码中出现类型错误,而并发安全可以避免数据竞争问题。

跨平台性:Go语言的编译器可以将源代码编译为本地机器码,使得程序可以在各种操作系统上运行。同时,Go语言标准库中提供了许多与平台无关的包,如网络、文件操作等,可以方便地编写跨平台的程序。

总之、Go语言保证了既能到达静态编译语言的安全和性能,又达到了动态语言开发维护的高效率,具有高效性、并发性、简单性、可读性、安全性和跨平台性等优势,使得它在云计算、网络编程、分布式系统、大数据处理等领域得到了广泛应用。

4.应用领域:

区块链应用

区块链技术,简称BT(Blockchain technology),也被称之为分布式账本技术,是一种互联网数据库技术,其特点是去中心化、公开透明,让每个人均可以参与数据库记录

后端服务器应用

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

云计算/云服务后台应用

盛大云CDN(内容分发网络)

应用范围:CDN的调度系统,分发系统、监控系统、短域名服务,CDN内部开放平台、运营报表系统以及其他一些小工具等

5.用go语言的公司:

1、Google 这个不用多做介绍,作为开发Go语言的公司,当仁不让。Google基于Go有很多优秀的项目,比如:GitHub - kubernetes/kubernetes: Production-Grade Container Scheduling and Management ,大家也可以在Github上 Google · GitHub 查看更多Google的Go开源项目。

2、Facebook Facebook也在用,为此他们还专门在Github上建立了一个开源组织facebookgo,大家可以通过Meta Go · GitHub访问查看facebook开源的项目,比如著名的是平滑升级的grace。 3、腾讯 腾讯作为国内的大公司,还是敢于尝试的,尤其是Docker容器化这一块,他们在15年已经做了docker万台规模的实践,具体可以参考腾讯万台规模的Docker应用实践_QCon_小盖_InfoQ精选文章 。 主要职责是: 负责腾讯游戏蓝鲸平台后台开发工作 负责容器相关的开发工作 和蓝鲸平台,容器开发有关。腾讯作为主要使用C/C++的公司,使用Go会方便很多,也有很多优势,不过日积月累的C/C++代码很难改造,也不敢动,所以新业务会在Go方面尝试。

4、百度 目前所知的百度的使用是在运维这边,是百度运维的一个BFE项目,负责前端流量的接入。他们的负责人在2016年有分享,大家可以看下这个 InfoQ - 促进软件开发及相关领域知识与创新的传播-极客邦 . 其次就是百度的消息系统,从其最近的Golang招聘介绍就可以看出来. 负责公司手百消息通讯系统服务器端开发及维护

5、京东 京东云消息推送系统、云存储,以及京东商城等都有使用Go做开发。

6、小米 小米对Golang的支持,莫过于运维监控系统的开源,也就是 http://open-falcon.com/ 。 此外,小米互娱、小米商城、小米视频、小米生态链等团队都在使用Golang。

7、360 360对Golang的使用也不少,一个是开源的日志搜索系统Poseidon,托管在Github上,GitHub - Qihoo360/poseidon: A search engine which can hold 100 trillion lines of log data.. 还有360的推送团队也在使用,他们还写了篇博文在Golang的官方博客上 https://blog.golang.org/qihoo。

360直播在招聘Golang开发工程师。

美团、滴滴、新浪、阿里、京东以及七牛等。一般的选择,都是选择用于自己公司合适的产品系统来做,比如消息推送的、监控的、容器的等,Golang特别适合做网络并发的服务,这是他的强项,所以也是被优先用于这些项目。

6. 开发工具介绍以及环境搭建

1.工具介绍:

1) visual studio code, Microsoft产品(简称VSCode):一个运行于Mac Os、Windows和Linux 之上的,默认提供Go语言的语法高亮,安装Go语言插件,还可以支持智能提示,编译运行等功能。 2) Sublime Text,可以免费使用,默认也支持Go代码语法高亮,只是保存次数达到一定数量之后就会提示是否购买,点击取消继续用,和正式注册版本没有任何区别 3) Vim: Vim是从vi发展出来的一个文本编辑器,代码补全、编译及错误跳转等方便编程的功能特别丰富,在程序员中被广泛使用 4) Emacs : Emacs传说中的神器,她不仅仅是一个编辑器,因为功能强大,可称它为集成开发环境 5) Eclipse IDE工具,开源免费,并提供GoEclipse插件 6) LitelDE,LitelDE是一款专门为Go语言开发的跨平台轻量级集成开发环境(IDE),是中国人开发的。 7) JetBrains公司的产品:PhpStrom、WebStrom和PyCharm等IDE工具,都需要安装Go插件。

2.VSCode的安装:

下载vscode安装软件 Download Visual Studio Code - Mac, Linux, Windows

3.安装过程:

略(正常安装即可)

4.Windows下搭建Go开发环境--安装和配置SDK

1.搭建Go开发环境 - 安装和配置SDK

基本介绍: 1) SDK的全称(Software Development Kit 软件开发工具包) 2) SDK是提供给开发人员使用的,其中包含了对应开发语言的工具包。

2.SDK下载

1) Go语言的官网为: golang.org ,无法访问,需要翻墙。 2) SDK下载地址 : Golang中文社区:Go下载 - Go语言中文网 - Golang中文社区 (1.15.6版本)

3.安装SDK

请注意:安装路径不要有中文或者特殊符号如空格等 SDK安装目录建议:一般我安装在d:/golang_sdk安装时 , 基本上是傻瓜式安装,解压就可以使用

4.配置环境变量

在命令提示符上输入go env查看环境变量 可以通过以下命令更改也可以通过环境变量直接更改

go env -w GO111MODULE=off(先设置on,当更新完gopls这个插件(可以智能提示)后,再重新设置为off(否则只在goroot 查找包路径))

go env -w GOPRIVATE=git.mycompany.com,github.com/my/private

go env -w GOPROXY = https://goproxy.io,direct

go env -w GOROOT=go SDK的安装目录

go env -w GOPATH=存放go代码的路径

注意:记得删除用户变量的gopath

GOPROXY这个环境变量主要是用于设置 Go 模块代理(Go module proxy),其作用是用于使 Go 在后续拉取模块版本时能够脱离传统的 VCS 方式,直接通过镜像站点来快速拉取。

GOPROXY 的默认值是: https://proxy.golang.org,direct,由于某些原因国内无法正常访问该地址,所以我们通常需要配置一个可访问的地址。目前社区使用比较多的有两个 Goproxy.cn和 GOPROXY.IO - A Global Proxy for Go Modules,当然如果你的公司有提供GOPROXY地址那么就直接使用

GOPROXY 允许设置多个代理地址,多个地址之间需使用英文逗号 “,” 分隔。最后的 “direct” 是一个特殊指示符,用于指示 Go 回源到源地址去抓取(比如 GitHub 等)。当配置有多个代理地址时,如果第一个代理地址返回 404 或 410 错误时,Go 会自动尝试下一个代理地址,当遇见 “direct” 时触发回源,也就是回到源地址去抓取。

GOPRIVATE

设置了GOPROXY 之后,go 命令就会从配置的代理地址拉取和校验依赖包。当我们在项目中引入了非公开的包(公司内部git仓库或 github 私有仓库等),此时便无法正常从代理拉取到这些非公开的依赖包,这个时候就需要配置 GOPRIVATE 环境变量。GOPRIVATE用来告诉 go 命令哪些仓库属于私有仓库,不必通过代理服务器拉取和校验。

GOPRIVATE 的值也可以设置多个,多个地址之间使用英文逗号 “,” 分隔。我们通常会把自己公司内部的代码仓库设置到 GOPRIVATE 中

使用go module引入包

接下来我们将通过一个示例来演示如何在开发项目时使用 go module 拉取和管理项目依赖。

5.再次验证path是否好用:(注意:控制命令台需要重启)

ok了,伙伴们,到现在为止,我们就可以愉快的开启GoLang之旅了。我们下篇再见。

相关文章:

【GoLang】Golang 快速入门(第一篇)

目录 1.简介: 2.设计初衷: 3.Go语言的 特点 4.应用领域: 5.用go语言的公司: 6. 开发工具介绍以及环境搭建 1.工具介绍: 2.VSCode的安装: 3.安装过程: 4.Windows下搭建Go开发环境--安装和配置SDK 1.搭建Go开发环境 - 安装…...

Linux中的三类读写函数

文件IO和标准IO的区别 遵循标准: 文件IO遵循POSIX标准,主要在类UNIX环境下使用。标准IO遵循ANSI标准,具有更好的可移植性,可以在不同的操作系统上重新编译后运行。可移植性: 文件IO的可移植性相对较差,因为…...

MATLAB基础应用精讲-【数模应用】二元Probit回归分析

目录 前言 知识储备 二元Logistic模型和Probit模型 Logistic模型的形式 Probit模型 优势比(OR) 准二项分布族 算法原理 数学模型 二元因变量和线性概率模型 probit和logit回归 logit和probit模型的估计和推断 稳健性检验 二元logit回归分析全流程 一、案例数…...

找工作准备刷题Day10 回溯算法 (卡尔41期训练营 7.24)

回溯算法今天这几个题目做过,晚上有面试,今天水一水。 第一题:Leetcode77. 组合 题目描述 解题思路 从题目示例来看,k个数是不能重合的,但是题目没有明确说明这一点。 使用回溯算法解决此问题,利用树形…...

如何有效的进行小程序的优化

如今小程序已经成为了许多开发者开展业务,提供服务的重要平台 。所以如何有效的优化小程序成为了开发者关注的首要问题,以下是一份详细的小程序优化方案: 一、目标设定 明确小程序优化的主要目标,例如提高用户留存率、增加用户活…...

FPGA-ROM IP核的使用(2)

前言 接着昨天的进行一个小的实验验证ROM IP核。 实验效果 读取上一期生成的IP核中的数据,并将其显示在数码管上。 具体流程 ROM IP核存放数据0~255,之后每隔0.2s,从0的地址开始读数据,并显示在数码管上;接着先后…...

Manticore Search(es轻量级替代)

概念: Manticore Search 是一个使用 C 开发的高性能搜索引擎,创建于 2017 年,其前身是 Sphinx Search 。Manticore Search 充分利用了 Sphinx,显着改进了它的功能,修复了数百个错误,几乎完全重写了代码并保…...

测试开发面试题---计算机网络

计算机网络模型 OSI模型:七层模型 物理层:定义电气特征,机械特征等功能规范,传递实际比特流数据链路层:物理地址寻址(MAC),帧的传输,错误检测和纠正网络层:…...

Wonder3D 论文学习

论文链接:https://arxiv.org/abs/2310.15008 代码链接:https://github.com/xxlong0/Wonder3D 解决了什么问题? 随着扩散模型的提出,3D 生成领域取得了长足进步。从单张图片重建出 3D 几何是计算机图形学和 3D 视觉的基础任务&am…...

【MySQL进阶之路 | 高级篇】显式事务和隐式事务

使用事务有两种方式:显式事务和隐式事务。 1. 显式事务 步骤1: START TRANSACTION或者BEGIN,作用是显式开启一个事务。 START TRANSACTION语句相较于BEGIN特别之处在于,后面能跟几个修饰符。比如: READ ONLY&…...

Ruby、Python、Java 开发者必备:Codigger之软件项目体检

在编程的广阔天地里,Ruby、Python 和 Java 开发者们各自凭借着独特的语言特性,构建着精彩纷呈的应用世界。然而,无论使用哪种语言,确保项目的高质量始终是至关重要的目标。而 Codigger 项目体检则成为了实现这一目标的得力助手&am…...

day05 Router、vuex、axios

配置 router和vuex需要在创建vue项目的时候,开始的时候选择Manually select features,于是就可以在下一个创建配置讯问中选择router和vuex。 axios则需要执行命令行: npm install axios -S 之后再在需要发送请求的view导入即可。 router…...

yolov5-7在opencv里跑自己的onnx模型

先把模型放在如下目录 运行如下代码 import cv2 import numpy as npclass Onnx_clf:def __init__(self, onnx:strdnn_model1/plane02.onnx, img_size640, classlist:list[plane]) -> None: func: 读取onnx模型,并进行目标识别para onnx:模型路径img_size:输出图片大小,和模…...

JVM 11 的优化指南:如何进行JVM调优,JVM调优参数有哪些

这篇文章将详细介绍如何进行JVM 11调优,包括JVM 11调优参数及其应用。此外,我将提供12个实用的代码示例,每个示例都会结合JVM启动参数和Java代码。 本文已收录于,我的技术网站 java-broke.site,有大厂完整面经&#x…...

nginx的配置和使用

一、nginx支持win和linux版本的下载,选择合适的版本进行安装 二、配置文件注解 重点的几个参数进行注释: 1、listen 要监听的服务的端口,符合这个端口的才会被监听 server_name要监听的服务地址,可能是ip,也可能是域名&#xf…...

mysql面试(六)

前言 本章节详细讲解了一下mysql执行计划相关的属性释义,以及不同sql所出现的不同效果 执行计划 一条查询语句经过mysql查询优化器的各种基于成本和各种规则优化之后,会生成一个所谓的 执行计划,这个执行计划展示了这条查询语句具体查询方…...

6.乳腺癌良性恶性预测(二分类、逻辑回归、PCA降维、SVD奇异值分解)

乳腺癌良性恶性预测 1. 特征工程1.1 特征筛选1.2 特征降维 PCA1.3 SVD奇异值分解 2. 代码2.1 逻辑回归、二分类问题2.2 特征降维 PCA2.3 SVD奇异值分解 1. 特征工程 专业上:30个人特征来自于临床一线专家,每个特征和都有医学内涵;数据上&…...

Vue3响应式高阶用法之markRaw()

Vue3响应式高阶用法之markRaw() 文章目录 Vue3响应式高阶用法之markRaw()一、简介二、使用场景2.1 避免性能开销2.2 防止意外修改 三、基本使用3.1 标记对象 四、功能详解4.1 markRaw与reactive的区别4.2 markRaw与ref的区别 五、最佳实践及案例5.1 使用大型第三方库对象5.2 静…...

免费SSL证书的安全性与获取指南

SSL证书是一种数字凭证,用于加密用户与网站之间的信息交换,以确保传输的数据不被第三方窃取。它像是一个数字版的密封印章,为数据的传输过程提供了一层保护膜。 免费的SSL证书通常由CA机构提供,它们同样可以提供基础数据的加密服…...

【CN】Argo 持续集成和交付(一)

1.简介 Argo 英 [ˈɑ:ɡəu] 美 [ˈɑrˌɡo] Kubernetes 原生工具,用于运行工作流程、管理集群以及正确执行 GitOps。 Argo 于 2020 年 3 月 26 日被 CNCF 接受为孵化成熟度级别,然后于 2022 年 12 月 6 日转移到毕业成熟度级别。 argoproj.github.i…...

以下是对华为 HarmonyOS NETX 5属性动画(ArkTS)文档的结构化整理,通过层级标题、表格和代码块提升可读性:

一、属性动画概述NETX 作用:实现组件通用属性的渐变过渡效果,提升用户体验。支持属性:width、height、backgroundColor、opacity、scale、rotate、translate等。注意事项: 布局类属性(如宽高)变化时&#…...

基于数字孪生的水厂可视化平台建设:架构与实践

分享大纲: 1、数字孪生水厂可视化平台建设背景 2、数字孪生水厂可视化平台建设架构 3、数字孪生水厂可视化平台建设成效 近几年,数字孪生水厂的建设开展的如火如荼。作为提升水厂管理效率、优化资源的调度手段,基于数字孪生的水厂可视化平台的…...

SpringBoot+uniapp 的 Champion 俱乐部微信小程序设计与实现,论文初版实现

摘要 本论文旨在设计并实现基于 SpringBoot 和 uniapp 的 Champion 俱乐部微信小程序,以满足俱乐部线上活动推广、会员管理、社交互动等需求。通过 SpringBoot 搭建后端服务,提供稳定高效的数据处理与业务逻辑支持;利用 uniapp 实现跨平台前…...

JAVA后端开发——多租户

数据隔离是多租户系统中的核心概念,确保一个租户(在这个系统中可能是一个公司或一个独立的客户)的数据对其他租户是不可见的。在 RuoYi 框架(您当前项目所使用的基础框架)中,这通常是通过在数据表中增加一个…...

AI病理诊断七剑下天山,医疗未来触手可及

一、病理诊断困局:刀尖上的医学艺术 1.1 金标准背后的隐痛 病理诊断被誉为"诊断的诊断",医生需通过显微镜观察组织切片,在细胞迷宫中捕捉癌变信号。某省病理质控报告显示,基层医院误诊率达12%-15%,专家会诊…...

C++课设:简易日历程序(支持传统节假日 + 二十四节气 + 个人纪念日管理)

名人说:路漫漫其修远兮,吾将上下而求索。—— 屈原《离骚》 创作者:Code_流苏(CSDN)(一个喜欢古诗词和编程的Coder😊) 专栏介绍:《编程项目实战》 目录 一、为什么要开发一个日历程序?1. 深入理解时间算法2. 练习面向对象设计3. 学习数据结构应用二、核心算法深度解析…...

Chrome 浏览器前端与客户端双向通信实战

Chrome 前端(即页面 JS / Web UI)与客户端(C 后端)的交互机制,是 Chromium 架构中非常核心的一环。下面我将按常见场景,从通道、流程、技术栈几个角度做一套完整的分析,特别适合你这种在分析和改…...

云原生周刊:k0s 成为 CNCF 沙箱项目

开源项目推荐 HAMi HAMi(原名 k8s‑vGPU‑scheduler)是一款 CNCF Sandbox 级别的开源 K8s 中间件,通过虚拟化 GPU/NPU 等异构设备并支持内存、计算核心时间片隔离及共享调度,为容器提供统一接口,实现细粒度资源配额…...

《信号与系统》第 6 章 信号与系统的时域和频域特性

目录 6.0 引言 6.1 傅里叶变换的模和相位表示 6.2 线性时不变系统频率响应的模和相位表示 6.2.1 线性与非线性相位 6.2.2 群时延 6.2.3 对数模和相位图 6.3 理想频率选择性滤波器的时域特性 6.4 非理想滤波器的时域和频域特性讨论 6.5 一阶与二阶连续时间系统 6.5.1 …...

GraphRAG优化新思路-开源的ROGRAG框架

目前的如微软开源的GraphRAG的工作流程都较为复杂,难以孤立地评估各个组件的贡献,传统的检索方法在处理复杂推理任务时可能不够有效,特别是在需要理解实体间关系或多跳知识的情况下。先说结论,看完后感觉这个框架性能上不会比Grap…...