Go扩展包(三):time(时间包)
1.获取时间1.1 当前时间1234567891011121314unix := time.Now().Unix()fmt.Printf("当前时间戳(单位秒): %v \n",unix)nano := time.Now().UnixNano()fmt.Printf("当前时间戳(单位纳秒): %v\n",nano)format := time.Now().Format("2006-01-02 15:04:05")fmt.Printf("当前时间(Y-m-d H:i:s): %v\n",format)format2 := time.Now().Format("20060102150405")fmt.Printf("当前时间(YmdHis): %v\n",format2)/**当前时间戳(单位秒): 1616251448 当前时间戳(单位纳秒): 1616251448041163000当前时间(Y-m-d H:i:s): 2021-03-20 22:44:08当前时间( ...
Go扩展包(二):strconv(字符串转换)
1.转换成其他类型(Parse类函数)1.1 转换成整型(Atoi)1.语法1func Atoi(s string) (int, error)
2.使用示例1234567891011121314package mainimport ( "fmt" "strconv")func main() { // 将字符串转成整型 s := "666" sInt,err := strconv.Atoi(s) if err == nil { fmt.Printf("将字符串:%s 转成整型:%d 类型: %T \n",s,sInt,sInt) }}//将字符串:666 转成整型:666 类型: int
1.2 解析成整型(ParseInt)1.语法1func ParseInt(s string, base int, bitSize int) (i int64, err error)
base:表示进制(2到36)。如果base=0,则根据字符串前缀判断,0x:表示十 ...
Go扩展包(一):strings(字符串操作)
1.字符串查找strings是Go内置的标准包,主要用于字符串查找、替换、比较等。常用方法如下:
1.1 方法列表
方法名
描述
Count(s, substr string)int
返回字符串s包含字符串substr的个数
Contains(s, substr string)bool
判断字符串s是否包含substr字符串
ContainsAny(s, chars string)bool
判断字符串s是否包含chars字符串中的任意一个字符
ContainsRune(s string, r rune)bool
判断字符串s是否包含unicode的码值r
LastIndex(s, substr string)int
返回字符串s中字符串substr最后一次出现的位置
Index(s, substr string)int
返回字符串s中字符串substr首次出现的位置
IndexByte(s string, c byte)int
返回字符串s中字符c首次出现的位置
IndexRune(s string, r rune)int
返回unicode的码值 ...
Go工具(一):gvm
1. 什么是GvmGo 语言版本管理器(Gvm)是管理 Go 语言环境的开源工具。Gvm 「pkgsets」 支持安装多个版本的 Go 并管理每个项目的模块。它最初由 Josh Bussdieker 开发,Gvm 与 Ruby RVM 类似,允许你为每个项目或一组项目创建一个开发环境,分离不同的 Go 版本和包依赖关系,来提供更大的灵活性,以防不同版本造成的问题。Gvm 主要有以下几个特性:
管理 Go 的多个版本,包括安装、卸载和指定使用 Go 的某个版本
查看官方所有可用的 Go 版本,同时可以查看本地已安装和默认使用的 Go 版本
管理多个 GOPATH,并可编辑 Go 的环境变量
可将当前目录关联到 GOPATH
可以查看 GOROOT 下的文件差异
支持 Go 版本切换
gvm Star6.8k 源码地址:https://github.com/moovweb/gvm
2. 安装Gvm1bash < <(curl -s -S -L https://raw.githubusercontent.com/moovweb/gvm/master/binscripts/ ...
Go实操(四):遍历使用
1. 遍历字符串(string)1.1 统计长度后遍历12345678func ForString() { str := "hello word" //1.统计长度后遍历 length := len(str) for i := 0; i < length; i++{ fmt.Printf("字符: %c ",str[i]) }}
1.2 转为byte后遍历1234567func ForString() { str := "hello word" strByte := []byte(str) for _,v := range strByte{ fmt.Printf("字符: %c ",v) }}
2. 遍历数组(array)2.1 遍历一维数组1234567func ForArray() { //遍历一维数组 arr := [5]int{1, 2, 3, 4, 5} for _, v : ...
Go实操(三):Map使用
1.创建1countryMap = make(map[string]string)
2.插入12/* map 插入 key-value */countryMap["ShengRI"] = "1988-04-09"
3.取值12345/* 使用 key 输出 map 值 */for country := range countryMap { fmt.Println("Capital of",country,"is",countryMap[country])}
4.key是否存在12345678/* 查看元素在集合中是否存在 */captial, ok := countryMap["ShengRI"]/* 如果 ok 是 true, 则存在,否则不存在 */if(ok){ fmt.Println("Capital of United States is", captial)} else { fmt ...
Go实操(二):时间处理
1.获取当前时间戳1fmt.Println(time.Now().Unix()) //1561713322
2.格式化时间1234567891011121314fmt.Println("时间:",time.Now().Format("20060102150405"))fmt.Println("时间1:",time.Now().Format("2006/01/02 15:04:05"))fmt.Println("时间2:",time.Now().Format("2006-01-02 15:04:05"))fmt.Println("时间3:", time.Now().Format("2006-01-02"))fmt.Println("时间4:", time.Now().Format("15:04:05"))/**输出:时间: 20190628172052时间1: 2019/06/28 17: ...
Go实操(一):字符串操作
在GO中字符串是用双引号(“”)或反引号(``)括起来,而且字符串不可变
1 字符串操作1.1 修改字符串直接修改字符串报错,如下代码:
123456var s string = "hello word"s[0] =`a`//报错# command-line-arguments...cannot assign to str[0]
通过转[]byte类型修改字符串
12345var s string = "hello word"slice := []byte(s)slice[0] ='H'newStr := string(slice)fmt.Println(newStr)
此处的 slice[0] =’H’ 不能写成 slice[0] =”H”,否则会报错:cannot use “H” (type string) as type byte in assignment
1.2 字符串转[]byte 类型12var s string = "hello word"s ...
Go学习(二十七):反射使用
1.介绍Go语言实现了反射,所谓反射就是动态运行时的状态。我们一般用到的包是reflect包,reflect 实现了运行时的反射能力,能够让程序操作不同类型的对象。反射包中有两对非常重要的函数和类型,两个函数分别是:
方法名
描述
reflect.TypeOf
可以获得任意值的类型对象,返回类型:reflect.Type
reflect.ValueOf
可以获得任意值的值对象,返回类型:reflect.Value
反射包中的所有方法基本都是围绕着 reflect.Type 和 reflect.Value 两个类型设计的。我们通过 reflect.TypeOf、reflect.ValueOf 可以将一个普通的变量转换成反射包中提供的 reflect.Type 和 reflect.Value,随后就可以使用反射包中的方法对它们进行复杂的操作。
2.reflect.Type类型 reflect.Type 是反射包定义的一个接口,我们可以使用 reflect.TypeOf 函数获取任意变量的类型,reflect.Type 接口中定义了一些方法,常用的如下:
2.1 常用 ...
Go学习(二十六):Md5/Sha1/Base64
1.生成Md5123456789101112131415161718192021222324252627282930package mainimport ( "crypto/md5" "fmt" "io")func main() { str := "Hello Word" // 方法一 sum := md5.Sum([]byte(str)) // 转成16进制 md51 := fmt.Sprintf("%x", sum) fmt.Println("方法一: " + md51) // 方法二 hash := md5.New() // 将str写入到hash _, err := io.WriteString(hash, str) if err != nil { fmt.Println(err.Error()) } // 转成16进制 md52 := fmt.Sprintf("%x",hash.Sum(nil)) fmt. ...
Go学习(二十五):操作数据库-MYSQL
1.介绍Go官方提供了database包,database包下有sql/driver。该包用来定义操作数据库的接口,这保证了无论使用哪种数据库,操作方式都是相同的。但Go官方并没有提供连接数据库的driver,如果要操作数据库,还需要第三方的driver包。
2.下载安装驱动go-sql-driver驱动源码地址: https://github.com/go-sql-driver/mysql
2.1 安装驱动1go get -u github.com/go-sql-driver/mysql
3.匿名导入通常来说,导入包后就能调用该包中的数据和方法。但是对于数据库操作来说,不应该直接使用导入驱动包所提供的方法,而应该使用 sql.DB对象所提供的统一的方法。因此在导入MySQL驱动时,使用了匿名导入包的方式。
匿名导入包: 只导入包但是不使用包内的类型和数据,使用匿名的方式: 在包路径前添加下划线_
123import ( _ "github.com/go-sql-driver/mysql")
在导入一个数据库驱动后,该驱动会自行初始化并注册到Go的datab ...
Go学习(二十四):文件操作
1.介绍在Go语言中,文件操作的大多数函数都在os包里面,文件的信息包括:文件名、文件大小、修改权限、修改时间等。
1.1 文件接口属性(FileInfo)12345678type FileInfo interface { Name() string // 文件名 Size() int64 // 文件大小 Mode() FileMode // 修改权限 ModTime() time.Time // 最后修改时间 IsDir() bool // 判断是否是目录 Sys() interface{} // 文件的详细信息,获取的值是*syscall.Stat_t类型 }
1.2 文件信息结构体(fileStat)1234567type fileStat struct { name string size int64 mode FileMode modTime time.Time sys syscall.Stat_t}
1.fileStat结构体的常用方法 ...
Go学习(二十三):JSON使用
1.Map转JSON12345678910111213141516171819202122232425262728293031323334package mainimport ( "encoding/json" "fmt")func main() { // map里面 map1 := map[string]string { "name":"张三", "age":"18", "home":"北京", } // 将map解析成json json1, err := json.Marshal(map1) if err != nil { fmt.Println(err.Error()) } fmt.Printf("json1: %s 类型: %T \n",json1,json1) map2 := map[string][]string { & ...
Go学习(二十二):Web开发-HTTP客户端的实现
1.怎么实现HTTP协议客户端?Go语言标准库内置了net/http包,涵盖了HTTP客户端和服务端具体的实现方式。内置的net/http包提供了最简洁的HTTP客户端实现方式,无须借助第三方网络通信库,就可以直接使用HTTP中用得最多的GET和POST方式请求数据。
实现HTTP客户端就是客户端通过网络访问向服务端发送请求,服务端发送响应信息,并将相应信息输出到客户端的过程。实现客户端有以下几种方式。
2.Get请求2.1 使用http.NewRequest1. 源码12345// method:GET | POST// url:func NewRequest(method, url string, body io.Reader) (*Request, error) { return NewRequestWithContext(context.Background(), method, url, body)}
2. 使用示例1234567891011121314151617181920212223242526272829303132333435363738394 ...
Go学习(二十一):Web开发-HTTP服务端接收参数的几种方式
1.获取GET参数1.1 方法列表
方法名
描述
(r *Request) ParseForm() error
判断是否解析传参时出错
(r *Request) FormValue(key string) string
接收指定key的参数值
1.2 使用示例12345678910111213141516171819202122232425262728// 服务端代码package mainimport ( "fmt" "net/http")func main() { http.HandleFunc("/login", login) _ = http.ListenAndServe(":8888", nil)}func login(w http.ResponseWriter, r *http.Request) { // 判断参数是否是Get请求,并且参数解析正常 if r.Method == "GET" && r.Parse ...