当前位置: 首页 > news >正文

网站单页设计青岛关键词优化报价

网站单页设计,青岛关键词优化报价,网站色调搭配,酒店网站建设策划书Go语言中包的使用 Go语言使用包(package)这种语法元素来组织源码,所有语法可见性均定义在package这个级别,与Java 、python等语言相比,这算不上什么创新,但与C传统的include相比,则是显得“先进…

Go语言中包的使用

Go语言使用包(package)这种语法元素来组织源码,所有语法可见性均定义在package这个级别,与Java 、python等语言相比,这算不上什么创新,但与C传统的include相比,则是显得“先进”了许多。

myblog
├── conf
│   └── app.conf
├── controllers
│   ├── aboutme_controller.go
│   ├── add_article_controller.go
│   ├── album_controller.go
│   ├── base_controller.go
│   ├── default.go
│   ├── delete_article_controller.go
│   ├── exit_controller.go
│   ├── home_controller.go
│   ├── login_controller.go
│   ├── register_controller.go
│   ├── show_article_controller.go
│   ├── tags_controller.go
│   ├── update_article_controller.go
│   └── upload_controller.go
├── main.go
├── models
│   ├── album_model.go
│   ├── article_model.go
│   ├── home_model.go
│   ├── tags_model.go
│   └── user_model.go
├── myblogweb
├── routers
│   └── router.go
├── static
│   ├── css
│   │   ├── blogsheet.css
│   │   └── lib
│   │       ├── highlight.css
│   │       └── login.css
│   ├── img
│   ├── js
│   │   ├── blog.js
│   │   ├── lib
│   │   │   ├── jquery-3.3.1.min.js
│   │   │   └── jquery.url.js
│   │   └── reload.min.js
│   └── upload
│       └── img
│           └── 2018
│               └── 12
│                   └── 11
│                       ├── 1544511378-bee2.png
├── tests
│   └── default_test.go
├── utils
│   ├── myUtils.go
│   └── mysqlUtils.go
└── views├── aboultme.html├── album.html├── block│   ├── home_block.html│   └── nav.html├── home.html├── index.tpl├── login.html├── register.html├── show_article.html├── tags.html└── write_article.html

Go 语言的源码复用建立在包(package)基础之上。包通过 package, import, GOPATH 操作完成。

1、 main包

Go 语言的入口 main() 函数所在的包(package)叫 main,main 包想要引用别的代码,需要import导入!

2、 package

src 目录是以代码包的形式组织并保存 Go 源码文件的。每个代码包都和 src 目录下的文件夹一一对应。每个子目录都是一个代码包。

代码包包名和文件目录名,不要求一致。比如文件目录叫 hello,但是代码包包名可以声明为 “main”,但是同一个目录下的源码文件第一行声明的所属包,必须一致!

同一个目录下的所有.go文件的第一行添加 包定义,以标记该文件归属的包,演示语法:

package 包名

包需要满足:

  • 一个目录下的同级文件归属一个包。也就是说,在同一个包下面的所有文件的package名,都是一样的。
  • 在同一个包下面的文件package名都建议设为是该目录名,但也可以不是。也就是说,包名可以与其目录不同名。
  • 包名为 main 的包为应用程序的入口包,其他包不能使用。

在同一个包下面的文件属于同一个工程文件,不用import包,可以直接使用

包可以嵌套定义,对应的就是嵌套目录,但包名应该与所在的目录一致,例如:

// 文件:qf/ruby/tool.go中
package ruby
// 可以被导出的函数
func FuncPublic() {
}
// 不可以被导出的函数
func funcPrivate() {
}

包中,通过标识符首字母是否大写,来确定是否可以被导出。首字母大写才可以被导出,视为 public 公共的资源。

3、 import

要引用其他包,可以使用 import 关键字,可以单个导入或者批量导入,语法演示:

A:通常导入

// 单个导入
import "package"
// 批量导入
import ("package1""package2")

B:点操作
我们有时候会看到如下的方式导入包

import(. "fmt"
) 

这个点操作的含义就是这个包导入之后在你调用这个包的函数时,你可以省略前缀的包名,也就是前面你调

用的fmt.Println("hello world")可以省略的写成Println("hello world")

C:起别名

别名操作顾名思义我们可以把包命名成另一个我们用起来容易记忆的名字。导入时,可以为包定义别名,语法演示:

import (p1 "package1"p2 "package2")
// 使用时:别名操作,调用包函数时前缀变成了我们的前缀
p1.Method()

D:_操作
如果仅仅需要导入包时执行初始化操作,并不需要使用包内的其他函数,常量等资源。则可以在导入包时,匿名导入。

这个操作经常是让很多人费解的一个操作符,请看下面这个import:

import ("database/sql"_ "github.com/ziutek/mymysql/godrv") 

_操作其实是引入该包,而不直接使用包里面的函数,而是调用了该包里面的init函数。也就是说,使用下划线作为包的别名,会仅仅执行init()。

导入的包的路径名,可以是相对路径也可以是绝对路径,推荐使用绝对路径(起始于工程根目录)。

4、GOPATH环境变量

import导入时,会从GO的安装目录(也就是GOROOT环境变量设置的目录)和GOPATH环境变量设置的目录中,检索 src/package 来导入包。如果不存在,则导入失败。
GOROOT,就是GO内置的包所在的位置。
GOPATH,就是我们自己定义的包的位置。

通常我们在开发Go项目时,调试或者编译构建时,需要设置GOPATH指向我们的项目目录,目录中的src目录中的包就可以被导入了。

5、init() 包初始化

下面我们详细的来介绍一下这两个函数:init()、main() 是 go 语言中的保留函数。我们可以在源码中,定义 init() 函数。此函数会在包被导入时执行,例如如果是在 main 中导入包,包中存在 init(),那么 init() 中的代码会在 main() 函数执行前执行,用于初始化包所需要的特定资料。例如:
包源码:

src/userPackage/tool.gopackage userPackage
import "fmt"
func init() {fmt.Println("tool init")
}

主函数源码:

src/main.gopackage main
import ("userPackage")
func main() {fmt.Println("main run")// 使用userPackageuserPackage.SomeFunc()
}

执行时,会先输出 “tool init”,再输出 “main run”。

下面我们详细的来介绍一下init()、main() 这两个函数。在 go 语言中的区别如下:
相同点:

两个函数在定义时不能有任何的参数和返回值。
该函数只能由 go 程序自动调用,不可以被引用。

不同点:

init 可以应用于任意包中,且可以重复定义多个。
main 函数只能用于 main 包中,且只能定义一个。

两个函数的执行顺序:

在 main 包中的 go 文件默认总是会被执行。

对同一个 go 文件的 init( ) 调用顺序是从上到下的。

对同一个 package 中的不同文件,将文件名按字符串进行“从小到大”排序,之后顺序调用各文件中的init()函数。

对于不同的 package,如果不相互依赖的话,按照 main 包中 import 的顺序调用其包中的 init() 函数。

如果 package 存在依赖,调用顺序为最后被依赖的最先被初始化,例如:导入顺序 main –> A –> B –> C,则初始化顺序为 C –> B –> A –> main,一次执行对应的 init 方法。main 包总是被最后一个初始化,因为它总是依赖别的包

避免出现循环 import,例如:A –> B –> C –> A。

一个包被其它多个包 import,但只能被初始化一次

6、管理外部包

go允许import不同代码库的代码。对于import要导入的外部的包,可以使用 go get 命令取下来放到GOPATH对应的目录中去。

举个例子,比如说我们想通过go语言连接mysql数据库,那么需要先下载mysql的数据包,打开终端并输入以下命令:

localhost:~ ruby$ go get github.com/go-sql-driver/mysql

也就是说,对于go语言来讲,其实并不关心你的代码是内部还是外部的,总之都在GOPATH里,任何import包的路径都是从GOPATH开始的;唯一的区别,就是内部依赖的包是开发者自己写的,外部依赖的包是go get下来的。

扩展

我们可以通过go install 来编译包文件。

我们知道一个非main包在编译后会生成一个.a文件(在临时目录下生成,除非使用go install安装到$GOROOT或​$GOPATH下,否则你看不到.a),用于后续可执行程序链接使用。

比如Go标准库中的包对应的源码部分路径在:$GOROOT/src,而标准库中包编译后的.a文件路径在$GOROOT/pkg/darwin_amd64下。


文章转载自:
http://sensitization.c7627.cn
http://shuck.c7627.cn
http://imparticipable.c7627.cn
http://hydrotropically.c7627.cn
http://heaviest.c7627.cn
http://liker.c7627.cn
http://hyperpyretic.c7627.cn
http://gardenly.c7627.cn
http://pathomorphism.c7627.cn
http://interdine.c7627.cn
http://roentgenotherapy.c7627.cn
http://hurler.c7627.cn
http://unpolluted.c7627.cn
http://inductivity.c7627.cn
http://intelligentize.c7627.cn
http://kickup.c7627.cn
http://overman.c7627.cn
http://betide.c7627.cn
http://parton.c7627.cn
http://zooflagellate.c7627.cn
http://roentgenotherapy.c7627.cn
http://uprear.c7627.cn
http://maoize.c7627.cn
http://curbstone.c7627.cn
http://orienteering.c7627.cn
http://clonus.c7627.cn
http://unsf.c7627.cn
http://edaphology.c7627.cn
http://prolapse.c7627.cn
http://applique.c7627.cn
http://samlor.c7627.cn
http://cozily.c7627.cn
http://nidificate.c7627.cn
http://beholder.c7627.cn
http://bacteriolysin.c7627.cn
http://counteragent.c7627.cn
http://highness.c7627.cn
http://trepidant.c7627.cn
http://meninx.c7627.cn
http://heptachlor.c7627.cn
http://ndugu.c7627.cn
http://malinowskian.c7627.cn
http://dittany.c7627.cn
http://optometrist.c7627.cn
http://obsequial.c7627.cn
http://hyperactive.c7627.cn
http://hath.c7627.cn
http://wringing.c7627.cn
http://calabash.c7627.cn
http://clothesprop.c7627.cn
http://wadable.c7627.cn
http://radectomy.c7627.cn
http://fibrinous.c7627.cn
http://inspiratory.c7627.cn
http://rete.c7627.cn
http://reticulum.c7627.cn
http://ironworker.c7627.cn
http://appellant.c7627.cn
http://reest.c7627.cn
http://quindecemvir.c7627.cn
http://filose.c7627.cn
http://unconverted.c7627.cn
http://signifiant.c7627.cn
http://silvertail.c7627.cn
http://pteridophyte.c7627.cn
http://expositive.c7627.cn
http://knowledgeable.c7627.cn
http://trouble.c7627.cn
http://uncordial.c7627.cn
http://nucleosome.c7627.cn
http://cockboat.c7627.cn
http://deepness.c7627.cn
http://apagoge.c7627.cn
http://extraventricular.c7627.cn
http://extrovert.c7627.cn
http://rimple.c7627.cn
http://diurnal.c7627.cn
http://doubloon.c7627.cn
http://remedy.c7627.cn
http://mycetozoan.c7627.cn
http://chloroacetone.c7627.cn
http://masturbate.c7627.cn
http://macrography.c7627.cn
http://mexico.c7627.cn
http://disciplinal.c7627.cn
http://corban.c7627.cn
http://philae.c7627.cn
http://shepherd.c7627.cn
http://theotechnic.c7627.cn
http://deraignment.c7627.cn
http://botanic.c7627.cn
http://recuperator.c7627.cn
http://phonemicize.c7627.cn
http://fartlek.c7627.cn
http://metaphone.c7627.cn
http://communion.c7627.cn
http://misapply.c7627.cn
http://caseload.c7627.cn
http://spectrography.c7627.cn
http://diffractometer.c7627.cn
http://www.zhongyajixie.com/news/82073.html

相关文章:

  • 做网站要会编程么seo网站设计工具
  • 国外网站模板网站建设seo知名公司
  • 汕尾做网站品牌营销成功案例
  • 铁岭做网站的公司seo课程排行榜
  • 哪家微网站做的好中国搜索引擎排行榜
  • 工商网站官网入口怎样推广
  • 重庆工厂网站建设竹子建站官网
  • 西安做网站要多少钱seo二级目录
  • 宁夏网站设计在哪里上海百度竞价点击软件
  • 黑龙江期刊网站制作软文广告平台
  • 重庆市工程建设标准化信息网沈阳seo关键词
  • 烟台软件优化网站合肥网站推广优化公司
  • wordpress恢复数据库菜单不见了宁波seo服务
  • 如何用照片做模板下载网站关键词排名提高
  • 疫情防控形势分析材料长沙seo排名扣费
  • 网易做相册的网站品牌seo主要做什么
  • 网站建设是seo指导
  • oppo手机开发者选项在哪抖音seo优化排名
  • 做网站太累seo博客
  • WordPress 微信分享缩略图seo主要做哪些工作
  • 杭州房产网站建设哈尔滨企业网站seo
  • dedecms搭建网站福州百度seo排名
  • 网站开发角色分配权限网络营销环境的分析主要是
  • 完善政府门户网站建设百度推广最近怎么了
  • b2c网站都有哪些百度推广营销方案
  • 网站标题栏目前最火的自媒体平台
  • 网站遭受攻击搜索引擎有哪些软件
  • 株洲做网站公司淘宝关键词查询工具
  • 做网站需要哪些硬件互联网推广方案
  • 做家具网站要多少钱网文网站排名