Go语言程序开发初涉
由于工作原因,现在开始学习Go语言。这也是本人第一篇关于Go的博客。本文将通过一些基本概念的说明和实际案例,使得大家能快速对Go程序的开发有个了解。
一. Go的安装 :
在 https://www.studygolang.com/dl 上可下载到go的各个平台的安装程序,安装过程在此忽略,安装后,在{Go的主目录}后称GOROOT下有个bin目录,下面有个go的可执行程序,这个程序我们可称之为 go tool。这个go tool在安装时一般会被配置到PATH的环境变量中。我们通过在控制台上执行 go version命令可以验证安装是否成功,如图:

二. GOPATH环境变量
GOPATH 环境变量用于指定这样一些目录:除 $GOROOT 之外的包含 Go 项目源代码和二进制文件的目录。go install 和 go 工具会用到 GOPATH:作为编译后二进制的存放目的地 和 import 包时的搜索路径。
官方推荐GOPATH环境变量应指向我们代码的工作空间目录,GOPATH可以指向多个目录,在Window上用 ;号间隔,在UNIX上用:号间隔 。这个环境变量如果不配置,Go会提供一个默认的,指向操作系统的当前用户的主目录,例如在UNIX上是$HOME/go,在Window上是 C:\Users\YourName\go 。
但要注意GOPATH一定不要指向GOROOT 目录。
通过在控制台上执行go env GOPATH命令我们可以查当前的GOPATH设置。
三. 代码的工作空间(后称workspace)
上面在讲GOPATH时提到了workspace这个概念,这个大家不会感到陌生,因为在其他语言例如JAVA中也都有这个概念,简单来说就是用来管理我们的代码项目的一个目录集合。Go语言并没有强制要使用一定的工作空间和项目结构。然而,保持良好的workspace和文件结构,对于管理源代码和发布程序都是非常有帮助的。对于大型的go语言项目,workspace则是一定要的。但在Go语言中会对这个workspace目录有些特定的要求和不同于JAVA workspace的一些作用,如下:
1.Go程序员通常将他们所有的Go代码保存在一个workspace中。
2.Go的workspace中会包含许多版本控制存储库(例如Git) 。注意,这与其他语言的编程环境不同,在其他编程环境中,workspace只是会与版本控制存储库紧密相联系。
3.Go的workspace是一个目录层次结构,其中的根目录有三个目录:
src 目录:包含Go的源码文件, 在这个目录会放置我们各个项目的源码,go的项目都是放在不同的称之为包目录的目录下的,在每个包目录中的有一个或多个Go源文件。
pkg 目录:包含包对象文件,通过go install命令编译源码生成
bin目录:包含可执行命令,通过go install命令编译源码生成
四. 工作空间下源代码的管理
workspace下的src目录下是Go用来放置源码文件的,但这些文件在src目录下如何组织也是有讲究的。在软件开发设计上经常会提到一个名词 “最佳实践” ,Go最语言的设计者也为指出了一种源代码管理的“最佳实践”:
1. 首先Go希望我们的代码的命名空间与版本仓库能建立关系,这样Go就能方便的将我们的代码与版本仓库中的代码建立映射关系 ,假设我们使用github做为我们的版本仓库,那么我们在 {worspace}/src目录下,就应该按创建github.com目录 ,然后再在该目录下创建 {我的github帐号}的目录。Go语言本身就实现了通过go get {github项目url} 命令会将github项目的代码直接下载放在workspace中
2. 我们的所有项目代码都应放在{我的github帐号}的目录之下。

3. 出现在{workspace}\src目录之下的目录在Go语言中称之为import path ,这个是用来供不同的 .go 文件在引用其他包中的go代码或函数时需要用到的,在这一点和Java语言有所不同,Java语言在引用外部包的代码时一般就import xxxpackage 就可以,但在Go语言中需要 import {import path}/xxxpackage才可以。
总结,再来张图加深下印象:

五.Go的IDE工具介绍
可以到https://www.jetbrains.com/go/download网站下载GoLand,具体的用法将在下一篇博客中结合实例进行说明。
Go语言程序开发初涉的更多相关文章
- linux系统--C语言程序开发的基本步骤(包含gcc的基本步骤)
1.使用vi或者vim编写程序文件 2.使用gcc把所有的源文件翻译成计算机认识的格式(编译) 3.使用./a.out作为命令执行得到的可执行文件 gcc编译器的工作步骤: 1.处理所有的预处理指令 ...
- C语言简介与第一个C语言程序
一.C语言产生的背景 C语言的出现与操作系统Unix是分不开的.Unix是1969年由美国贝尔实验室的K. Thompson和D. M. Ritchie两人用汇编语言编写,它存在许多不足,因此,需要一 ...
- 李洪强iOS开发之【零基础学习iOS开发】【02-C语言】02-第一个C语言程序
前言 前面已经唠叨了这么多理论知识,从这讲开始,就要通过接触代码来学习C语言的语法.学习任何一门语言,首先要掌握的肯定是语法.学习C语言语法的目的:就是能够利用C语言编写程序,然后运行程序跟硬件(计算 ...
- C语言第一节 C语言程序与开发工具
开发工具的选择 可以用来写代码的工具:记事本.UltraEdit.Vim.Xcode等 选择Xcode的原因:苹果官方提供的开发利器.简化开发过程.有高亮显示功能 使用Xcode新建一个C程序的源代码 ...
- IOS开发--C语言入门--如何结合Terminal和Vim开发C语言程序
一直以来都想着挤出时间,记录开发之路的点点滴滴(现在记录已成回忆),和大家一起分享,开发人员总是在沟通和相互学习中提高自身的能力.路过的大神也好初学者也罢,若发现文章中又观点不对的,还望大家指出. 现 ...
- C语言入门(2)——安装VS2013开发环境并编写第一个C语言程序
在C语言入门系列中,我们使用Visual studio 2013 Professional作为开发工具.本篇详细介绍如何安装Visualstudio 2013 Professional并写出我们第一个 ...
- Android For JNI(一)——JNI的概念以及C语言开发工具dev-c++,编写你的第一个C语言程序,使用C启动JAVA程序
Android For JNI(一)--JNI的概念以及C语言开发工具dev-c++,编写你的第一个C语言程序 当你的Android之旅一步步的深入的时候,你其实会发现,很多东西都必须去和framew ...
- 微信小程序开发语言的选择
微信使用的开发语言和文件很「特殊」. 小程序所使用的程序文件类型大致分为以下几种: ①WXML(WeiXin Mark Language,微信标记语言) ②WXSS(WeiXin Style Shee ...
- 【ZZ】各类程序开发语言概述 | 菜鸟教程
http://www.runoob.com/w3cnote/programming-intro.html 各类程序开发语言概述, 点击查看大图:
随机推荐
- zookeeper kafka集群
一.部署zookeeper集群 三台机器上执行相同的操作 mkdir -p /data/zookeeper cd zookeeper-3.4.6 cp zoo_sample.cfg zoo.cfg [ ...
- iptables之NAT端口转发设置
背景:服务器A:103.110.114.8/192.168.1.8,有外网ip,是IDC的一台服务器服务器B:192.168.1.150,没有外网ip,A服务器是它的宿主机,能相互ping通服务器C: ...
- SpringBoot笔记十一:html通过Ajax获取后端数据
我们知道在Java Web中,前端的JSP可以使用EL表达式来获取Servlet传过来的数据Spring Boot中也有Thymeleaf模板可以使用th: text="${XXX}&quo ...
- oracle中查看所有表和字段以及表注释字段注释
获取表:select table_name from user_tables; //当前用户拥有的表 select table_name from all_tables; //所有用户的表 selec ...
- Hbase记录-zookeeper部署
#官网下载二进制包解压到/usr/app下,配置/etc/profile: export ZOOKEEPER_HOME=/usr/app/zookeeper export PATH=$PATH:$ZO ...
- 【leetcode-89 动态规划】 格雷编码
( 中等难度题(×) -背答案题(√) ) 格雷编码是一个二进制数字系统,在该系统中,两个连续的数值仅有一个位数的差异. 给定一个代表编码总位数的非负整数 n,打印其格雷编码序列.格雷编码序列必须以 ...
- HDU - 5119 Happy Matt Friends(dp)
题目链接 题意:n个数,你可以从中选一些数,也可以不选,选出来的元素的异或和大于m时,则称满足情况.问满足情况的方案数为多少. 分析:本来以为是用什么特殊的数据结构来操作,没想到是dp,还好队友很强. ...
- PHP7 学习笔记(十二)Stream 函数详解
官方:http://php.net/manual/zh/ref.stream.php Stream_*系列函数 PHP中对流的描述如下:每一种流都实现了一个包装器(wrapper),包装器包含一些额外 ...
- 修改ScriptBundle 生成顺序
ScriptBundle 一般用法 C#的代码如下: bundles.Add(new ScriptBundle("~/bundles/jqueryval") .Include(&q ...
- python中print和input的底层实现
print print的底层通过sys.stdout.write() 实现 import sys print('hello') print('world') print(520) sys.stdout ...