[Go]-Go语言第一课

news2024/10/6 20:40:25

1-1 Go语言特点

特点:
1. 静态类型,编译开源语言

2. 脚本化的语法,支持多种编程范式(函数式,面向对象)

3. 原生,给力的并发支持并发编程

1-2 Go语言优势与劣势

Go语言的优势:
1.脚本化的语法;开发效率高,容易上手

2.静态类型+编译型,程序运行速度有保障;静态类型+编译型语言相对于动态类型+解释型语言的效率高

3.原生的支持并发编程;降低开发、维护成本/程序可以更好的执行

Go语言的劣势:
1.语法糖并没有Python和Ruby多;

2.目前的程序运行速度还不及C;比C++、java快

3.第三方函数库暂时不像绝对主流的编程语言那样多;

1-3 Linux下的安装

win & mac
下载安装包安装即可

Linux
1. wget https://go.dev/dl/go1.20.4.linux-arm64.tar.gz
2. tar -zxf go1.20.4.linux-arm64.tar.gz -C /usr/local

1-4 Linux下的环境变量

vim /etc/profile
#当前安装目录
export GOROOT=/usr/local/go

#工作区的集合
export GOPATH=~/golib:~/goproject

#可执行文件的目录
export GOBIN=~/gobin

export PATH=$PATH:$GOROOT/bin:$GOBIN

source /etc/profile

go version

2-1 Go语言-工作区和GOPATH

工作区是放置Go源码文件的目录;一般情况下,Go源码文件都需要存放到工作区中;但是对于命令源码文件来说,这不是必须的。

每一个工作区的结构都类似下图所示:/home/hypermind/golib:     src/    pkg/   bin/
   
src目录用于存放源码文件;以代码包为组织形式
   
pkg目录用于存放归档文件(名称以.a为后缀的文件)  所有归档文件都会被存放到该目录下的平台相关目录中,用样以代码包为组织形式
   
平台相关目录:两个隐含的Go语言环境变量:GOOS(操作系统)和GOARCH(计算机架构)。以$GOOS_$GOPATH为命名方式,如:linux_amd64
      
<工作区目录>/pkg/<平台相关目录>/<一级代码包>/<二级代码包>/<末级代码包>.a
      
bin目录:用于存放当前工作区中的Go程序的可执行文件
   
1.当环境变量GOBIN已有效设置时,该目录会变的无意义;
2.当GOPATH的值中包含多个工作区的路径时,必须设置GOBIN,否则无法成功安装Go程序的可执行文件

2-2 Go语言-源码文件的分类和含义

Go源码文件:名称以.go为后缀,内容以Go语言代码组织的文件 多个Go源码文件是需要用代码包组织起来的

源码文件分为三类:命令源码文件、库源码文件(go语言程序) 测试源码文件(辅助源码文件)

命令源码文件:声明自己属于main代码包、包含无参数声明和结果声明的main函数;被安装后,相应的可执行文件会被存放到GOBIN指向的目录或<当前工作区目录>/bin下
命令源码文件是Go程序的入口,但不建议把程序都写在一个文件中;同一个代码包中强烈不建议直接包含多个命令源码文件。

库源码文件:不具备命令源码文件的那两个特征的源码文件, 被安装后,相应的归档文件会被存放到<当前工作区目录>/pkg/<平台相关目录>下

测试源码文件:不具备命令源码文件的那两个特征的源码文件。名称以_test.go为后缀。其中至少有一个函数的名称以Test或Benchmark为前缀。并且,该函数接受一个类型为
*testing.T或*testing.B的参数

func TestFind(t *testing.T){//省略若干条语句} 
func BenchmarkFind(b *testing.B){//省略若干条语句}

2-3&4 Go语言-代码包的相关知识

代码包的作用:编译和归档Go程序的最基本单位。代码划分、集结和依赖的有效组织形式,也是权限控制的辅助手段
   代码包的规则:一个代码包实际上就是一个由导入路径代表的目录;导入路径即<工作区目录>/src或<工作区目录>/pkg/<平台相关目录>之下的某段子路径
               例如:代码包hypermind.cn可以对应于/home/hypermind/golib/src/hypermind.cn目录。(其中 /home/hypermind/golib是一个工作区目录)
   代码包的声明:每个源码文件必须声明其所属的代码包;同一个代码包中的所有源码文件声明的代码包应该是相同的。
   代码包声明与代码包导入路径的区别:
       代码包声明:代码包声明语句中的包名称应该是该代码包的导入路径的最右子路径,例如:hypermind.cn/pkgtool           package pkgtool
       代码包导入语句中使用的包名称应该与其导入路径一致,例如:  flag   fmt  strings    import("flag" "fmt" "strings")
       代码包的导入方法:带别名的导入:import str "strings"   str.HasPrefix("abc","a")
                       本地化的导入:import ."strings"  HasPrefix("abc","a")
                       仅仅初始化:import _"strings"    仅执行代码包中的初始化函数
                       

代码包初始化函数:无参数声明和结果声明的init函数

init函数可以被声明在任何文件中,且可以有多个

init函数的执行时机——单一代码包内

1对所有全局变量进行求值  2执行所有init函数

如果在不同对代码包内

1执行被导入对代码包中对init函数  2执行导入它对那个代码包对init函数

导入顺序  A——B——C 执行顺序 C——B——A

init函数肯定在main函数之前先执行,每一个init函数都只会执行一次

3-1 go run 命令简介

go run命令:
用于运行命令源码文件
只能接受一个命令源码文件以及若干个库源码文件作为文件参数

img

goc2p项目地址:https://github.com/hyper-carrot/goc2p

用go编写了ds和pds,用以打印目录结构

3-4 go run 常用标记的使用

-v:列出被编译的代码包的名称
-work: 显示编译时创建的临时工作目录的路径,并且不删除它
-x: 打印编译过程中所需运行的命令

-n;打印编译过程中所需的命令,但并不执行
-x:打印编译过程中所需的命令,并执行他们。

3-6 go build 命令简介

go build 简介(1)

用于编译源码文件或代码包

编译非命令源码文件不会产生任何结果文件

编译命令源码文件会在该命令的执行目录中生成一个可执行文件

Go build 简介(2)

执行该命令且不追加任何参数时,它会试图把当前目录作为代码包并编译

执行该命令且以代码包的导入路径作为参数时,该代码包及其依赖会被编译

执行该命令且以若干源码文件作为参数时,只有这些文件会被编译

3-8 go install 命令简介

go Install 简介(1)

用于编译并安装代码包或源码文件

安装代码包会在当前工作区的 pkg/<平台相关目录> 下生成归档文件

安装命令源码文件会在当前工作区的 bin 目录或 $GOBIN 目录下生成可执行文件

go install 简介(2)

执行该命令且不追加任何参数时,它会试图把当前目录作为代码包并安装

执行该命令且以代码包的导入路径作为参数时,该代码包及其依赖会被安装

执行该命令且以命令源码文件及相关库源码文件作为参数时,只有这些文件会被编译并安装

3-10 go get 命令简介

go get
用于从远程代码仓库(如GitHub)上下载并安装代码包

受支持的代码版本控制系统有:Git Mercurial(hg) SVN Bazaar

指定的代码包会被下载到$GOPATH中包含的第一个工作区的src目录中

3-12 go get 常用标记的使用

go get:

-d : 只执行下载动作, 不执行安装动作

-fix :在下载代码包后先执行修正动作,而后再进行编译和安装

-u : 利用网络来更新已有的代码包及其依赖包

go命令教程:https://github.com/hyper-carrot/go_command_tutorial

4-1 程序实体与关键字

img

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

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

相关文章

软考A计划-系统集成项目管理工程师-信息化知识(三)

点击跳转专栏>Unity3D特效百例点击跳转专栏>案例项目实战源码点击跳转专栏>游戏脚本-辅助自动化点击跳转专栏>Android控件全解手册点击跳转专栏>Scratch编程案例点击跳转>软考全系列 &#x1f449;关于作者 专注于Android/Unity和各种游戏开发技巧&#xff…

加密市场与上一轮周期有何异同?五大因素探讨加密市场未来之路

数字资产市场在一季度表现不俗&#xff0c;但二季度的表现却出现了相反的情况。数据显示&#xff0c;BTC 在一季度累计上涨了 71.69%&#xff0c;而二季度截至目前下跌了 7.31%。这样的变化主要是由金融监管机构针对整个数字资产行业采取的监管行动造成的。虽然 BTC 今年以来仍…

uniapp中uni-popup的用法——实例讲解

uni-pop弹出层组件&#xff0c;在应用中弹出一个消息提示窗口、提示框等,可以设置弹出层的位置&#xff0c;是中间、底部、还是顶部。 如下图效果所示&#xff1a;白色区域则为弹出的pop层。 一、 创建一个自定义组件&#xff1a; 1.项目中安装下载uni-pop插件。 2.把pop内容…

2023.6.19项目部署(一)前端项目部署

文章目录 项目部署&#xff08;一&#xff09;前端项目一、安装宝塔面板1、安装宝塔面板2、放行端口3、安装相关软件4、添加站点 二、项目打包1、Springboot打包2、vue项目打包 三、前端项目部署1、安装nginx2、修改配置文件 项目部署&#xff08;一&#xff09;前端项目 将开…

SQL优化的几种方法

目录 避免使用select *用union all代替union小表驱动大表批量操作多用limitSQL查找是否"存在"&#xff0c;别再count了&#xff01;in中值太多增量查询高效的分页用连接查询代替子查询join的表不宜过多join时要注意控制索引的数量选择合理的字段类型提升group by的效…

HTTPHTTPS协议详解

目录 一、HTTP是什么&#xff1f; 理解 "应用层协议" 理解 HTTP 协议的工作过程 二、HTTP 协议格式 抓包工具的使用 抓包工具的原理 抓包结果 协议格式总结 三、HTTP 请求 (Request) 认识 URL URL 基本格式 认识 "方法" (method) 认识请求 &quo…

使用Java设计实现一个高效可伸缩的计算结果缓存

目录 概述1.缓存实现1.1 使用HashMapSynchronized实现缓存1.2 使用ConcurrentHashMap代替HashMap改进缓存的并发1.3 完成可伸缩性高效缓存的最终方案1.4 测试代码 2.并发技巧总结 概述 现在的软件开发中几乎所有的应用都会用到某种形式的缓存&#xff0c;重用之前的计算结果能…

回收站数据恢复方法有哪些?五招走起,趁早上手

回收站数据恢复方法是我们在日常操作电脑时不可避免需要面对的问题。本文将对几种常用的回收站数据恢复方法进行介绍&#xff0c;为大家解决恢复回收站数据的常见问题。 一、使用快捷键恢复回收站文件 在我们的电脑中&#xff0c;有很多实用的快捷键&#xff0c;其中有效地恢…

分享干货,多编程语言代码生成神器 CodeGeeX,编码效率提升十倍

CodeGeeX 是一个具有 130 亿参数的多编程语言代码生成预训练模型&#xff0c;采用华为 MindSpore 框架实现&#xff0c;在鹏城实验室“鹏城云脑 II”上使用 1536 个国产昇腾 910 AI 处理器训练而成。 CodeGeexX 支持十多种主流编程语言的高精度代码生成、跨语言代码翻译等功能&…

Django网络空间微博管理信息系统-计算机毕设 附源码85633

Django网络空间微博管理信息系统 摘 要 本论文主要论述了如何使用django框架开发一个网络空间微博管理信息系统&#xff0c;本系统将严格按照软件开发流程进行各个阶段的工作&#xff0c;面向对象编程思想进行项目开发。在引言中&#xff0c;作者将论述该系统的当前背景以及系统…

MidJourney使用教程:一 第一次怎么用Midjourney

实际我是先写的prompts提示这部分&#xff0c;觉得Midjurney使用的方式&#xff0c;市面上已经有一大把文章了&#xff0c;另一方面觉得也没什么可写的。注册一个discard账号写个prompts描述出图就可以了&#xff0c;但其实有很多点其实忽略掉。比如图出来了&#xff0c;这四幅…

cesium封装实现卫星视锥扫描效果

废话不多说,先看效果 先封装视锥效果函数 // 绘制卫星锥体const radarScanner = (position,height,radarId,bottomRadius,color) => {viewer.entities.add({

基于Springboot+vue的垃圾分类网站设计与实现

博主介绍&#xff1a; 大家好&#xff0c;我是一名在Java圈混迹十余年的程序员&#xff0c;精通Java编程语言&#xff0c;同时也熟练掌握微信小程序、Python和Android等技术&#xff0c;能够为大家提供全方位的技术支持和交流。 我擅长在JavaWeb、SSH、SSM、SpringBoot等框架…

学生速看!免费领取一台阿里云服务器申请全流程

阿里云学生服务器优惠活动&#xff1a;高效计划&#xff0c;可以免费领取一台阿里云服务器&#xff0c;如果你是一名高校学生&#xff0c;想搭建一个linux学习环境、git代码托管服务器&#xff0c;或者创建个人博客网站记录自己的学习成长历程&#xff0c;拥有一台云服务器是很…

MT4开户平台交易注意事项有哪些?

很多投资者都会选择MT4平台进行开户交易&#xff0c;毕竟MT4平台的起步时间比较早&#xff0c;对一些关注资金安全的投资者来说&#xff0c;MT4平台无疑是他们最佳的选择&#xff0c;那么&#xff0c;在MT4开户平台交易就一定不会发生失误吗&#xff1f;答案就是&#xff1a;不…

红帽考试常见问题解答

问&#xff1a;红帽考试结束后&#xff0c;何时可以收到成绩&#xff1f; 答&#xff1a;美国认证中心会在 3&#xff5e;5 个工作日内将成绩通知邮件发给考生&#xff0c;请注意提供正确的联系信息。例外情况&#xff1a;一些邮件服务器会错误地将结果电子邮件作为垃圾邮件处…

【Python 随练】相反顺序输出字符串

题目 利用递归函数调用方式&#xff0c;将所输入的 5 个字符&#xff0c;以相反顺序打印出来。 简介 在本篇博客中&#xff0c;我们将使用递归函数来解决一个字符打印的问题。我们将介绍递归的概念&#xff0c;并提供一个完整的代码示例来实现将输入的字符以相反顺序打印出来…

驱动开发:基于事件同步的反向通信

在之前的文章中LyShark一直都在教大家如何让驱动程序与应用层进行正向通信&#xff0c;而在某些时候我们不仅仅只需要正向通信&#xff0c;也需要反向通信&#xff0c;例如杀毒软件如果驱动程序拦截到恶意操作则必须将这个请求动态的转发到应用层以此来通知用户&#xff0c;而这…

Apache Superset 身份认证绕过漏洞(CVE-2023-27524)

漏洞简介 Apache Superset是一个开源的数据可视化和数据探测平台&#xff0c;它基于Python构建&#xff0c;使用了一些类似于Django和Flask的Python web框架。提供了一个用户友好的界面&#xff0c;可以轻松地创建和共享仪表板、查询和可视化数据&#xff0c;也可以集成到其他…

二进制搭建 Kubernetes v1.20

k8s集群master01&#xff1a;192.168.179.25 kube-apiserver kube-controller-manager kube-scheduler etcd k8s集群master02&#xff1a;192.168.179.26 k8s集群node01&#xff1a;192.168.179.23 kubelet kube-proxy docker k8s集群node02&#xff1a;192.168.179.22 …