go 使用方式

一、GO基本概念

Go是一个开源的编程语言,它能让构造简单、可靠且高效的软件变得容易。

Go是从2007年末由Robert Griesemer (罗伯特.格利茨默),Rob Pike(罗伯.派克),>

  • Ken Thompson(肯.汤普森)主持开发,后来还加入了lan Lance Taylor(伊恩:兰斯·>泰勒), Russ Cox(鲁斯.考斯)等人,并最终于2009年11月开源,在2012年早些时>候发布了Go 1稳定版本。现在Go的开发已经是完全开放的,并且拥有一个活跃的>社区。
  • Rob Pike:曾是贝尔实验室(Bell Labs)的Unix团队,和Plan 9操作系统计划的成员。他与Thompson共事多年,并共创出广泛使用的UTF-8 字元编码。
  • Robert Griesemer:在开发Go之前是Google V8、Chubby和HotSpot JVM的主要
    贡献者,曾协助制作Java的HotSpot编译器,和Chrome浏览器的JavaScript引擎V8。

二、GO语言的特点

兼顾C语言级别的编译、运行效率,容易部署,PHP级别的开发效率

  • 强大的标准库,内置高效的垃圾回收机制
  • 简单的并发编程,goroutine和channel极易上手
  • 静态类型语言,拥有强大的编译检查、严格的编码规范
  • 背景强大,由三位骨灰级大师创造,google公司运营维护

三、GO语言前景

在云计算、微服务、基础后端软件上具有强大优势
得到诸多大厂的"青睐",很多部门由java转golang,新公司甚至直接使用golang
优秀开源项目不断涌现,有docker和k8s

四、GO环境部署

1、安装go

官方下载网址:golang.google.cn

2、配置环境变量

3、环境变量设置完成之后查看

go version

五、go 语法操作

1//将整形转成字符串
 strconv.Itoa()
 //字符串转int 类型
 strconv.Atoi()

2、截取参数
//通过下标找到位置截取 
tracer := "死神来了, 死神bye bye"
comma := strings.Index(tracer, ", ")
pos := strings.Index(tracer[comma:], "死神")
fmt.Println(comma, pos, tracer[comma+pos:])
输出:
	3 死神bye bye

3//时间格式处理
//当前时间
now := time.Now( )
fmt.PrintIn(now)
//时间戳,单位秒
seconds stamp := now.Unix(fmt.PrintIn( seconds stamp)
//时间戳,单位纳秒 1秒=le3毫秒=le9纳秒fmt.PrintIn(now.UnixNano( ))
//时间戳,单位毫秒
fmt.PrintIn(now.UnixNano( ) / le6)//只输出年,其他字段类似
fmt.Printin(now.Year( ))
//只输出月
fmt.PrintIn(now.Month( ))
//只输出天
fmt.PrintIn(now.Day( ))
//只输小时
fmt.PrintIn(now.Hour( ))
//一年的第几天
fmt.PrintIn(now.YearDay( ))
[/年月日
fmt.PrintIn(now.Date( ))
//时分秒
fmt.PrintIn(now.Clock( ))


//时间转时间戳,单位秒
seconds stamp := now.Unix()
//时间转字符串,时间格式化,模板为2006-01-02 15:04:05,区别为java中yyyy-MM-dd HH:mm:ss//解析在方法time.format.nextStdChunk(),用上符号表示年月日等,是因为各字段是互斥的,具体可以看源码fmt.Printin(now.Format("2006-01-02 15:04:05")) //2019-07-17 18:43:16
//时间戳转时间
fmt.Println( time.Unix( seconds_stamp, 0 ))
/字符串转时间
fmt.Println(time.Parse("2006-01-02 15:04:05""2019-07-01 08:18:18"))

//自定义时间段timeDur := time.Duration(10)*time.Second + time.Duration(1)*time.Minutefmt.PrintIn(timeDur)
//时间相加nowAddTime := now.Add( timeDur )fmt.PrintIn(nowAddTime )
//时间相减,时间差(时间段)
diff := nowAddTime.Sub( now)
fmt.Println(diff) //1m10s
fmt.Println(diff.Hours( )) //分为单位显示时间差,0.019444444444444445fmt.Println(diff.Minutes()) //分为单位显示时间差、1.1666666666666667fmt.Println(diff.Seconds( )) //秒为单位显示时间差,70
//年月日添加
fmt.Println(nowAddTime.AddDate(1,-9,3)) //2019-10-20 18:55:56.654503204 +0800 CS

timeDur := time.Duration(10)xtime.Second + time.Duration(1)*time.MinutenowAddTime := now.Add( timeDur )
//时间比较
//时间之前比较
fmt.PrintIn(nowAddTime.After(now)) //true
//时间之后比较
fmt.PrintIn(nowAddTime.Before(now)) //false
//时间相等比较
fmt.Printin(now.Equal(now)) //true

//休眠1秒
time.Sleep(time.Second*1)

六、go中validate中的验证规则

required    //这将验证该值不是数据类型的默认零值。数字不为0,字符串不为 " ", slices, maps, pointers, interfaces, channels and functions 不为 nil
isdefault    //这验证了该值是默认值,几乎与所需值相反。
len=10    //对于数字,长度将确保该值等于给定的参数。对于字符串,它会检查字符串长度是否与字符数完全相同。对于切片,数组和map,验证元素个数。
max=10    //对于数字,max将确保该值小于或等于给定的参数。对于字符串,它会检查字符串长度是否最多为该字符数。对于切片,数组和map,验证元素个数。
min=10
eq=10    //对于字符串和数字,eq将确保该值等于给定的参数。对于切片,数组和map,验证元素个数。
ne=10    //和eq相反
oneof=red green (oneof=5 7 9)    //对于字符串,整数和uint,oneof将确保该值是参数中的值之一。参数应该是由空格分隔的值列表。值可以是字符串或数字。
gt=10    //对于数字,这将确保该值大于给定的参数。对于字符串,它会检查字符串长度是否大于该字符数。对于切片,数组和map,它会验证元素个数。
gt    //对于time.Time确保时间值大于time.Now.UTC()
gte=10    //大于等于
gte    //对于time.Time确保时间值大于或等于time.Now.UTC()
lt=10    //小于
lt    //对于time.Time确保时间值小于time.Now.UTC()
lte=10    //小于等于
lte    //对于time.Time确保时间值小于等于time.Now.UTC()
----

unique    //对于数组和切片,unique将确保没有重复项。对于map,unique将确保没有重复值。
alpha    //这将验证字符串值是否仅包含ASCII字母字符
alphanum    //这将验证字符串值是否仅包含ASCII字母数字字符
alphaunicode    //这将验证字符串值是否仅包含unicode字符
alphanumunicode    //这将验证字符串值是否仅包含unicode字母数字字符
numeric    //这将验证字符串值是否包含基本数值。基本排除指数等...对于整数或浮点数,它返回true。
hexadecimal    //这将验证字符串值是否包含有效的十六进制
hexcolor    //这验证字符串值包含有效的十六进制颜色,包括#标签(#)
rgb    //这将验证字符串值是否包含有效的rgb颜色
rgba    //这将验证字符串值是否包含有效的rgba颜色
hsl    //这将验证字符串值是否包含有效的hsl颜色
hsla    //这将验证字符串值是否包含有效的hsla颜色
email    //这验证字符串值包含有效的电子邮件这可能不符合任何rfc标准的所有可能性,但任何电子邮件提供商都不接受所有可能性
file    //这将验证字符串值是否包含有效的文件路径,并且该文件存在于计算机上。这是使用os.Stat完成的,它是一个独立于平台的函数。
url    //这会验证字符串值是否包含有效的url这将接受golang请求uri接受的任何url,但必须包含一个模式,例如http://或rtmp://
uri    //这验证了字符串值包含有效的uri。这将接受uri接受的golang请求的任何uri
base64    //这将验证字符串值是否包含有效的base64值。虽然空字符串是有效的base64,但这会将空字符串报告为错误,如果您希望接受空字符串作为有效字符,则可以将此字符串与omitempty标记一起使用。
base64url    //这会根据RFC4648规范验证字符串值是否包含有效的base64 URL安全值。尽管空字符串是有效的base64 URL安全值,但这会将空字符串报告为错误,如果您希望接受空字符串作为有效字符,则可以将此字符串与omitempty标记一起使用。
btc_addr    //这将验证字符串值是否包含有效的比特币地址。检查字符串的格式以确保它匹配P2PKH,P2SH三种格式之一并执行校验和验证
btc_addr_bech32    //这验证了字符串值包含bip-0173定义的有效比特币Bech32地址(https://github.com/bitcoin/bips/blob/master/bip-0173.mediawiki)特别感谢Pieter Wuille提供的参考实现。
eth_addr    //这将验证字符串值是否包含有效的以太坊地址。检查字符串的格式以确保它符合标准的以太坊地址格式完全验证被https://github.com/golang/crypto/pull/28阻止
contains=@    //这将验证字符串值是否包含子字符串值
containsany=!@#?    //这将验证字符串值是否包含子字符串值中的任何Unicode code points。
containsrune=@    //这将验证字符串值是否包含提供的符文值。
excludes=@    //这验证字符串值不包含子字符串值。
excludesall=!@#?    //这将验证字符串值在子字符串值中是否包含任何Unicode code points。

六、以下是几个Go语言的开源框架:

Beego:一个开源的、高性能的Web框架。
Buffalo:快速Web开发框架。
Echo:高性能、极简的Web框架。
Gin:HTTP Web框架,提供Martini风格的API但具有更好的性能。
Iris:发展最快的Go Web框架,提供完整的MVC功能并面向未来。
Revel:一个高生产率的全栈Go语言Web框架。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值