golang入门介绍-1

今天开始发布关于go语言入门到实战内容,各位小伙伴准备好。

go介绍

Go语言(或 Golang)起源于 2007 年,并在 2009 年正式对外发布。是由 Google 公司开发的一种静态强类型、编译型、并发型、并具有垃圾回收功能的编程语言。

Go 是非常年轻的一门语言,它的主要目标是 兼具 Python PHP等动态语言的开发速度和 C/C++ 等编译型语言的性能与安全性

Go语言被称为 “C 类似语言” ,“21 世纪的C语言”。

go创始人

Rob Pike:曾是贝尔实验室Unix开发团队成员,Plan9操作系统开发的主要领导人,Inferno操作系统开发的主要领导人。

ken tomption:图灵奖得主,C语言前身B语言的作者,Unix的发明人之一, 操作系统Plan 9的主要作者。 共同开发了UTF-8。

Robert:曾为谷歌的V8 JavaScript引擎和Chubby开发代码。

Golang发展历程

2007年,谷歌工程师Ken Thompson、Rob Pike、Robert Griesemer开始设计一门全新的语言,这是Go语言的最初原型。

2009.11.10 ,Google将Go语言以开放源代码的形式向全球发布。

2015年8月19日 ,Go1.5版本发布,本次更新中移除了“最后残余的C代码”,请内存管理方面权威专家Rick Hudson对GC进行重新设计

2017年2月16日 , Go1.8版本发布

2017年8月24日 , Go1.9版本发布

2018年2月16日 , Go1.10版本发布

2018年8月24日 , Go1.11版本发布

2019年2月25日 , Go1.12版本发布

2019年9月03日 , Go1.13版本发布

2020年2月25日 , Go1.14版本发布

2020年8月11日 , Go1.15版本发布

2021年2月16日 , Go1.16版本发布

2021年8月16日 , Go1.17版本发布

每半年发布一个版本

学习Go能做什么?

区块链开发

服务器端云计算开发

软件开发

go项目

腾讯

蓝鲸平台,容器开发有关

百度

BFE项目,负责前端流量的接入

京东

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

小米

小米互娱、小米商城、小米视频、小米生态链等团队都在使用Golang。

Docker k8s

GO语言特性

1)可直接编译成机器码,部署简单,一个文件搞定。

2)既有静态编译语言安全性,又有动态语言开发维护的高效率

3)语言层面支持并发,天生的支持并发。可以充分的利用多核。

4)内置runtime,支持垃圾回收。

5)简单易学,Go关键字是25个,但是表达能力很强大,几乎支持大多数你在其他语言见过的特性:继承、重载、对象等。

6)丰富的标准库,Go目前已经内置了大量的库,特别是网络库非常强大。

7)内置强大的工具,Go语言里面内置了很多工具链。

8)跨平台编译,那么就可以做到window系统编译linux的应用。

9)内嵌C支持,Go里面也可以直接包含C代码,利用现有的丰富的C库。

编译型语言 解释型语言

编译型语言: C语言、C++、Golang 不能跨平台

解释型语言:Python、JavaScript、PHP 跨平台

Java 既是编译型语言 也是解释型语言 跨平台

Go语言支持交叉编译 可以跨平台

为并发而生的GO

现代计算机都拥有多个核,但是大部分编程语言都没有有效的工具让程序可以轻易利用这些资源。编程时需要写大量的线程同步代码来利用多个核,很容易导致错误。

Go语言正是在多核和网络化的时代背景下诞生的原生支持并发的编程语言。Go语言从底层原生支持并发,无须第三方库,开发人员可以很轻松地在编写程序时决定怎么使用 CPU 资源。

Go语言的并发是基于 goroutine 的,goroutine 类似于线程,但并非线程。可以将 goroutine 理解为一种虚拟线程。Go语言运行时会参与调度 goroutine,并将 goroutine 合理地分配到每个 CPU 中,最大限度地使用 CPU 性能。

GO性能

GO学习资料

https://golang.org 官网地址

The Go Programming Language 国内官网地址

Go 编程语言 中文官方网站

https://github.com/hackstoic/golang-open-source-projects 优秀的开源项目

首页 - Go语言中文网 - Golang中文社区

Goproxy.cn

安装

linux

解压

tar -xf go1.17.2.linux-amd64.tar.gz -C /usr/local/

添加环境变量

vim /etc/profile

export PATH=$PATH:/usr/local/go/bin

source /etc/profile

go version

注意:

GOROOT 的值应该为Go语言的当前安装目录:export GOROOT=/usr/local/go

PATH Go 程序的可执行文件,export PATH=$PATH:$GOROOT/bin

如果 在/usr/local下 可以不设置 GOROOT

win

目前最新版本 go1.17.2.windows-amd64

下载 完成后 直接下一步即可

目录介绍

api 存放Go API检查器的辅助文件

bin Go语言相关工具的可执行文件

doc 存放Go语言几乎全部的HTML格式的官方文档和说明

misc 存放各类编辑器或IDE(集成开发环境)软件的插件

pkg 用于在构建安装后,保存Go语言标准库的所有归档文件

src 存放所有标准库、Go语言工具,以及相关底层库(C语言实现)的源码

test 存放测试Go语言自身代码的文件

Goland安装

Goland 下载 goland-2021.2.4

GoLand by JetBrains: More than just a Go IDE

Go 语言的的包依赖管理

GOPATH

bin:存放编译后生成的二进制可执行文件pkg:存放编译后生成的 .a 文件src:存放项目的源代码,可以是你自己写的代码,也可以是你 go get 下载的包将你的包或者别人的包全部放在 $GOPATH/src 目录下进行管理的方式,我们称之为 GOPATH 模式。

go vendor 模式的过渡

为了解决 GOPATH 方案下不同项目下无法使用多个版本库的问题,Go v1.5 开始支持 vendor 。

go mod

go modules 在 v1.11 版本正式推出,在最新发布的 v1.14 版本中,官方正式发话,称其已经足够成熟,可以应用于生产上。

Go编译的命令

go build 命令可以将Go语言程序代码编译成二进制的可执行文件,但是需要我们手动运行该二进制文件;

go run 命令则更加方便,它会在编译后直接运行Go语言程序,编译过程中会产生一个临时文件,但不会生成可执行文件,这个特点很适合用来调试程序。

欢迎加入go语言学习交流QQ群:109640867

文档对应视频:go语言入门第一季

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

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

相关文章

SQL防止注入工具类,可能用于SQL注入的字符有哪些

SQL注入是一种攻击技术,攻击者试图通过在输入中注入恶意的SQL代码来干扰应用程序的数据库查询。为了防止SQL注入,你需要了解可能用于注入的一些常见字符和技术。以下是一些常见的SQL注入字符和技术: 单引号 ​: 攻击者可能会尝试…

C#分部类的应用:记录学生信息

目录 一、分部类及其用途 二、实例 再发一个分部类的应用,巩固一下。 一、分部类及其用途 C#中的部分类也被称为分部类。 C#中的部分类是一种将类的定义分成多个部分,每个部分都位于自己的文件中,然后在编译时合并在一起的机制。 部分类…

超平面介绍

超平面公式 (1) 超平面是指n维线性空间中维度为n-1的子空间。它可以把线性空间分割成不相交的两部分。比如二维空间中,一条直线是一维的,它把平面分成了两部分;三维空间中,一个平面是二维的,它把空间分成了两部分。(2…

AJAX总结

AJAX 1、什么是Ajax ajax 全名 async javascript and XML(异步JavaScript和XML) 是一种用于创建快速动态网页的技术 是前后台交互的能⼒ 也就是我们客户端给服务端发送消息的⼯具,以及接受响应的⼯具 AJAX 不是新的编程语言,而是一种使用现有标准的…

支持Intel Core i5/i7的高性能三防加固平板|亿道三防onerugged

大家好!今天我要向大家推荐一款真正强悍的三防加固平板电脑,它支持Intel Core i5/i7高性能处理器,给你带来无与伦比的高性能体验。是不是心动了呢?那就让我为你揭开这款亿道三防onerugged系列的产品的神秘面纱吧! 首先…

缀点成线

1232. 缀点成线 给定一个数组 coordinates ,其中 coordinates[i] [x, y] , [x, y] 表示横坐标为 x、纵坐标为 y 的点。请你来判断,这些点是否在该坐标系中属于同一条直线上。 示例 1: 输入:coordinates [[1,2],[2,3…

豆粕贸易商的二次点价策略:如何在价格波动中获得收益补贴?

贸易商如何通过衍生品工具实现二次点价? 贸易商交易惯例:以豆粕贸易商和油厂签订的基差采购合同为例,同理可以类推至其他板块上下游企业。 按照交易惯例,贸易商通常会持有基差合同,但并不会先点价。当价格从高点到低…

CSS3中盒子居中

(1)利用定位(子绝父相)、margin-left、和margin-top实现 (2)利用定位(子绝父相)、transfrom属性实现 (3)利用flex布局实现盒子居中

【前端】前端三要素之BOM

写在前面:本文仅包含BOM内容,JavaScript传送门在这里,DOM传送门在这里。 本文内容是假期中刷的黑马Pink老师视频(十分感谢Pink老师),原文保存在个人的GitLab中,如果需要写的网页内容信息等可以评…

【PostgreSQL实现psql连接时候提示用户的密码有效时间】

如下内容使用session_exec插件结合自定函数实现。类似于触发器的原理。 功能需要严格在测试环境测试后,才可在正式环境使用。没有相关要求,还是建议直接查询pg_roles/pg_authid/pg_user; 一、判断是否需要修改用户密码和有效期的检查SQL 首…

解锁服务器外联:TinyProxy一键搭建指南

引言 在服务器需要访问外网的情况下,由于网络安全等原因,许多生产服务器限制了对外网的访问。本文介绍如何通过在一台能够访问外网的服务器上部署TinyProxy来实现代理,使得其他服务器可以通过该代理访问外网。 安装 TinyProxy是一个轻量级…

CTFHub技能树web之文件上传(一)

一.前置知识 文件上传漏洞:文件上传功能是许多Web应用程序的常见功能之一,但在实施不当的情况下,可能会导致安全漏洞。文件上传漏洞的出现可能会使攻击者能够上传恶意文件,执行远程代码,绕过访问控制等。 文件类型验证…

代码随想录第二十一天 701.二叉搜索树中的插入操作 108.将有序数组转换为二叉搜索树

701.二叉搜索树中的插入操作 题目描述 给定二叉搜索树(BST)的根节点 root 和要插入树中的值 value ,将值插入二叉搜索树。 返回插入后二叉搜索树的根节点。 输入数据 保证 ,新值和原始二叉搜索树中的任意节点值都不同。 注意&a…

Tulsimer MB-1518——超纯水抛光树脂的技术应用

超纯水的制备和稳定性一直是相关领域极为重视的,那么超纯水中常会用到的抛光树脂技术,进口和国产对比起来究竟谁更甚一筹呢?接下来为大家分享的技术就是超纯水制备中常会用到的进口品牌:美国Tulsimer杜笙树脂中抛光树脂MB-106UP的…

设计师简历写作指南:教你如何获得高薪offer!

在找工作时,我们如何努力争取更多的主动权?在询问了许多大工厂的人力资源部后,即时设计帮助你总结了答案:请仔细设计你的简历!一个好的设计师的简历应该怎么做?虽然简历只有几张纸,但它是你个人…

MyBatis Plus:自定义typeHandler类型处理器

目录 引言:关于TypeHandler PostGreSQL:JSON数据类型 PostGreSQL数据库驱动:PGobject类 TypeHandler类型处理器 自定义类型处理器 类型处理器实现:PGJsonTypeHandler 注册类型处理器 引言:关于TypeHandler MyBa…

【快速搞定Webpack5】基本配置及开发模式介绍(二)

在开始使用webpack之前么,我们需要对Webpack的配置有一定的认识。 一、5大核心概念 1. enty(入口) 指示webpack从哪个文件开始打包 2. output(输出) 指示webpack打包完的文件输出到哪里去,如何命名等 …

Java 面向对象进阶 07 继承中成员变量,成员方法的访问特点(黑马)

一、继承中成员变量的访问特点: 打印结果为:zishow 这种情况打印出来的结果是Zi 这种情况打印的是Fu 这种情况就会报错 对于重名的情况,没有关键字,那么就是就近原则,打印出的是ziShow; this.name 指的是Zi…

java导出动态下拉框excel模板

1.原始模板 2.导出模板,下拉框为数据库中得到动态数据 public void downloadTemplate(HttpServletResponse response) throws IOException {// 所有部门List<String, String> departments expertManageMapper.selectAllDepartment();//所有职位List<String, String&g…

js设计模式:访问者模式

作用: 将操作方法封装在一个访问者对象中,而不是封装在每个被访问对象当中。 访问者对象可以通过调用被访问者的接口,用来操作被访问者。 示例: class App{accept(user){console.log(user,使用者)console.log(this,工具)user.use(this)}}class User{use(app){}}class Weixin…