博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Go常用功能总结一阶段
阅读量:5856 次
发布时间:2019-06-19

本文共 4422 字,大约阅读时间需要 14 分钟。

1. go语言从键盘获取输入内容

  <1. 最简单的办法是使用 fmt 包提供的 Scan 和 Sscan 开头的函数。请看以下程序:

package mainimport "fmt"var (    firstName, lastName, s string    i int    f float32    input = "56.12 / 5212 / Go"    format = "%f / %d / %s")func main() {    fmt.Println("Please enter your full name: ")    fmt.Scanln(&firstName, &lastName)    fmt.Printf("Hi %s %s!\n", firstName, lastName)    fmt.Sscanf(input, format, &f, &i, &s)    fmt.Println("From the string we read: ", f, i, s)}

键盘输入:liang yongxing,输出结果如下所示:

1
2
Hi liang yongxing!
From the string we read:  56.12 5212 Go

  Scanln 扫描来自标准输入的文本,将空格分隔的值依次存放到后续的参数内,直到碰到换行。Scanf 与其类似,除了 Scanf 的第一个参数用作格式字符串,用来决定如何读取。Sscan 和以 Sscan 开头的函数则是从字符串读取,除此之外,与 Scanf 相同。如果这些函数读取到的结果与您预想的不同,您可以检查成功读入数据的个数和返回的错误。

  <2. 也可以使用 bufio 包提供的缓冲读取(buffered reader)来读取数据,正如以下例子所示:

package mainimport (    "fmt"    "bufio"    "os")var inputReader *bufio.Readervar input stringvar err errorfunc main() {    inputReader = bufio.NewReader(os.Stdin)    fmt.Println("Please enter some input: ")    input, err = inputReader.ReadString('\n')    if err == nil {        fmt.Printf("The input was: %s\n", input)    }}

  inputReader 是一个指向 bufio.Reader 的指针。inputReader := bufio.NewReader(os.Stdin) 这行代码,将会创建一个读取器,并将其与标准输入绑定。

  bufio.NewReader() 构造函数的签名为:func NewReader(rd io.Reader) *Reader

  该函数的实参可以是满足 io.Reader 接口的任意对象,函数返回一个新的带缓冲的 io.Reader 对象,它将从指定读取器(例如 os.Stdin)读取内容。返回的读取器对象提供一个方法 ReadString(delim byte),该方法从输入中读取内容,直到碰到 delim指定的字符,然后将读取到的内容连同 delim 字符一起放到缓冲区。

  ReadString 返回读取到的字符串,如果碰到错误则返回 nil。如果它一直读到文件结束,则返回读取到的字符串和 io.EOF。如果读取过程中没有碰到 delim 字符,将返回错误 err != nil。在上面的例子中,我们会读取键盘输入,直到回车键(\n)被按下。

2. go语言字符串比较

  go语言中,判断两个字符串是否相等,用

1
strings.EqualFold(str1, str2)

  比较两字符串

1
strings.Compare(a, b string) int

   判断是否包含

1
strings.Contains(s, substr string) bool

   将数组按照指定的字符合并为字符串

1
strings.Join(a []string, sep string) string

   将字符串按照指定字符进行切割为数组

1
strings.Split(s, sep string) []string

   还有很多其他的,例如我们常用的转位大写、小写、驼峰式;去掉空格、替换等,这些函数在go语言也都是存在的,如果需要请查看响应的文档。

3. go语言获取时间

 1. 获取当前时间时间戳

1
2
fmt.Println(time.Now().Unix())
# 1492506479

  如果想要获取精确到毫秒级别的时间戳即精确到 13 位,Go 语言中没有直接的方法,可以使用得到纳秒级别的时间戳,之后除以 1000000 之后得到毫秒级别,即如下代码:

1
time.Now().UnixNano() / 1000000

 2. 获取当前标准时间,格式:yyyy-MM-dd HH:mm:ss

1
2
fmt.Println(time.Now().Format(
"2006-01-02 15:04:05"
))  
// 这是个奇葩,必须是这个时间点, 据说是go诞生之日, 记忆方法:6-1-2-3-4-5
# 2017-04-18 17:10:25

  3. 时间戳转str格式的时间

1
2
3
str_time := time.Unix(1389058332, 0).Format(
"2006-01-02 15:04:05"
)
fmt.Println(str_time)
# 2017-04-18 17:10:25

  4. str格式时间转时间戳

1
2
3
4
5
6
the_time, err := time.Parse(
"2006-01-02 15:04:05"
"2017-04-18 17:10:25"
)
if 
err == nil {
        
unix_time := the_time.Unix()
    
fmt.Println(unix_time) 
}
# 1492506479

4. golang 中的缓冲应用

  bytes.buffer是一个缓冲byte类型的缓冲器存放着都是byte。Buffer 是 bytes 包中的一个结构体: type Buffer struct{…}

  底层原理:其实底层就是一个 []byte, 字节切片

  创建 Buffer缓冲器的几种方式:

  1. 初始化应用

  var buffer bytes.Buffer                // 直接定义一个 Buffer 变量,而不用初始化  buffer.Writer([]byte("Hello World!"))  // 可以直接使用

  2. 使用 new 初始化

  buffer := new(bytes.Buffer)     //直接使用 new 初始化,可以直接使用

  3. 传入字节数组创建

  buffer := NewBuffer([]byte{"hello"})

  4. 传入字符串创建

  buffer := bytes.NewBufferString("helloWorld")

  Buffer既可以被读也可以被写。如果是读Buffer,buf需填充一定的数据;如果是写,buf需有一定的容量(capacity),当然也可以通过new(Buffer)来初始化Buffer。另外一个方法NewBufferString用一个string来初始化可读Buffer,并用string的内容填充Buffer.

import (    "bytes"    "fmt"    "testing")func TestBufferString(t *testing.T){    buf1:=bytes.NewBufferString("swift")    buf2:=bytes.NewBuffer([]byte("swift"))    buf3:=bytes.NewBuffer([]byte{'s', 'w', 'i', 'f', 't'})    fmt.Println("===========以下buf1,buf2,buf3等效=========")    fmt.Println("buf1", buf1)    fmt.Println("buf1", buf2)    fmt.Println("buf1", buf3)    fmt.Println("===========以下创建空的缓冲器等效=========")    buf4:=bytes.NewBufferString("")    buf5:=bytes.NewBuffer([]byte{})    fmt.Println("buf4:", buf4)    fmt.Println("buf5:", buf5)}

运行结果如下:

===========以下buf1,buf2,buf3等效=========buf1 swiftbuf1 swiftbuf1 swift===========以下创建空的缓冲器等效=========buf4: buf5:

写入数据的三种方式:

//write stringbuffer.WriteString("abc")//write []bytebuffer.Write([]byte("abc"))buffer.Write(byte{'a', 'b', 'c'})//write bytebuffer.WriteByte('c')

5. 接口转换为字符串即interface{}-->string

var a interface{}var b string = a.(string)

  其中 b 就是通过接口 a 转换而来。

5. string、int、int64相互转化

#string --> int  int,err:=strconv.Atoi(string)  #string --> int64  int64, err := strconv.ParseInt(string, 10, 64)  #int --> string  string:=strconv.Itoa(int)  #int64 --> string  string:=strconv.FormatInt(int64,10)

转载地址:http://osojx.baihongyu.com/

你可能感兴趣的文章
CloudStack 4.4学习总结之cloudstack-management安装
查看>>
VTSS Error code
查看>>
360提供的Php防注入代码
查看>>
windows phone (12) 小试自定义样式
查看>>
Linux后台启动脚本
查看>>
jna dll c
查看>>
CentOS 升级现有PHP版本
查看>>
(一) pyhon 基础语法(数值 字符串 元组 列表 字典)
查看>>
HDOJ 1003:求一串数字中和最大的连续子串
查看>>
RedHat 5.6_x86_64 + ASM + RAW+ Oracle 10g RAC (二)
查看>>
win7不能全屏
查看>>
MySQL/InnoDB的并发插入Concurrent Insert
查看>>
转两好文防丢:Debian 版本升级/降级 & Linux 应用程序失去输入焦点问题的解决...
查看>>
HDU - Pseudoforest
查看>>
Nexus杂
查看>>
Android --- GreenDao的实现(ORM框架)
查看>>
Linux平台Java调用so库-JNI使用例子
查看>>
Spring Data JPA
查看>>
项目管理修炼之道之规划项目
查看>>
Web服务器压力测试工具http_load、webbench、ab、Siege使用教程
查看>>