优雅的go语言--入门篇
1.特点
1.静态类型,编译型的开源语言
2.脚本华的语法,支持多种编程范式(函数式&面向对象)
3.原生,给力的并发编程的支持
2.优势
1.脚本化的语法
2.静态类型+编译型,程序运行速度有保障
3.原生支持并发编程(降低开发,维护成本。程序可以更好的执行)
3.劣势
1.语法糖并没有python和ruby那么多
2.目前的程序运行速度还不及c。但已经赶超c++和Java
3.第三方函数库暂时不能像绝对主流的编程语言那样多
4.环境设置
1.GOROOT:安装目录
2.GOPATH:工作区
3.GOBIN:编译文件
5.工作区和GOPATH
1.工作区是放置go源码文件的目录
2.一般情况下,go源码文件都需要存放在工作区
3.对于命令源码文件,并不是必须的
4.工作区的目录:
0.平台相关目录
1.两个隐含的go语言环境变量
GOOS:操作系统
GOARCH:计算架构
2.以$GOOS_ $GOARCH 为命名方式,如darwin_amd64
1.src:
1.用于存放源码文件
2.以代码包为组织形式
2.pkg:
1.用于存放归档文件(名称以.a为后缀的文件)
2.所有归档文件都会被存放在pkg目录下的平台相关目录中,同样以代码包为组织形式
3.bin:
1.用于存放当前工作区中的go程序的可执行文件
2.失效:
1.当环境变量GOBIN已有效设置时,该目录会变的无意义
2.当GOPATH的值中包含多个工作区的路径时,必须设置GOBIN,否则无法成功安装go程序的可执行文件
6.源码文件的分类和含义
1.go源码文件
1.名称以.go为后缀,内容以go语言代码组织的文件
2.多个go源码文件是需要用代码包组织起来的
2.源码文件分类
1.命令源码文件,库源码文件:go语言程序
2.测试源码文件:辅助源码文件
3.命令源码文件
1.声明自己属于main代码包,包含无参数声明和结果声明的main函数
2.被安装后,相应的可执行文件会被存放到GOBIN指向的目录或 当前工作区目录的bin目录下
3.go程序的入口,但不建议把程序都写在一个文件中
4.同一个代码包中强烈不建议直接包含多个命令源码文件
4.库源码文件
1.不具备命令源码文件的特征的源码文件
2.被安装后,相应的归档文件会被存放到当 前工作区目录/pkg/平台相关目录 下
5.测试源码文件
1.与库源码文件类似
2.不具备命令源码文件的特征的源码文件
3.名称以_test.go为后缀
4.有测试函数:
1.至少有一个函数名称以Test或Benchmark为前缀
2.该函数接受一个类型为*testing.T或*testing.B的参数
3.示例:
func TestFind(t *testing.T){ } //功能测试函数 func BenchmarkFind(b *testing.B){ } //基准测试函数或性能测试函数
7.代码包的相关知识
1.代码包的作用
1.编译和归档的最基本单位
2.代码划分,集结和依赖的有效组织形式,也是权限控制的辅助手段
2.代码包的规则
1.一个代码包实际上就是一个由导入路径代表的目录
2.导入路径即 (工作区目录/src 或 工作区目录/pkg/平台相关目录) 之下的某段子目录
3.代码包的声明
1.每个源码文件必须声明其所属的代码包
2.同一个代码包中的所有源码文件声明的代码包应该是相同的
4.代码包声明与代码包导入路径的区别
1.代码包声明语句中的包名称应该是该代码包的导入路径的最右子路径
5.代码包导入
1.代码包导入语句中使用的包名称应该与其导入的路径一致
6.代码包导入方法
1.普通导入方法
import “strings”===> strings.HasPrefix(“abc”,”a”)
2.带别名的导入
import str “strings”===>str.HasPrefix(“abc”,”a”) //可以直接使用别名
3.本地化的导入
import . “strings”===>HasPrefix(“abc”,”a”) //无需前缀,本地!!!
4.仅仅初始化
import _ “strings” //仅执行代码包中的初始化函数
7.代码包初始化
1.代码包初始化函数即:无参数声明和结果声明的init函数
2.init函数可以被声明在任何文件中,且可以有多个,同一代码包下多个init函数执行顺序是不确定的
3.init函数执行时机
1.单一代码包内:对所有全局函数进行求值===>执行所有init函数
2.不同代码包之间:执行被导入代码包中的init===>执行导入它的那个代码包的init函数
3. 4.每一个init函数只会被执行一次,init在main函数之前执行
8.命令基础
1.go run
1.用于运行命令源码文件
2.只能接受一个命令源码文件以及若干个库源码文件作为文件参数,程序只能有一个入口
3.其内部操作步骤是:先编译源码文件再运行
源码文件 —> 编译 —> 临时文件 —>运行 —>1. 可执行文件 2.归档文件
4.常用标记
1.-a :强制编译相关代码,不论它们的编译结果是否已是最新的,一般加上
2.-n :打印编译过程中所需的命令,但不真正执行它们
3.-p n :并行编译,n代表并行数量。n的值最好设置为当前cpu的逻辑cpu(所有cpu的核的总数量)的个数。加快编译速度
4.-v : 列出被编译的代码包的名称(不包含go语言自带的标准库的代码包)
5.-work :显示编译时创建的临时工作目录的路径,并且不删除此临时工作目录
6.-x :打印编译过程中所需运行的命令,并执行它们
2.go build
1.用于编译源码文件或代码包
2.编译非命令源码文件不会产生任何结果文件,只会检查源码文件的有效性
3.编译命令源码文件会在该命令的执行目录中生成一个可执行文件
4.执行该命令且不追加任何参数时,它会试图把当前目录作为代码包并编译
5.执行该命令且以代码包的导入路径作为参数时,该代码包及其依赖会被编译
6.执行该命令且以若干源码文件作为参数时,只有这些文件会被编
3.go install
1.用于编译并安装代码包或源码文件
2.安装代码包会在当前工作区的 pkg/平台相关目录 下生成归档文件
3.安装命令源码文件会在当前工作区的bin目录或$GOBIN目录下生成可执行文件
4.执行该命令且不追加任何参数时,它会试图把当前目录作为代码包并安装
5.执行该命令且以代码包的导入路径作为参数时,该代码包及其依赖会被安装
6.执行该命令且以命令源码文件及相关库源码文件作为参数时,只有这些文件会被编译并安装
4.go get
1.用于从远程仓库上下载并安装代码包 如:GitHub,gitLlab,Gogs
2.受支持的代码版本控制系统:git,hg,svn,bazaar
3.指定的代码包会被带走到¥GOPATH中包含的第一个工作区的src目录中 4.常用标记
1.-d :直至下载工作,而不执行安装动作
2.-fix :在下载代码包之后先执行修正动作,而后再紧张编译和安装。主要为了消除版本不兼容
3.-u :利用网络来更新已有的代码包及其依赖包
优雅的go语言--入门篇的更多相关文章
- Go语言入门篇-网络经验
Go语言学习手册 golang*看云 golang圣经 wuYinIO 1.go语言开发中的坑 go新手容易犯的三个致命错误 Golang 需要避免踩的 50 个坑 2.go语言数据类型 map ...
- 明解C语言 入门篇 第五章答案
练习5-1 /* 依次把1.2.3.4.5 赋值给数组的每个元素并显示(使用for语句) */ #include <stdio.h> int main(void) { int i; ]; ...
- Go语言入门篇-gRPC基于golang & java简单实现
一.什么是RPC 1.简介: RPC:Remote Procedure Call,远程过程调用.简单来说就是两个进程之间的数据交互. 正常服务端的接口服务是提供给用户端(在Web开发中就是浏览器)或者 ...
- Go语言入门篇-JSON&http调用
一.Decoder /(一)Decoder func DecoderExample(){ const jsonStream = ` { "Name" : "Ed" ...
- Go语言入门篇-使用Beego构建完整web应用
使用Beego构建完整web应用 一.GO简介(Beego应用go编写) 1.为什么用GO (1).语法简单 (2).简洁的并发 (3).开发和执行效率快(编译型语言) 2.GO语言环境 下载go & ...
- Go语言入门篇-项目常见用法&语法
一.导入包用法: //_表示仅执行该包下的init函数(不需要整个包导入) import _ "git.xx.xx/baases/identity/cachain/version" ...
- Go语言入门篇-基本数据类型
一.程序实体与关键字 任何Go语言源码文件都由若干个程序实体组成的.在Go语言中,变量.常量.函数.结构体和接口被统称为“程序实体”,而它们的名字被统称为“标识符”. 标识符可以是任何Unicode编 ...
- Go语言入门篇-命令 与 语法
一.命令基础 1. go run : 用于运行命令源码文件(如:go run helloworld.go) 只能接受一个命令源码文件以及若干个库源码文件作为文件参数 其内部操作步骤: (1)先编译源码 ...
- Go语言入门篇-环境准备
一.GO语言特点 静态类型:首先要明确变量类型,如上所示. 编译型:指GO语言要被编译成机器能识别机器代码. GO语言开源. 编程范式:支持“函数式”和“面向对象” GO语言原生的支持并发编程:即GO ...
随机推荐
- GSM错误代码表
转:http://blog.csdn.net/renjwjx/article/details/2290667 GSM device: AT+CMEE=1 AT&W CME ERROR's ...
- PHP 获取图片中的器材信息
function getExif($img){ $exif = exif_read_data($img, 'IFD0'); return array ( '文件名' => $exif['File ...
- javascript文本格式化之HTML标签(转载)
文本格式化标签: 标签 描述 <b> 定义粗体文本. <big> 定义大号字. <em> 定义着重文字. <i> 定义斜体字. <small> ...
- Hibernate中createCriteria即QBC查询的详细用法
现在假设有一个Student类,内有id,name,age属性String hql = "from Student s";按照以前的做法,我们通常是Query query = se ...
- QT 交叉编译工具选择
使用QT交叉编译,生成的都是x86的可执行文件.Zoro告诉我交叉工具配置错了. 参考链接: http://www.cnblogs.com/zengjfgit/p/4744507.html linux ...
- 第二百九十八节,python操作redis缓存-Set集合类型,可以理解为不能有重复元素的列表
python操作redis缓存-Set集合类型,可以理解为不能有重复元素的列表 sadd(name,values)name对应的集合中添加元素 #!/usr/bin/env python # -*- ...
- vector 排序
#include <vector> #include <algorithm> 一.vector保存的是基础数据类型(int.char.float等) vector<int ...
- 下面关于XML叙述不正确的是( )
A.XML标记必须关闭 B.XML是大小写敏感的 C.XML文件只能跟DTD文件一块使用 D.XML和XSL结合可以在浏览器上显示 解答:C
- hdu 5044 树区间操作最后输出/ lca+dfs
题意:一棵树,俩种操作:1 有路径上的全部点加vi,2全部边加vi. 先离线求出全部询问的lca,再遍历询问一次,点+vi,lca-2*vi ,最后dfs从叶子扫上来一次,最后再祖先点补上就可以.用了 ...
- 桥接模式(bridge pattern)-------结构型模式
桥接模式是一种对象结构型模式,其将抽象部分和它的实现部分分离,使它们都可以独立的变化,又称为柄体(Handle and Body)模式或接口(Interface)模式. 优点: 1.分离抽象接口及其实 ...