[Go]-Go语言第一课

news/2023/11/30 12:45:47

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=~/gobinexport PATH=$PATH:$GOROOT/bin:$GOBINsource /etc/profilego version

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

工作区是放置Go源码文件的目录;一般情况下,Go源码文件都需要存放到工作区中;但是对于命令源码文件来说,这不是必须的。每一个工作区的结构都类似下图所示:/home/hypermind/golib:     src/    pkg/   bin/src目录用于存放源码文件;以代码包为组织形式pkg目录用于存放归档文件(名称以.a为后缀的文件)  所有归档文件都会被存放到该目录下的平台相关目录中,用样以代码包为组织形式平台相关目录:两个隐含的Go语言环境变量:GOOS(操作系统)和GOARCH(计算机架构)。以$GOOS_$GOPATH为命名方式,如:linux_amd64<工作区目录>/pkg/<平台相关目录>/<一级代码包>/<二级代码包>/<末级代码包>.abin目录:用于存放当前工作区中的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——Ainit函数肯定在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.ppmy.cn/news/481862.html

相关文章

使用cygwin编译vue项目

近期编译uniapp项目&#xff0c;由于项目模板版本较老&#xff0c;要求使用nodejs v14&#xff0c;利用nvm切换 v14后&#xff0c;发现DCloud的库必须使用node-sass版本必须是4.0&#xff0c;而node-sass必须使用node-gyp的3.8版本&#xff0c;进而发现node-gyp的3.8版本使用MS…

输入汉字转自动转拼音 20378个词库

<?php /*** Created by PhpStorm.* User: Lihongfei* Date: 2016-06-16* Time: 20:51*/ class PinYin {//20378个词库private $dict_list array(3007 > ling, 4E00 > yi, 4E01 > ding, 4E02 > kao, 4E03 > qi, 4E04 > shang, 4E05 > xia, 4E07 > …

光敏电阻、光电二三极管及接收头

目录&#xff1a; 一、光敏电阻 1、光谱 2、光敏电阻原理 3、常用光敏电阻参数 二、光敏二极管工作原理 三、光敏二极管主要参数 1、最高反向工作电压BVR 2、暗电流ID 3、光电流IL 4、光电灵敏度Sn 5、响应时间Tr/Tf 6、正向压降VF 7、结电容Ct 四、常用光敏二极…

分割项目学习过程,完结撒花

一介绍 任务背景&#xff1a; 2018年IDRiD挑战sub1(hard exudates segmentation) using unet based on tensorflow and tensorlayer 任务描述 来自&#xff1a; https: //idrid.grand-challenge.org/Segmentation/https://idrid.grand-challenge.org/Segmentation/ 该挑战赛的…

PoE供电六大常见问题大全解析

近年来&#xff0c;随着PoE供电技术的发展&#xff0c;从百兆到千兆&#xff0c;再到全千兆&#xff0c;PoE供电技术的发展势头越来越强劲。凭借简化用电设备的安装和部署、节能&#xff0c;安全等一系列优势&#xff0c;PoE供电成为无线覆盖、安防监控、以及智能电网等场景的新…

关于GPON的清晰明了的总结与配置示例,重点已加粗

GPON概述 PON是一种点到多点&#xff08;P2MP&#xff09;结构的无源光网络&#xff1b; GPON&#xff1a;千兆比特无源光网络&#xff0c;二层协议 PON网络的组成&#xff1a; 1、光线路终端 OLT 2、光分配网络 ODN 传输通道&#xff1a;主要包括无源分光器和光纤 3、光网络…

使用TFTP进行文件传输

2019独角兽企业重金招聘Python工程师标准>>> 使用TFTP进行文件传输 &#xff08;系统版本&#xff1a; Ubuntu 14.04或以上&#xff09; 在嵌入式系统开发中&#xff0c;经常需要从主机上传送映像、文件等到目标机上。实现的方法有很多。如tftp&#xff0c;scp等。 …

MA5626 MA5620修改特定MAC替代家用光猫注册配置指导

只有MA5620/MA5626有注册MAC比桥MAC小1的规律&#xff0c;其他扣板的MXU没有规律 如何修改桥MAC MA5626和MA5620的修改方式相同 MA5626(diagnose)%%display sysman mac-address -->查看当前设备的MAC地址 …

基于html+css的图展示135

准备项目 项目开发工具 Visual Studio Code 1.44.2 版本: 1.44.2 提交: ff915844119ce9485abfe8aa9076ec76b5300ddd 日期: 2020-04-16T16:36:23.138Z Electron: 7.1.11 Chrome: 78.0.3904.130 Node.js: 12.8.1 V8: 7.8.279.23-electron.0 OS: Windows_NT x64 10.0.19044 项目…

留个档,Unity Animator state节点的Motion动态替换AnimationClip

前言 由于Unity没有提供直接替换的API&#xff0c;所以在仅限的API下进行逻辑操作。 替换的原理是差不多的&#xff0c;利用AnimatorOverrideController&#xff0c;进行运行时的覆盖。 网上搜索很多文章是利用 名字字符串作为hash的key来进行替换。不满足我自己项目中的需求…

C语言进阶教程(大小端存储)

文章目录 前言一、大小端的概念二、怎么判断大小端总结 前言 从本篇文章开始我将为大家带来C语言的进阶教程&#xff0c;在本教程中你将会深入学习C语言&#xff0c;掌握好C语言为日后的编程基础打下坚实的基础。 一、大小端的概念 大小端&#xff08;Endianness&#xff09…

设计模式-04.01-结构型-代理桥接装饰器适配器

引言 创建型模式比较好理解&#xff0c;后面的结构型和行为型设计模式不是那么好理解。如果遇到不好理解的设计模式&#xff0c;我一般会在开头举比较简单的Demo案例来帮助理解。 代理模式【常用】 前面几节&#xff0c;我们讲了设计模式中的创建型模式。创建型模式主要解决…

C++基础(6)——类和对象(4)

前言 本文主要介绍了C中运算符重载的基本知识。 4.5.1&#xff1a;加号运算符重载&#xff08;成员函数和全局函数都可实现&#xff09; 运算符重载&#xff1a;对已有的运算符重新进行定义&#xff0c;赋予其另一种功能&#xff0c;以适应不同的数据类型 1&#xff1a;成员…

2023届毕业生注意啦!7-9K/月*15薪急聘10名云服务工程师!

为了帮大家毕业即就业&#xff0c;顺利完成校园到职场的过渡&#xff0c;小誉今天又给大家带来了面向2023年应届毕业生的优质岗位&#xff01;有想法的小伙伴记得带上简历私聊哦~ 云服务工程师 工作职责&#xff1a; 1. 负责公司重点客户运维工作&#xff0c;承担客户华为公有…

论文写作全攻略

【基于Citespace和vosviewer文献计量学相关论文 】 文献计量学是指用数学和统计学的方法&#xff0c;定量地分析一切知识载体的交叉科学。它是集数学、统计学、文献学为一体&#xff0c;注重量化的综合性知识体系。特别是&#xff0c;信息可视化技术手段和方法的运用&#xff0…

Node.js学习笔记(七) 版本管理

大家好&#xff0c;我是半虹&#xff0c;这篇文章来讲 Node 版本管理&#xff0c;主要介绍 nvm 的安装与使用 0、Node 版本管理 在日常开发中&#xff0c;我们可能会同时做多个项目&#xff0c;这些项目所使用的 Node 版本往往各不相同 当切换项目时&#xff0c;需要同步去切…

Python之枚举类Enum定义错误码

在 ​​web​​​ 项目中&#xff0c;我们经常使用自定义状态码来告知请求方请求结果以及请求状态&#xff1b;在 ​​Python​​ 中该如何设计自定义的状态码信息呢&#xff1f; 1、普通类字典设计状态码 class RETCODE:OK "0"ERROR …

苹果Vision Pro生态升级,UWB芯片制程规格将提高

苹果将积极升级硬件产品规格以建构更有竞争力的 Vision Pro 生态&#xff0c;UWB芯片制程规格将提高。 郭明錤称&#xff0c;Vision Pro 的成功关键之一在于生态&#xff0c;当中包括能否与其他苹果硬件产品整合&#xff0c;而与此相关的主要硬件规格为 Wi-Fi 与 UWB。iPhone…

jvm堆默认行为

堆默认配置 JVM 的默认堆参数是在安装 JDK 时确定的&#xff0c;并且通常是根据系统的物理内存大小和其他配置参数进行设置的。这些默认值在安装时被写入到 JVM 的配置文件中&#xff0c;后续运行时不会自动更改。 默认情况下&#xff0c;JVM 的初始堆大小&#xff08;InitialH…

面试题 :10亿url去重只给4G内存

我能想到的有以下几种&#xff1a; 用语言判断去重&#xff0c;ex表格去重&#xff0c;数据库去重&#xff0c;文件名字去重&#xff0c; 有人说&#xff1a;10亿url ex表放不下&#xff01;&#xff01; 可以用树和折半的思想将10亿url,变成单元最小化的树&#xff0c;然后用e…
最新文章