linux go环境安装和基本项目结构

    最近项目中要用到Go语言,所以简单总结一下安装和配置,Go这个语言本身就限定了很多规范,比如项目设置,编程风格等,开发中就不需要再因为各种规范问题纠结了,直接用官方规定的能避免很多坑,下面直接切正题,go一般参考两个网站,官网和中文网,网址如下:

    官网:https://golang.org

    中文网:https://studygolang.com/

    中文文档:https://go-zh.org/doc/

    另外其实中文网的更新目前也是比较快的

    1. 安装

    第一步首先下载安装包,下载地址是:https://golang.org/dl/,或者中文网地址:https://studygolang.com/dl,比较了一下两个go最新版本都是一样的,目前是1.10.3,根据自己的计算机系统下载对应的版本,我这里是linux 64位,所以下载go1.10.3.linux-amd64.tar.gz这个包,下载之后可以解压安装:

tar -xvzf go1.10.3.linux-amd64.tar.gz

    解压之后直接当前目录下会有一个go目录,直接执行 mv go /usr/local ,这样就将go安装到的/usr/local/go下,现在只需要最后一步配置环境变量就可以了:

export PATH=$PATH:/usr/local/go/bin

    可以加到/etc/profile或者~/.bash_profile然后source即可,现在执行 go version 查看版本号如下:

    

    现在go就彻底安装成功了,另外注意官方假定go安装在/usr/local/go下,如果想安装到其他目录也是可以的,比如/abc/go,但是一定要配置GOROOT环境变量,如下:

export GOROOT=/abc/go
export PATH=$PATH:$GOROOT/bin

    这样go也可以安装成功,如果是默认的目录,则不需要设置GOROOT

    2. hello world

    第一步先写一个最简单的hello world程序,在任意目录下新建hello.go,内容如下:

package mainimport "fmt"func main() {fmt.Printf("hello world\n")
}

     然后保存之后执行 go run hello.go 就可以直接执行了,或者先执行编译 go build hello.go 然后生成hello可执行文件,就和c/c++编译一样,无需安装go环境即可执行:

    

    3. 项目结构

    上面只是go最简单的示例代码,但是在实际开发中会包含大量的项目封装和第三方模块,就需要设置项目结构进行管理,当然这个go已经规定好了,下面和文档上写的一样一步一步建立一个简单的项目,

    首先建立工作目录: mkdir /root/go_work ,然后配置GOPATH环境变量,这也是开发go唯一需要配置的环境变量,如下:

export GOPATH=/root/go_work
export PATH=$PATH:$GOPATH/bin

    然后进入/root/go_work,项目目录下面一般需要3个目录:bin, pkg, src,看意思懂了一大半,待会会详细说到.

    现在项目下面是空的,手动建立源码目录 mkdir src ,然后在下面继续建立用户库目录:

mkdir -p github.com/user
mkdir github.com/user/hello

    大部分第三方库都是通过github下载的,所以第三方源码目录一般是github,然后将刚才写的hello.go移动到github.com/user/hello中,现在可以执行安装命令: go install github.com/user/hello 注意是在任何目录都可以执行这个命令,因为go会自动去GOPATH下的源码目录中寻找,会把对应的目录下所有的源代码都进行编译,执行完成没有任何输出表示成功,然后回到go_work下会看到生成了bin目录,这里面的就是编译好的可执行文件.

    然后尝试编写一个第三方模块,实现字符串反转,执行 mkdir github.com/user/string_util 然后新建文件reverse.go,代码如下:

package string_utilfunc Reverse(s string) string {r := []rune(s)for i, j := 0, len(r) - 1; i < len(r)/2; i, j = i + 1, j - 1 {r[i], r[j] = r[j], r[i]}return string(r)
}

    然后保存,执行安装 go install github.com/user/string_util ,其实在执行前可以先执行 go build github.com/user/string_util 没有报错说明成功,但是不会生成任何文件,然后再执行install,现在看到go_work目录下会多出pkg目录,这个目录就是第三方的库,也就是不含有main函数的代码都会编译到这里面;然后编写主调函数调用这个封装的函数,在源码目录下新建call目录,然后编写util_call.go,代码如下:

package main
import ("fmt""github.com/user/string_util"
)func main() {fmt.Printf(string_util.Reverse("\n!oG, olleH"))
}

    然后保存执行安装 go install call 或者在代码所在目录直接执行 go install 均可,这时候在bin目录下就会生成call可执行文件,执行如下:

    

    现在我们对go的项目结构就基本上了解清楚了,然后我们总体看一下项目结构:

     

    这和网上教程写的是基本一样的

    总结:

    1. go的开发环境仅依赖GOPATH环境变量和go安装目录下的系统包.

    2. go的所有源码应该在src下按照目录结构存放,按照标准的安装方式编译项目.

    3. 所有包含main函数的源代码,头部package都应该为main,其余的模块比如github.com/user/stringutil下面的源码头部应该为package stringutil,即取目录结构的最后一层.

    上面就是go的基本环境安装和开发配置,继续入门或进阶可以参考以下链接:

    1. Go语言之旅,在线学习:https://tour.go-zh.org/

    2. 语言规范:https://go-zh.org/ref/spec

    3. 实效Go编程:https://go-zh.org/doc/effective_go.html

    最后就是总的文档,多多阅读.

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

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

相关文章

运输层

运输层-TCP 简介 通俗点来说&#xff0c;运输层是连接底层和用户层的&#xff0c;运输层向它上面的应用层提供通信服务&#xff0c;它属于通信部分的最高层&#xff0c;同时也是用户功能的最低层。 运输层重要功能是复用和分用。复用&#xff1a;发送方不同应用进程可以使用同一…

对AI"出错"零容忍?美国加强AI推理解释能力研究

随着硅谷私企引领人工智能&#xff08;AI&#xff09;爆发式发展&#xff0c;美国国防部曾发布报告称&#xff0c;将“立即采取行动”加速AI和自动化技术研发。据《麻省理工技术评论》杂志网站近日报道&#xff0c;美国国防高级研究计划局&#xff08;DARPA&#xff09;已经着手…

java调用指定浏览器_Java调用浏览器打开网页完整实例

本文实例讲述了java调用浏览器打开网页的方法。分享给大家供大家参考。具体实现方法如下&#xff1a;package com.yifang.demo;import java.io.file;public class openpagedemo {public static void main(string[] args) {try {//string url "http://www.baidu.com"…

[HDU517] 小奇的集合

题目链接 显然有贪心每次选择最大的两个数来做。 于是暴力地把最大的两个数调整到非负&#xff08;暴力次数不超过1e5&#xff09;&#xff0c;接下来使用矩阵乘法即可。 \[ \begin{pmatrix} B\\S\\T \end{pmatrix} \begin{pmatrix} 1&1&0\\ 1&0&0\\ 1&1&…

phpStudy

很多朋友在学习php的过程中会看到phpstudy这个东西&#xff0c;那么phpstudy是做什么的呢&#xff1f;有什么用&#xff1f;接下来的这篇文章将个大家来详细的介绍一下phpstudy的内容。 首先在百度百科上对于phpstudy的定义是一个PHP调试环境的程序集成包。 该程序包集成最新的…

杀入共享汽车市场的PonyCar,是下一个牺牲者还是引领者?

曾几何时&#xff0c;汽车是财富、地位的象征&#xff0c;拥有一辆汽车就感觉自己处处高别人一等。但如今&#xff0c;汽车已然成为一件随处可见的商品&#xff0c;甚至已经到车来车往、熙熙攘攘的地步。根据中商产业研究院发布的《2018-2023年中国汽车行业市场前景及投资机会研…

python图片内容长度识别_Python实现识别图片内容的方法分析

本文实例讲述了Python实现识别图片内容的方法。分享给大家供大家参考&#xff0c;具体如下&#xff1a;python识别图片内容。这里我的环境为windows64位&#xff0c;python2.7.14需要用到PIL模块和tesseract模块。首先需要安装pip包管理&#xff0c;安装方法可参考附录windows下…

AJAX工具

代码如下 var AppAjax {baseUrl:AppConfig.apiUrl//【POST请求】,post:function(pUrl,pData,pSuccessFun){pUrl AppAjax.baseUrl pUrl;$.ajax({headers: {token: AppConfig.token},url:pUrl,type:POST,data:JSON.stringify(pData),//pData,//JSON.stringify(),contentType:&q…

厉害了!Intel第九代酷睿参数曝光

2019独角兽企业重金招聘Python工程师标准>>> 导读上周有消息称&#xff0c;Intel第九代酷睿处理器最快于8月1日发布&#xff0c;共有三款主打产品&#xff0c;分别是i9-9900K、i7-9700K和i5-9600K。其中&#xff0c;i9-9900K设计为8核16线程&#xff0c;基础主频3.6…

java 连接kafka_设置多个kafka连接接收器

我正在研究从postgreSQL到HDFS的数据流 . 我在HDP 2.6沙箱上设置了融合环境 . 我对postgreSQL的jdbc源配置是namejdbc_1connector.classio.confluent.connect.jdbc.JdbcSourceConnectortasks.max1connection.urljdbc:postgresql://host:port/db?currentSchemaschema&useru…

Web应用性能分析工具—HAR文件

Web应用性能分析工具—HAR文件 来源 https://raynorli.com/2018/06/11/web-performance-analysis-har-file/ 客户经常有的一个问题就是&#xff0c;我的网页服务通过你的设备之后&#xff0c;访问变慢了&#xff0c;这类直观感受的故障很不好量化&#xff0c;而且基于Web应用的…

【mybatis】mybatis多表联查,存在一对多关系的,实体中使用List作为字段接收查询结果的写法...

实体如下&#xff1a; IntegralGoods  积分商品 IntegralGoodsImg  积分商品图片 ShelfLog    积分商品自动上架记录 IntegralGoods &#xff1a;IntegralGoodsImg&#xff1a;ShelfLog   1&#xff1a;n&#xff1a;1 1&#xff1a;1的多表联查或者m:n的多表联查 很简…

lr java脚本_【上海校区】 LR Java脚本编写方法

之前在某一家银行也接触过java写的性能接口脚本&#xff0c;最近因项目&#xff0c;也需编写java接口性能测试脚本&#xff0c;脑袋一下懵逼了&#xff0c;有点不知道从何入手。随后上网查了相关资料&#xff0c;自己又稍微总结了一下&#xff0c;与大家共同分享哈~   首先&a…

Flask Web表单

title: flask学习笔记 subtitle: 3. flask Web表单 date: 2018-12-14 10:17:28 --- Web表单 HTML表单是用户和web站点或应用程序之间交互的主要内容之一。它们允许用户将数据发送到web站点。大多数情况下&#xff0c;数据被发送到web服务器&#xff0c;但是web页面也可以自己拦…

一些PHP函数功能

函数 描述 PHP basename() 返回路径中的文件名部分。 3 chgrp() 改变文件组。 3 chmod() 改变文件模式。 3 chown() 改变文件所有者。 3 clearstatcache() 清除文件状态缓存。 3 copy() 复制文件。 3 delete() 参见 unlink() 或 unset()。 dirname() 返回路径中的目录名称部分…

mac java tomcat_mac idea 配置tomcat

mac idea 配置tomcat一、下载安装tomcat二、有一个 javaWeb项目创建一个javaWeb项目 ,参考第一条&#xff0c;只是在第二步的时候选中java Web就行三、完善web项目在WEB-INF 下新建两个文件夹&#xff0c;lib(存放jar包)和classes(存放编译后的文件)打开项目结构设置配置classe…

30342程序格式

1.汇编语言程序格式 2.表达式操作符 转载于:https://www.cnblogs.com/ZanderZhao/p/11055237.html

初识docker,弄清镜像和容器

前言&#xff1a; 之前总是有人拿虚拟机和容器做比较。我之前一直理解的容器&#xff0c;就类似于虚拟机快照类似。拿别人的东西就直接用了。在我的虚拟机中安装一下&#xff0c;环境就搞好了。其实容器是一个彻底解耦的东西。各个软件相互独立互不影响 什么是镜像 从docker本身…

configure 查找依赖库_Rust在编译Android的库时,如何设定依赖的第三方库引用的C/C++的动态库的搜索路径?...

谢邀。不懂android&#xff0c;也不懂OpenCL。但是我尝试了解了一下你的问题。既然你用了第三方库&#xff0c;那就得查源码了。翻开ocl 库的源码搜android关键字&#xff0c;很容易定位到下面代码。#https://github.com/cogciprocate/ocl/blob/master/ocl-interop/build.rs}el…

SprinBoot易学难精

Spring Boot易学难精 易学 组件自动装配&#xff1a;规约大于配置&#xff0c;专注核心业务外部化配置&#xff1a;一次构建、按需调配&#xff0c;到处运行嵌入式容器&#xff1a;内纸容器、无序部署、独立运行Spring Boot Stater&#xff1a;简化依赖、按需装配、自我包含Pro…