Go的入门
一、GO简介
Go语言(也叫 Golang)是Google开发的开源编程语言。
1. 语言特性
Go 语法简洁,上手容易,快速编译,支持跨平台开发,自动垃圾回收机制,天生的并发特性,更好地利用大量的分布式和多核的计算机。简单来说:Go语言实现了开发效率与执行效率的完美结合,具有媲美C语言的运行速度,又具有与Python,Java语言相近开发效率。
2. 语法特点
Go 语言支持指针,引入协程(goroutine)实现并发,通过Channel实现协程间通讯,函数方法支持多个返回值,通过 recover 和 panic 来替代异常机制,从1.18版本开始支持泛型;
没有类概念,通过结构体和interface实现面向对象,不支持函数重载,不支持隐式转换,不支持三元运算符,不支持静态变量,
不支持动态链接库和动态加载代码;
二、安装配置
百度自行查询
并设置对应的环境变量。具体SDK库使用见官网标准库文档,三方中文文档:https://studygolang.com/pkgdoc
#查看版本
go version#查看Go环境变量
go env
查看所有命令:
go help
main.go 源文件如下:
package mainimport "fmt"func main() {fmt.Println("Hello, 世界")
}
编译
#编译 输出可执行文件.exe
go build helloworld.go
#编译并运行
go run helloworld.go
工程化
Go 官方在1.11开始推出了Go Modules的功能,配置GO111MODULE=auto 启用,1.13版本默认启动,用于go项目得依赖管理
设置代理:
go env -w GOPROXY=https://goproxy.cn
常用代理:阿里云(https://mirrors.aliyun.com/goproxy/ )七牛云(https://goproxy.cn),https://goproxy.io
#创建目录
mkdir hello
cd hello
#初始化工程
go mod init example/hello# 下载依赖包
go get github.com/robfig/cron@v1.2.0
go get github.com/google/uuid@v1.3.0 #下载$GOPATH/pkg/mod目录下
输出:
go.mod 文件标记每个依赖包的版本
module example/hello
go 1.15require (github.com/google/uuid v1.3.0github.com/robfig/cron v1.2.0
)
go.sum 文件记录每个依赖包的哈希值
github.com/google/uuid v1.3.0 h1:t6JiXgmwXMjEs8VusXIJk2BXHsn+wx8BZdTaoZ5fu7I=
github.com/google/uuid v1.3.0/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo=
github.com/robfig/cron v1.2.0 h1:ZjScXvvxeQ63Dbyxy76Fj3AT3Ut0aKsyd2/tl3DTMuQ=
github.com/robfig/cron v1.2.0/go.mod h1:JGuDeoQd7Z6yL4zQhZ3OPEVHB7fL6Ka6skscFHfmt2k=
正常情况下,每个依赖包版本会包含两条记录:
- 第一条记录为该依赖包版本整体(所有文件)的哈希值
- 第二条记录仅表示该依赖包版本中go.mod文件的哈希值
go.mod只需要记录直接依赖的依赖包版本,只在依赖包版本不包含go.mod文件时候才会记录间接依赖包版本; go.sum则是要记录构建用到的所有依赖包版本, go.sum文件中记录的依赖包版本数量往往比go.mod文件中要多
GOSUMDB 环境变量标识checksum database,用于依赖包版本写入go.sum 文件之前进行二次校验
go不允许循环依赖(包A>包B>包C>包A)
早期GOPATH工作区方式,GOPATH包含三个子目录:
- src 存放源代码的位置
- pkg 存储预编译目标文件的地方,以加速程序的后续编译
- bin 编译后的二进制文件的位置
引入三方套件,先查找目录GOPATH/src没有再查找目录GOROOT/src,如果没找到就报错了,虽然有一些第三方的包管理工具比如:Vendor、Dep,但是并不好用
引入本地包
module example/hello
go 1.15require (github.com/google/uuid v1.3.0github.com/robfig/cron v1.2.0example/greeting v1.0.0 //indirect
)
//replace 将远程包替换为本地包服 模块名=>模块路径
replace example/greeting => ../greeting
//indirect 不能省略
包管理
- 文件夹名与包名没有直接关系,并非需要一致,但建议一致
- 同一个文件夹下的文件只能有一个包名(即一个目录内只能有一个包名)
- import 两个同名包时,可以设置别名区分
import ("example/hello/com/greeting" // 模块名+包路径_ "example/hello/com/math" //匿名(可以不使用),促发包内init()方法myMath "example/hello/com/math" //设置别名"fmt"
)
func main() {greeting.Say() //包名.方法名fmt.Println("hello world")
}
访问控制
以首字母大小写进行变量、方法、函数得访问控制
- 首字母大写,公开的
- 首字母小写,包级私有的,只能包内访问
- internal代码包内,首字母大写的,模块级私有(go 1.4版本)
只能该代码包得 直接父包及其子包中的代码引用
相关文章:
Go的入门
一、GO简介 Go语言(也叫 Golang)是Google开发的开源编程语言。 1. 语言特性 Go 语法简洁,上手容易,快速编译,支持跨平台开发,自动垃圾回收机制,天生的并发特性,更好地利用大量的分…...
windows中使用Jenkins打包,部署vue项目完整操作流程
文章目录 1. 下载和安装2. 使用1. 准备一个 新创建 或者 已有的 Vue项目2. git仓库3. 添加Jenkinsfile文件4. 成功示例 1. 下载和安装 网上有许多安装教程,简单罗列几个 Windows系统下Jenkins安装、配置和使用windows安装jenkins 2. 使用 在Jenkins已经安装的基础上,可以开始下…...
RocketMQ中概念知识点记录 和 与SpringBoot集成实现发送 同步、异步、延时、批量、tag、key、事务消息等
1. 消息模型 消息(Message): 是 RocketMQ 中数据传输的基本单位,由主题、标签、键值、消息体等组成。主题(Topic): 消息的分类,类似于邮件的主题,用于对消息进行粗粒度的分类。标签(…...
云计算实训09——rsync远程同步、自动化推取文件、对rsyncd服务进行加密操作、远程监控脚本
一、rsync远程同步 1.rsync基本概述 (1)sync同步 (2)async异步 (3)rsync远程同步 2.rsync的特点 可以镜像保存整个目录树和文件系统 可以保留原有权限,owner,group,时间,软硬链…...
【DGL系列】DGLGraph.out_edges简介
转载请注明出处:小锋学长生活大爆炸[xfxuezhagn.cn] 如果本文帮助到了你,欢迎[点赞、收藏、关注]哦~ 目录 函数说明 用法示例 示例 1: 获取所有边的源节点和目标节点 示例 2: 获取特定节点的出边 示例 3: 获取所有边的边ID 示例 4: 获取所有信息&a…...
掌握品质之钥:ISO9001质量管理体系认证的巨大价值
在当今竞争激烈的市场环境中,企业若要脱颖而出并持续成功,就必须确保其产品和服务质量始终如一。ISO9001质量管理体系认证正是帮助企业实现这一目标的关键工具。本文将深入探讨ISO9001认证的巨大价值以及它如何助力企业提升竞争力、优化内部管理并赢得客…...
网络开局 与 Underlay网络自动化
由于出口和核心设备 部署在核心机房,地理位置集中,业务复杂,开局通常需要网络工程师进站调测。 因此核心层及核心以上的设备(包含核心层设备,旁挂独立AC设备和出口设备)推荐采用WEB网管开局方式或命令行开局方式。 核心以下的设备(包含汇聚层设备、接入层设备和AP)由于数量众…...
MySQL MVCC原理
全称Multi-Version Concurrency Control,即多版本并发控制,主要是为了提高数据库的并发性能。 1、版本链 对于使用InnoDB存储引擎的表来说,它的聚簇索引记录中都包含两个必要的隐藏列: 1、trx_id:每次一个事务对某条…...
编织文字的魔法:探索WebKit的CSS文本效果
编织文字的魔法:探索WebKit的CSS文本效果 在现代网页设计中,文本不仅仅是信息的载体,更是视觉表现的重要元素。WebKit,作为众多浏览器的核心引擎,支持一系列CSS文本效果,使开发者能够创造出引人注目的文本…...
如何在Linux上部署Ruby on Rails应用程序
在Linux上部署Ruby on Rails应用程序是一个相对复杂的过程,需要按照一系列步骤进行。下面是一个基本的部署过程,涵盖了从安装所需软件到部署应用程序的所有步骤。 安装必要的软件 在部署Ruby on Rails应用程序之前,需要确保Linux系统上安装了…...
极狐GitLab 如何管理 PostgreSQL 扩展?
GitLab 是一个全球知名的一体化 DevOps 平台,很多人都通过私有化部署 GitLab 来进行源代码托管。极狐GitLab :https://gitlab.cn/install?channelcontent&utm_sourcecsdn 是 GitLab 在中国的发行版,专门为中国程序员服务。可以一键式部署…...
SpringBoot如何使用Kafka来优化接口请求的并发
在Spring Boot中使用 Kafka 来优化接口请求的并发,主要是通过将耗时的任务异步化到Kafka消息队列中来实现。这样,接口可以立即响应客户端,而不需要等待耗时任务完成。 在Spring Boot应用程序中调用Kafka通常涉及使用Spring Kafka库ÿ…...
全面了解不同GPU算力型号的价格!
这两年人工智能(AI)、机器学习(ML)、深度学习和高性能计算(HPC)领域的快速发展,GPU算力已成为不可或缺的资源。企业、研究机构乃至个人开发者越来越依赖于GPU加速计算来处理大规模数据集和复杂模…...
Linux网络编程之UDP
文章目录 Linux网络编程之UDP1、端口号2、端口号和进程ID的区别3、重新认识网络通讯过程4、UDP协议的简单认识5、网络字节序6、socket编程接口6.1、socket常见接口6.2、sockaddr通用地址结构 7、简单的UDP网络程序7.1、服务器响应程序7.2、服务器执行命令行7.3、服务器英语单词…...
graham 算法计算平面投影点集的凸包
文章目录 向量的内积(点乘)、外积(叉乘)确定旋转方向numpy 的 cross 和 outernp.inner 向量与矩阵计算示例np.outer 向量与矩阵计算示例 python 示例生成样例散点数据图显示按极角排序的结果根据排序点计算向量转向并连成凸包 基本…...
【海外云手机】静态住宅IP集成解决方案
航海大背景下,企业和个人用户对于网络隐私、稳定性以及跨国业务的需求日益增加。静态住宅IP与海外云手机的结合,提供了一种创新的集成解决方案,能够有效应对这些需求。 本篇文章分为三个部分;静态住宅优势、云手机优势、集成解决…...
最新!CSSCI(2023-2024)期刊目录公布!
【SciencePub学术】据鲁迅美术学院7月16日消息,近日,南京大学中国社会科学研究评价中心公布了中文社会科学引文索引(CSSCI)(2023—2024)数据库最新入选目录。 C刊一般指CSSCI来源期刊,即南大核心…...
C语言 | Leetcode C语言题解之第237题删除链表中的节点
题目: 题解: /*** Definition for singly-linked list.* struct ListNode {* int val;* struct ListNode *next;* };*/void deleteNode(struct ListNode* node) {struct ListNode * p node->next;int temp;temp node->val;node->val…...
linux LED代码设计
设计目标: 写RGB LED灭、亮、闪烁等效果,不同颜色也需要设置 #include <iostream> #include <unistd.h> // 对于usleep() #include <fcntl.h> // 对于open(), close() #include <sys/ioctl.h> // 对于ioctl() #include <li…...
Jvm基础(一)
目录 JVM是什么运行时数据区域线程私有1.程序计数器2.虚拟机栈3.本地方法栈 线程共享1.方法区2.堆 二、对象创建1.给对象分配空间(1)指针碰撞(2)空闲列表 2.对象的内存布局对象的组成Mark Word类型指针实例数据:对齐填充 对象的访问定位句柄法 三、垃圾收集器和内存…...
深入理解FFmpeg--软/硬件解码流程
FFmpeg是一款强大的多媒体处理工具,支持软件和硬件解码。软件解码利用CPU执行解码过程,适用于各种平台,但可能对性能要求较高。硬件解码则利用GPU或其他专用硬件加速解码,能显著降低CPU负载,提升解码效率和能效。FFmpe…...
新的铸造厂通过 PROFIBUS 技术实现完全自动化
钢铁生产商某钢以其在厚钢板类别中极高的产品质量而闻名。其原材料(板坯连铸机)在钢铁厂本地生产,该厂最近新建了一座垂直连铸厂。该项目的一个主要目标是从一开始就完全自动化这座新工厂和整个铸造过程,以高成本效率实现最佳产品…...
【UE5.1】NPC人工智能——04 NPC巡逻
效果 步骤 一、准备行为树和黑板 1. 对我们之前创建的AI控制器创建一个子蓝图类 这里命名为“BP_NPC_AIController_Lion”,表示专门用于控制狮子的AI控制器 2. 打开狮子蓝图“Character_Lion” 在类默认值中将“AI控制器类”修改为“BP_NPC_AIController_Lion” 3…...
计算机视觉主流框架及其应用方向
文章目录 前言一、计算机视觉领域的主要框架1、深度学习框架1.1、TensorFlow1.2、PyTorch 2、神经网络模型2.1、卷积神经网络(CNN)2.2、循环神经网络(RNN) 二、框架在计算机视觉任务中的应用1、TensorFlow1.1、概述:1.…...
群晖 搭建alist 记录
docker搭建 使用docker-compose 创建一个 docker-compose.yml version: 3.5services:qbittorrent:image: linuxserver/qbittorrent:latestcontainer_name: qbittorrent# network_mode: hostenvironment:- PUID1000- PGID100- TZAsia/Shanghai- WEBUI_PORT8181 # 将外部端口…...
【北航主办丨本届SPIE独立出版丨已确认ISSN号】第三届智能机械与人机交互技术学术会议(IHCIT 2024,7月27)
由北京航空航天大学指导,北京航空航天大学自动化科学与电气工程学院主办,AEIC学术交流中心承办的第三届智能机械与人机交互技术学术会议(IHCIT 2024)将定于2024年7月27日于中国杭州召开。 大会面向基础与前沿、学科与产业…...
深入浅出WebRTC—NACK
WebRTC 中的 NACK(Negative Acknowledgment)机制是实时通信中处理网络丢包的关键组件。网络丢包是常见的现象,尤其是在无线网络或不稳定连接中。NACK 机制旨在通过请求重传丢失的数据包来减少这种影响,从而保持通信的连续性和质量…...
简单工厂模式、工厂模式和抽象工厂模式的区别
简单工厂模式、工厂模式和抽象工厂模式都是创建型设计模式,它们之间在目的、实现方式和适用场景上存在显著的区别。以下是对这三种模式的详细比较: 一、定义与目的 简单工厂模式(Simple Factory Pattern) 定义: 简单工…...
JVM-垃圾回收与内存分配
目录 垃圾收集器与内存分配策略 引用 对象的访问方式有哪些?(句柄和直接指针) Java的引用有哪些类型? 如何判断对象是否是垃圾? 请列举一些可作为GC Roots的对象? 对象头了解吗? mark word(hashcode、分代、锁标志位)、…...
Jolt路线图
1. 引言 a16z crypto团队2024年7月更新了其Jolt路线图: 主要分为3大维度: 1)链上验证维度: 1.1)Zeromorph:见Aztec Labs团队2023年论文 Zeromorph: Zero-Knowledge Multilinear-Evaluation Proofs from…...
旅游网站开发毕业论文前言/搜索引擎收录提交入口
用户在使用经典虚拟机时,经常会有如下疑问:门户主板页面中的 SSH/RDP 证书指纹这项信息是怎么来的?用途是什么?为什么有的时候为空?有没有对虚拟机使用有什么影响?以下我们进行一些基本的介绍: …...
富通建设有限公司网站/重庆百度推广开户
Javascript 文件操作 一、功能实现核心:FileSystemObject 对象 其实,要在Javascript中实现文件操作功能,主要就是依靠FileSystemobject对象。在详细介绍FileSystemobject对象的各个属性和方法的使用细节前,先来看看这个对象包括哪…...
wordpress置顶精华图标/推广引流
本套文章是Java8官方GC调优指南的全文翻译,点击查看原文,原文章名称《Java Platform, Standard Edition HotSpot Virtual Machine Garbage Collection Tuning Guide》4 Sizing the Generations 设置分代大小下图描述了堆内存已提交空间和虚拟空间的区别。在JVM启动初…...
建设中小企业网站/精准推广引流5000客源
2019独角兽企业重金招聘Python工程师标准>>> 开源IDE,LightTable,比较小巧,居然有种完爆我大Sublime的赶脚,可惜全是英文的,特此记录一些用法。 其实就是它自带的帮助文档,不过全是英文,全当练翻…...
温岭新站seo/找小网站的关键词
最开始直接缓存数据库,再后来根据业务需要缓存一些业务结果或页面结果,是有必要的,这里需要一步一步,不可能当时就做这种优化。优化是一步一步的。 不能太过,也不能太少了,看业务规划。 memcache对数据库的…...
app开发方式/宁波seo网络推广推荐
希望自己能够通过对本课程的学习,对C语言能有进一步的了解,能够学会自主运用,学习到经验技术和知识,也希望老师能够在学习新知识时多讲解多运用,反复练习,以增加学生对新知识的熟练度和理解度。转载于:http…...