广告
返回顶部
首页 > 资讯 > 数据库 >Go基础中如何构建go程序
  • 446
分享到

Go基础中如何构建go程序

2024-04-02 19:04:59 446人浏览 薄情痞子
摘要

这篇文章的内容主要围绕Go基础中如何构建go程序进行讲述,文章内容清晰易懂,条理清晰,非常适合新手学习,值得大家去阅读。感兴趣的朋友可以跟随小编一起阅读吧。希望大家通过这篇文章有所收获!hello worl

这篇文章的内容主要围绕Go基础中如何构建go程序进行讲述,文章内容清晰易懂,条理清晰,非常适合新手学习,值得大家去阅读。感兴趣的朋友可以跟随小编一起阅读吧。希望大家通过这篇文章有所收获!

hello world

从一个简单的程序开始解释,将下面的内容放进test.go文件中,路径随意:

package main import ( "fmt" ) func main() {    fmt.Println("Hello World")}

Go通过包的方式管理程序,每个Go源代码文件都必须声明自己所在的包,正如上面的package main声明自己所在的包是main包。

每个程序都必须有一个main包,main包作为整个程序的编译入口包,main包中的main()函数作为程序的执行入口。

import关键字用来导入其它包,导入某个包之后就能在当前文件中使用这个包中的函数,例如上面的main包导入fmt包后,可以使用fmt包中的函数Println()。

然后可以使用go的build工具编译这个test.go文件:

$ go build test.go

编译后,将在当前路径下生成一个可执行二进制文件:windows下生成的是test.exe文件,Unix下生成的是test文件。既然是可执行文件,当然可以直接执行:

$ ./test

将输出"Hello World"。

也可以直接通过go的run工具将编译和运行两个步骤合二为一:

2$ go run test.go Hello World

go run不会生成可执行的二进制文件,它实际上是将编译得到的文件放进一个临时目录,然后执行,执行完后自动清理临时目录。

关于包和go文件

每个go代码文件只能且必须使用package语句声明一个包,也就是说一个文件中不能包含多个包。

Go中有两种类型的包,或者说有两种类型的文件:

  1. 编译后成为可执行文件的包,也就是main包编译后的得到的文件


  2. 编译后成为共享库的包,只要go程序文件中声明的不是main包,就是库文件

注意:
在go的官方文档中将go的二进制可执行程序称为命令,有时候还会将go的源代码文件称为命令的源文件。可执行程序和包相反,包一般是作为"库"文件存在,用于导入而非用于执行

共享库中包含一些函数,这些函数比较通用,所以放进共享库方便函数复用。例如fmt包中的Println函数,到处都在使用这个函数,且因为fmt包是标准库(Standary library),无论是谁都可以去使用这个包。

有两种类型的库文件:标准库和第三方的库。标准库是随Go安装的时候放在go安装目录下的($GOROOT/src/),第三方库是放在workspace下的。关于workspace后文再说。

共享库可以被import导入(例如fmt包)。由于导入操作是在编译期间实现的,共享库中不应该包含任何输出型语句。

Go中对库文件要求比较严格,或者说强制性的规范。它要求库文件中package声明的包名必须和目录名称相同,且同一个目录下只允许有一个包,但同一个目录下可以有多个库文件片段,只不过这些库文件中必须都使用package声明它的包名为目录名。例如:

src/mycode

|- first.go |- second.go |- third.go

如果这三个文件都是库文件,则它们都必须且只能使用package mycode声明自己的包为mycode。go build的时候,会将它们合并起来。如果声明的包名不是mycode,go build会直接忽略它。

当然,对main包就无所谓了,它不是库文件,可以放在任何地方,对目录名没有要求。但如果使用go install,则有额外的要求,见后文。

库文件中的大小写命名

Go通过名称首字母的大小写决定属性是否允许导出:

首字母大写的属性是允许导出的属性首字母小写的属性不允许被导出

所以当库文件被导入时,只有这个库文件中以大写字母开头的常量、变量、函数等才会被导出,才可以在其他文件中使用。

例如,库文件abc.go中:

2func first() {} func Second() {}

当导入这个包的时候,由于first()函数首字母小写,外界无法使用它,它只能在自己的包abc.go中使用,对外界不可见。大写字母开头的Second()函数会被导入,所以可用。

工作空间(workspace)

速览

通过环境变量GOPATH设置workspace的路径Go编程人员一般将它们的Go代码放在一个workspace下,当然,这不是必须的workspace包含一个或多个版本控制系统的仓库(如git)每个仓库包含一个或多个package每个package由单个目录下的一个或多个Go源文件组成,它们都必须声明目录名作为它们的包名package的目录路径决定导入包时import的路径

Go和其它编程语言在组织项目的时候有所不同,其它语言一般每个项目都有一个单独的workspace,且workspace一般和版本控制仓库进行绑定。

现在设置GOPATH环境变量,假设设置为/gocode

echo 'export GOPATH=/gocode' >>/etc/profile.d/gopath.sh

chmod +x /etc/profile.d/gopath.shsource /etc/profile.d/gopath.sh

go env GOPATH确定是否正确:

$ go env GOPATH /gocode

workspace目录结构

每个workspace都是一个目录,这个目录下至少包含三个目录:

src:该目录用于存放Go源代码文件(也称为命令的源文件)bin:该目录用于存放可执行命令(即构建后可执行的二进制go程序,也称为命令文件)pkg:该目录用于存放共享库文件(即构建后非可执行程序的库包,也称为包对象文件)

括号中给的名称是go官方文档中常见的别名称呼。

所以,先创建这3个目录

mkdir -p /gocode/{src,pkg,bin}

GOPATH和GOROOT环境变量

GOPATH环境变量指定workspace的位置,用来指示go从哪里搜索go源文件/包,例如import时从哪个路径搜索包并导入。GOROOT环境变量用于指定go的安装位置。go需要导入包时,会从GOPATH和GOROOT所设置的位置处搜索包。

默认位置为$HOME/go(Unix)或%USERPROFILE\go%(Windows)。可以手动设置GOPATH环境变量的路径从而指定workspace的位置,可以指定为多个目录,多个目录时使用冒号分隔目录(Unix系统)或使用分号分隔目录(Windows系统)。注意,绝对不能将其设置为go的安装目录,即不能和GOROOT环境变量重复。

例如,windows下设置d:\gocode目录为GOPATH的路径:

setx GOPATH d:\gocode

Unix下设置$HOME/gocode目录为GOPATH的路径:

mkdir ~/gocode export GOPATH=~/gocode echo 'GOPATH=~/gocode' >>~/.bashrc

go env或go env GOPATH命令可以输出当前有效的GOPATH路径。

$ go env | grep GOPATH GOPATH="/root/gocode"  $ go env GOPATH /root/gocode

go build

先写两个go文件,一个是可执行go文件test.go,一个是共享库strutils.go,将它们放在workspace的src下。

$ mkdir -p $GOPATH/src/{hello,strutils} $ tree -C .├── bin├── pkg├── src│ ├── hello│ │ └── test.go│ └── strutils│     └── strutils.go

注意,上面故意将test.go放在名为hello的目录下,可以将其放在src下的任何非库文件目录下(例如不能放进strutils目录下),名称不要求。

hello/test.go的内容如下:

package main import ( "fmt" "strutils" ) func main() {    fmt.Println("Hello World")    fmt.Println(strutils.ToUpperCase("hello world"))}

strutils/strutils.go的内容如下:

package strutils import ( "strings" ) func ToUpperCase(s string) string{ return strings.ToUpper(s)} func ToLowerCase(s string) string{ return strings.ToLower(s)}

go build可以用于编译,编译时会对import导入的包进行搜索,搜索的路径为标准库所在路径$GOROOT/src、workspace下的src目录。它只会生成额外的可执行文件放在当前目录下,不会生成额外的库文件。但需要注意,生成的可执行文件名称可能会出乎意料:

例如进入到目录src/hello下,对test.go的文件进行编译,以下三种build路径都可用成功编译:

cd src/hello go build

# 生成的可执行文件名为hello go build .

# 生成的可执行文件名为hello go build test.go

# 生成的可执行文件名为test

前两者是等价的,当go build以目录的形式进行编译,则生成的可执行文件名为目录名。当go build以go代码文件名的方式进行编译,则生成的可执行程序名为go源码文件名(去掉后缀.go或增加后缀.exe)。

go install

go还有一个工具install,go install的操作称为安装,将文件安装到合适的位置。go install时会先进行编译,然后将编译后的二进制文件保存到workspace的bin目录下,将编译后的库文件(称为包对象文件,以".a"为后缀)放在pkg目录下。

注意,go install时必须先进入到$GOPATH/src下,且只能对目录进行操作,不能对具体的go文件操作,因为go认为包和目录名相同。给go install指定一个目录名,就表示编译这个包名。

例如,对src/hello下的test.go进行安装,由于它导入了strutils包,所以会自动将strutils也安装好:

$ cd $GOPATH/src $ go install hello $ tree $GOPATH /gocode├── bin│ └── hello           # 二进制程序文件名为hello,而非test├── pkg│ └── linux_amd64     │     └── strutils.a  # 库文件└── src    ├── hello    │ └── test.go    └── strutils        └── strutils.go

还可以单独对库文件进行安装:

$ rm -rf $GOPATH/bin/* $GOPATH/pkg/* $ cd $GOPATH/src $ go install strutils /gocode├── bin├── pkg│ └── linux_amd64│     └── strutils.a└── src    ├── hello    │ └── test.go    └── strutils        └── strutils.go

如果省略目录名,则表示对当前目录下的包进行安装:

$ cd $GOPATH/src/hello $ go install

再次提醒,go install前先进入到$GOPATH/src目录下。

由于go install可以直接安装二进制文件到$GOPATH/bin,所以出于方便执行这些二进制程序,可以将这个目录放进PATH环境变量。

$ export PATH=$PATH:`go env GOPATH`/bin

构建go程序的规范建议

1.由于可以将所有go项目放在同一个$GOPATH目录下,为了区分src下的项目目录和库文件目录,建议将每个项目目录设置深一点

例如:

binpkgsrc |- /first/project            |- main.go |- myliba                |- a.go |- b.go |- mylibb                |- c.go |- d.go |- /second/project            |- main.go |- lib                |- a.go |- b.go

2.go install时,先进入到项目目录下

3.库文件的名称(也是目录名)要选取合理,尽量短,但却尽量见名知意,也尽量减少名称重复的几率

例如util这种名称到处都是,可以修改为numutil、nameutil等。

什么是go

go是golang的简称,golang 是Google开发的一种静态强类型、编译型、并发型,并具有垃圾回收功能的编程语言,其语法与 C语言相近,但并不包括如枚举、异常处理、继承、泛型、断言、虚函数等功能。

感谢你的阅读,相信你对“Go基础中如何构建go程序”这一问题有一定的了解,快去动手实践吧,如果想了解更多相关知识点,可以关注编程网网站!小编会继续为大家带来更好的文章!

您可能感兴趣的文档:

--结束END--

本文标题: Go基础中如何构建go程序

本文链接: https://www.lsjlt.com/news/71806.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • Go基础中如何构建go程序
    这篇文章的内容主要围绕Go基础中如何构建go程序进行讲述,文章内容清晰易懂,条理清晰,非常适合新手学习,值得大家去阅读。感兴趣的朋友可以跟随小编一起阅读吧。希望大家通过这篇文章有所收获!hello worl...
    99+
    2022-10-19
  • GO语言基础入门第一个go程序解读
    目录1. 编写HelloWorld2. 执行go程序3. 代码解读 4.总结 1. 编写HelloWorld //filename: hello.go package ...
    99+
    2022-11-12
  • Go基础编程之什么是结构体
    本篇内容主要讲解“Go基础编程之什么是结构体”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“Go基础编程之什么是结构体”吧!结构体(struct)是自定义方式形成...
    99+
    2022-10-19
  • 怎么在Go中构建Web应用程序
    本篇内容介绍了“怎么在Go中构建Web应用程序”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!开始在开始之前,您需要准备好以下几点:已安装Go...
    99+
    2023-07-05
  • 如何使用Go和Laravel构建Web应用程序?
    随着Web应用程序的不断发展,越来越多的开发者开始使用多种技术来构建高效、可靠的应用程序。在本文中,我们将介绍如何使用Go和Laravel构建Web应用程序,让你快速入门,学习如何构建高质量的应用程序。 什么是Go和Laravel? Go是...
    99+
    2023-08-16
    laravel 学习笔记 shell
  • 0基础如何学go语言
    0基础学习Go语言需要分阶段进行,从基础知识到实践项目,逐步深入。以下是一个建议的学习路径:1、学习基础知识:了解编程基本概念,如变量、数据类型、运算符、控制结构等。学习Go语言的基本语法,如变量声明、数据类型、运算符、控制结构、函数等。学...
    99+
    2023-10-26
    go语言
  • 多阶段构建优化Go 程序Docker镜像
    目录引言构建 Docker 镜像是否可以再减小 Docker 镜像的大小?引言 多阶段构建方式,是在 Dockerfile 中使用多个 FROM 指令,每个 FORM 指令都是一个新...
    99+
    2022-11-11
  • 如何理解Go语言基础之网络编程
    本篇内容主要讲解“如何理解Go语言基础之网络编程”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“如何理解Go语言基础之网络编程”吧!socker编程我们所学的TC...
    99+
    2022-10-19
  • 基础教程:Go WaitGroup及其在Golang中的应用
    在Golang中,WaitGroup是一种用于等待一组goroutine完成执行的机制。它可以用来确保在主goroutine结束之前...
    99+
    2023-10-08
    Golang
  • Go语言中的基础数据类型如何使用
    这篇文章主要介绍了Go语言中的基础数据类型如何使用的相关知识,内容详细易懂,操作简单快捷,具有一定借鉴价值,相信大家阅读完这篇Go语言中的基础数据类型如何使用文章都会有所收获,下面我们一起来看看吧。基础数据类型整型在Go中整型数据类型主要分...
    99+
    2023-07-05
  • 如何使用Go构建Kubernetes应用
    这篇文章主要介绍“如何使用Go构建Kubernetes应用”,在日常操作中,相信很多人在如何使用Go构建Kubernetes应用问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”如何使用Go构建Kubernete...
    99+
    2023-06-15
  • “如何使用Go语言和Laravel构建高效的Web应用程序?”
    如何使用Go语言和Laravel构建高效的Web应用程序? Web应用程序开发是一个繁重的任务,需要考虑许多因素,包括性能、可维护性、易用性等等。在这篇文章中,我们将介绍如何使用Go语言和Laravel框架来构建高效的Web应用程序。我们将...
    99+
    2023-09-08
    npm laravel numpy
  • 如何使用Go语言构建无服务架构?
    随着云计算技术的不断发展,无服务器架构(Serverless Architecture)日益成为一种流行的架构方式。相比于传统的基于服务器的架构,无服务器架构具有更高的弹性、更低的维护成本和更短的开发周期。Go语言作为一种高性能、高并发、易...
    99+
    2023-05-16
    Go语言 构建 无服务架构
  • 如何使用Docker镜像构建Go应用
    这篇文章主要介绍了如何使用Docker镜像构建Go应用的相关知识,内容详细易懂,操作简单快捷,具有一定借鉴价值,相信大家阅读完这篇如何使用Docker镜像构建Go应用文章都会有所收获,下面我们一起来看看吧。修炼背景我夜以继日,加班加点开发了...
    99+
    2023-06-29
  • 如何配置Go应用程序
    如何配置Go应用程序,相信很多没有经验的人对此束手无策,为此本文总结了问题出现的原因和解决方法,通过这篇文章希望你能解决这个问题。Go正在成为流程的编程语言。每个编程语言都有自己的语法或结构,有属于自己的风...
    99+
    2022-10-19
  • 如何编译go语言程序
    本篇文章给大家分享的是有关如何编译go语言程序,小编觉得挺实用的,因此分享给大家学习,希望大家阅读完这篇文章后可以有所收获,话不多说,跟着小编一起来看看吧。Go语言是编译型的静态语言(和C语言一样),所以在运行Go语言程序之前,先要将其编译...
    99+
    2023-06-15
  • 如何使用 Go 和 Excelize 构建电子表格
    目录前言生成费用报告创建工作表添加数据和创建样式导出为 CSV结论前言 分析任何规模的数据的重要性怎么强调都不为过。 我们日常生活的几乎每个部分都是数据驱动的,作为开发人员,在构建任...
    99+
    2022-11-11
  • 如何使用Go和Spring构建高效的API?
    在当今的软件开发领域中,构建高效的API是至关重要的。而Go和Spring是两个非常流行的编程语言,它们都有非常强大的特性来支持API的构建。本文将详细介绍如何使用Go和Spring构建高效的API。 使用Go构建高效的API Go是一...
    99+
    2023-08-10
    spring api javascript
  • Go Path学习笔记:如何在Linux中编写并运行Go程序?
    Go语言是一种在编写高性能网络服务时非常流行的编程语言,它具有快速编译、高效执行和强大的并发性等特点。如果你想在Linux环境下编写和运行Go程序,那么本篇文章将为你提供一些指导和技巧。 一、安装Go语言环境 在开始编写Go程序之前,你需...
    99+
    2023-07-05
    path 学习笔记 linux
  • 如何在 Linux 中使用 go-path 存储来管理 go 应用程序?
    Go 是一种非常流行的编程语言,因为它的速度和效率非常高。许多开发者在 Linux 系统上使用 Go 来编写应用程序。在 Linux 上,我们可以使用 go-path 存储来管理 Go 应用程序。本文将介绍如何在 Linux 中使用 go...
    99+
    2023-07-22
    linux path 存储
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作