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

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

  1. package main
  2. import "fmt"
  3.  
  4. var (
  5. firstName, lastName, s string
  6. i int
  7. f float32
  8. input = "56.12 / 5212 / Go"
  9. format = "%f / %d / %s"
  10. )
  11.  
  12. func main() {
  13. fmt.Println("Please enter your full name: ")
  14. fmt.Scanln(&firstName, &lastName)
  15. fmt.Printf("Hi %s %s!\n", firstName, lastName)
  16. fmt.Sscanf(input, format, &f, &i, &s)
  17. fmt.Println("From the string we read: ", f, i, s)
  18. }

键盘输入: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)来读取数据,正如以下例子所示:

  1. package main
  2. import (
  3. "fmt"
  4. "bufio"
  5. "os"
  6. )
  7.  
  8. var inputReader *bufio.Reader
  9. var input string
  10. var err error
  11.  
  12. func main() {
  13. inputReader = bufio.NewReader(os.Stdin)
  14. fmt.Println("Please enter some input: ")
  15. input, err = inputReader.ReadString('\n')
  16. if err == nil {
  17. fmt.Printf("The input was: %s\n", input)
  18. }
  19. }

  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. 初始化应用

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

  2. 使用 new 初始化

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

  3. 传入字节数组创建

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

  4. 传入字符串创建

  1.   buffer := bytes.NewBufferString("helloWorld")

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

  1. import (
  2. "bytes"
  3. "fmt"
  4. "testing"
  5. )
  6.  
  7. func TestBufferString(t *testing.T){
  8. buf1:=bytes.NewBufferString("swift")
  9. buf2:=bytes.NewBuffer([]byte("swift"))
  10. buf3:=bytes.NewBuffer([]byte{'s', 'w', 'i', 'f', 't'})
  11. fmt.Println("===========以下buf1,buf2,buf3等效=========")
  12. fmt.Println("buf1", buf1)
  13. fmt.Println("buf1", buf2)
  14. fmt.Println("buf1", buf3)
  15. fmt.Println("===========以下创建空的缓冲器等效=========")
  16. buf4:=bytes.NewBufferString("")
  17. buf5:=bytes.NewBuffer([]byte{})
  18. fmt.Println("buf4:", buf4)
  19. fmt.Println("buf5:", buf5)
  20. }

运行结果如下:

  1. ===========以下buf1,buf2,buf3等效=========
  2. buf1 swift
  3. buf1 swift
  4. buf1 swift
  5. ===========以下创建空的缓冲器等效=========
  6. buf4:
  7. buf5:

写入数据的三种方式:

  1. //write string
  2. buffer.WriteString("abc")
  3. //write []byte
  4. buffer.Write([]byte("abc"))
  5. buffer.Write(byte{'a', 'b', 'c'})
  6. //write byte
  7. buffer.WriteByte('c')

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

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

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

5. string、int、int64相互转化

  1. #string --> int
  2. int,err:=strconv.Atoi(string)
  3.  
  4. #string --> int64
  5. int64, err := strconv.ParseInt(string, 10, 64)
  6.  
  7. #int --> string
  8. string:=strconv.Itoa(int)
  9.  
  10. #int64 --> string
  11. string:=strconv.FormatInt(int64,10)

Go常用功能总结一阶段的更多相关文章

  1. Go_13:Go常用功能总结一阶段

    1. go语言从键盘获取输入内容 <1. 最简单的办法是使用 fmt 包提供的 Scan 和 Sscan 开头的函数.请看以下程序: package main import "fmt& ...

  2. Keil的使用方法 - 常用功能(一)

    Ⅰ.概述 学习一门软件的开发,开发工具的掌握可以说尤为重要.由于Keil集成开发工具支持多种MCU平台的开发,是市面上比较常见的,也是功能比较强大一款IDE.所以,对于大多数人说,选择Keil几乎是单 ...

  3. Google Chrome调试js代码,开发者工具之调试工具常用功能

    参考:Google Chrome调试js代码-http://www.open-open.com/lib/view/open1384785324165.html 重点:左下角一个{}括号图标按钮用于把杂 ...

  4. WebStorm 常用功能的使用技巧分享

    WebStorm 是 JetBrain 公司开发的一款 JavaScript IDE,使用非常方便,可以使编写代码过程更加流畅. 本文在这里分享一些常用功能的使用技巧,希望能帮助大家更好的使用这款强大 ...

  5. AVA正则表达式4种常用功能

    正则表达式在字符串处理上有着强大的功能,sun在jdk1.4加入了对它的支持 下面简单的说下它的4种常用功能: 查询: String str="abc efg ABC";  Str ...

  6. [转]WebPack 常用功能介绍

    概述 Webpack是一款用户打包前端模块的工具.主要是用来打包在浏览器端使用的javascript的.同时也能转换.捆绑.打包其他的静态资源,包括css.image.font file.templa ...

  7. FastReport.Net 常用功能总汇

    一.常用控件 文本框:输入文字或表达式 表格:设置表格的行列数,输入数字或表达式 子报表:放置子报表后,系统会自动增加一个页面,你可以在此页面上设计需要的报表.系统在打印处理时,先按主报表打印,当碰到 ...

  8. python3 字符串与列表常用功能

    一.字符串常用功能 1. capitalize(),将字符串的首字母变成大写,其余全部置为小写:如果字符串中有多个单词,也只是将第一个单词的首字母置为大写:例: >>> name = ...

  9. matlab进阶:常用功能的实现,常用函数的说明

    常用功能的实现 获取当前脚本所在目录 current_script_dir = fileparts(mfilename('fullpath')); % 结尾不带'/' 常用函数的说明 bsxfun m ...

随机推荐

  1. anaconda安装tensorflow后pip安装jieba出错的问题

    安装jieba出错,参考https://www.cnblogs.com/minsons/p/7872647.html TypeError: parse() got an unexpected keyw ...

  2. Git 历险记

    Git历险记(一) 作为分布式版本控制系统的重要代表--Git已经为越来越多的人所认识,它相对于我们熟悉的CVS.SVN甚至同时分布式控制系统的Mercurial,有哪些优势和不足呢.这次InfoQ中 ...

  3. bzoj 1337 最小圆覆盖

    /************************************************************** Problem: 1337 User: idy002 Language: ...

  4. BZOJ3522&4543 [POI2014]Hotel加强版 长链剖分

    上上周见fc爷用长链剖分秒题 于是偷偷学一学 3522的数据范围很小 可以暴力枚举每个点作为根节点来dp 复杂度$O(n^2)$ 考虑令$f[x][j]$表示以$x$为根的子树内距离$x$为$j$的点 ...

  5. [Cocos2dx] CCCamera照相机 详解

    前言 在3D游戏当中,我们经常会使用到照相机这个东西,无论你使用的是哪一款引擎,都会用到,同时,照相机这个东西涉及到的东西比较多,基础知识需要扎实一些才可以. 如何使用 很久之前做项目的时候用到过一次 ...

  6. SQLite 客户端管理工具

    SQLite 客户端管理工具 SQLite Expert Personal 3.5.79.2499 下载地址:http://www.onlinedown.net/soft/117987.htm SQL ...

  7. C#中结构(struct)的部分初始化和完全初始化

    假设有这样一个值类型struct. public struct Size { public int Length; public int Width; public int Area() { retu ...

  8. Spring MVC的异步模式DefferedResult

    原文:http://www.importnew.com/21051.html 什么是异步模式 要知道什么是异步模式,就先要知道什么是同步模式,先看最典型的同步模式: (图1) 浏览器发起请求,Web服 ...

  9. 使用框架帮助Activity规范化

    摘要 本文原创,转载请注明地址:http://kymjs.com/code/2015/05/10/01 写给那些在用.想用.还没有用过KJFrame的朋友. KJFrameForAndroid总共分为 ...

  10. Java发邮件带附件(且重命名附件)

    环境:spring3.2.2+jquery 用户的附件管理要实现发送附件可以是单个也可以是多个.由于用户在上传附件的时候采用了重命名机制,所以存在服务器上的文件是重命名后的文件,如果用户要将文件以邮件 ...