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

可以玩h5的网站江苏城乡建设部网站首页

可以玩h5的网站,江苏城乡建设部网站首页,成都 做网站 模版,手机网站设计只选亿企邦文章目录 标准库概述regexp包锁和sync包自定义包和可见性基本格式导入外部安装包包的初始化 自定义包使用godoc自定义包的目录结构 标准库概述 在之前的部分已经用了很多和标准库有关的内容,比如有fmt,os这种功能 unsafe: 包含了一些打破 Go 语言“类型…

文章目录

  • 标准库概述
  • regexp包
  • 锁和sync包
  • 自定义包和可见性
    • 基本格式
    • 导入外部安装包
    • 包的初始化
  • 自定义包使用godoc
  • 自定义包的目录结构

标准库概述

在之前的部分已经用了很多和标准库有关的内容,比如有fmt,os这种功能

  • unsafe: 包含了一些打破 Go 语言“类型安全”的命令,一般的程序中不会被使用,可用在 C/C++ 程序的调用中
  • syscall-os-os/exec:
    1. os: 提供给我们一个平台无关性的操作系统功能接口,采用类 Unix 设计,隐藏了不同操作系统间的差异,让不同的文件系统和操作系统对象表现一致
    2. os/exec: 提供我们运行外部操作系统命令和程序的方式
    3. syscall: 底层的外部包,提供了操作系统底层调用的基本接口

regexp包

正则表达式常用于字符串中进行一些配置的匹配,例如

func test1() {//目标字符串searchIn := "John: 2578.34 William: 4567.23 Steve: 5632.18"pat := "[0-9]+.[0-9]+" //正则f := func(s string) string {v, _ := strconv.ParseFloat(s, 32)return strconv.FormatFloat(v*2, 'f', 2, 32)}if ok, _ := regexp.Match(pat, []byte(searchIn)); ok {fmt.Println("Match Found!")}re, _ := regexp.Compile(pat)//将匹配到的部分替换为"##.#"str := re.ReplaceAllString(searchIn, "##.#")fmt.Println(str)//参数为函数时str2 := re.ReplaceAllStringFunc(searchIn, f)fmt.Println(str2)
}

锁和sync包

在一些复杂的程序中,通常通过不同线程执行不同应用来实现程序的并发。当不同线程要使用同一个变量时,经常会出现一个问题:无法预知变量被不同线程修改的顺序!(这通常被称为资源竞争,指不同线程对同一变量使用的竞争)显然这无法让人容忍,那我们该如何解决这个问题呢

经典的做法是一次只能让一个线程对共享变量进行操作。当变量被一个线程改变时(临界区),我们为它上锁,直到这个线程执行完成并解锁后,其他线程才能访问它

在之前的map中,由于性能的原因,它实际上并不是现成安全的,所以在并行访问一个共享的map资源的时候,实际上是会出现错误

而在Go语言中,这种锁的机制是通过sync包中的锁来完成的,这意味着线程将会以有序的对同一个变量进行访问

sync.Mutex 是一个互斥锁,它的作用是守护在临界区入口来确保同一时间只能有一个线程进入临界区

因此可以有下面的例子,假设有一个共享资源需要被保护,那么就可以借助锁来进行对应的保护

// 定义需要保护起来的成员
type test2Info struct {mu  sync.Mutexstr string
}func test2Update(i *test2Info) {i.mu.Lock()i.str = "hello go"i.mu.Unlock()
}func test2() {// 现在要对这个str进行修改,那么就需要先加锁,再解锁var i test2Infotest2Update(&i)
}

相对简单的情况下,通过使用 sync 包可以解决同一时间只能一个线程访问变量或 map 类型数据的问题。如果这种方式导致程序明显变慢或者引起其他问题,我们要重新思考来通过 goroutines 和 channels 来解决问题,这是在 Go 语言中所提倡用来实现并发的技术

自定义包和可见性

基本格式

import 的一般格式如下:

import "包的路径或 URL 地址"

导入外部安装包

如果你要在你的应用中使用一个或多个外部包,首先你必须使用go install在你的本地机器上安装它们

假设你想使用 http://codesite.ext/author/goExample/goex 这种托管在 Google Code、GitHub 和 Launchpad 等代码网站上的包

通过如下命令安装:

go install codesite.ext/author/goExample/goex

将一个名为 codesite.ext/author/goExample/goex 的 map 安装在 $GOROOT/src/ 目录下

通过以下方式,一次性安装,并导入到你的代码中:

import goex "codesite.ext/author/goExample/goex"

因此该包的 URL 将用作导入路径

包的初始化

程序的执行开始于导入包,初始化 main 包然后调用 main() 函数

一个没有导入的包将通过分配初始值给所有的包级变量和调用源码中定义的包级 init() 函数来初始化。一个包可能有多个 init() 函数甚至在一个源码文件中。它们的执行是无序的。这是最好的例子来测定包的值是否只依赖于相同包下的其他值或者函数

init() 函数是不能被调用的

导入的包在包自身初始化前被初始化,而一个包在程序执行中只能初始化一次

自定义包使用godoc

godoc在显示自定义包中的注释也有很好的效果:注释必须以 // 开始并无空行放在声明(包,类型,函数)前。godoc 会为每个文件生成一系列的网页

自定义包的目录结构

/home/user/goprogramsucmain.go	(uc 包主程序)Makefile (ucmain 的 makefile)ucmainsrc/uc	 (包含 uc 包的 go 源码)uc.gouc_test.goMakefile (包的 makefile)uc.a_objuc.a_testuc.abin		(包含最终的执行文件)ucmainpkg/linux_amd64uc.a	(包的目标文件)
http://www.hyszgw.com/news/31094.html

相关文章:

  • 商业网站设计的基本原则高端建站咨询
  • 网站建设计入到什么科目网新企业网站管理系统
  • 网站建设新闻发布注意事项代做毕业设计找哪个网站好
  • 设计师图片素材网站django可以做多大的网站
  • 金融网站建站江西省赣州市有什么好玩的地方
  • 做网站怎样实现网上支付永泰建设工程网站
  • 用帝国cms做视频网站seo排名大概多少钱
  • 南宁网站建设mxfsemphpcmsv9手机网站开发
  • 南京手机网站揭阳网站建设维护
  • 荆轲网络做网站做网站要做哪些
  • 网站建设与管理方案的总结WordPress模仿教程
  • 晨光文具网站建设策划书网络平台推广运营
  • 大石桥做网站投资项目
  • 临汾做网站公司哪家好谷歌推广公司
  • 网站规划结构动态照片制作
  • 上海建设工程安全质量监督站网站深圳企业注销一窗通
  • 大庆做网站的公司安徽省住房和建设执业资格注册中心网站
  • 关于做ppt的网站有哪些手机网站图片切换
  • 做奢侈品网站有哪些模具公司网站中品质见证怎么做
  • 任丘建设网站免费云主机服务器
  • lnmp wordpress建设多网站营销网站建设服务平台
  • 关于集团网站建设的系统开发总结
  • 建网站无锡郑州做网站公司电话
  • 网站网页制作专业公司wordpress的ico
  • 租车公司网站模板什么是优化网站
  • 域名注册完成后怎么做网站秦皇岛提高网站排名
  • 金融服务网站建设如何给网站加cdn
  • 做网站的技术理论网络营销与策划课程
  • 自学网站建设教程吐鲁番市建设局网站
  • 在哪个网站上可以学做衣服核工业西南建设集团有限公司网站