Go常用功能总结一阶段
1. go语言从键盘获取输入内容
<1. 最简单的办法是使用 fmt 包提供的 Scan 和 Sscan 开头的函数。请看以下程序:

package main
import "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 main
import (
"fmt"
"bufio"
"os"
) var inputReader *bufio.Reader
var input string
var err error func 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 swift
buf1 swift
buf1 swift
===========以下创建空的缓冲器等效=========
buf4:
buf5:

写入数据的三种方式:

//write string
buffer.WriteString("abc")
//write []byte
buffer.Write([]byte("abc"))
buffer.Write(byte{'a', 'b', 'c'})
//write byte
buffer.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)
Go常用功能总结一阶段的更多相关文章
- Go_13:Go常用功能总结一阶段
1. go语言从键盘获取输入内容 <1. 最简单的办法是使用 fmt 包提供的 Scan 和 Sscan 开头的函数.请看以下程序: package main import "fmt& ...
- Keil的使用方法 - 常用功能(一)
Ⅰ.概述 学习一门软件的开发,开发工具的掌握可以说尤为重要.由于Keil集成开发工具支持多种MCU平台的开发,是市面上比较常见的,也是功能比较强大一款IDE.所以,对于大多数人说,选择Keil几乎是单 ...
- Google Chrome调试js代码,开发者工具之调试工具常用功能
参考:Google Chrome调试js代码-http://www.open-open.com/lib/view/open1384785324165.html 重点:左下角一个{}括号图标按钮用于把杂 ...
- WebStorm 常用功能的使用技巧分享
WebStorm 是 JetBrain 公司开发的一款 JavaScript IDE,使用非常方便,可以使编写代码过程更加流畅. 本文在这里分享一些常用功能的使用技巧,希望能帮助大家更好的使用这款强大 ...
- AVA正则表达式4种常用功能
正则表达式在字符串处理上有着强大的功能,sun在jdk1.4加入了对它的支持 下面简单的说下它的4种常用功能: 查询: String str="abc efg ABC"; Str ...
- [转]WebPack 常用功能介绍
概述 Webpack是一款用户打包前端模块的工具.主要是用来打包在浏览器端使用的javascript的.同时也能转换.捆绑.打包其他的静态资源,包括css.image.font file.templa ...
- FastReport.Net 常用功能总汇
一.常用控件 文本框:输入文字或表达式 表格:设置表格的行列数,输入数字或表达式 子报表:放置子报表后,系统会自动增加一个页面,你可以在此页面上设计需要的报表.系统在打印处理时,先按主报表打印,当碰到 ...
- python3 字符串与列表常用功能
一.字符串常用功能 1. capitalize(),将字符串的首字母变成大写,其余全部置为小写:如果字符串中有多个单词,也只是将第一个单词的首字母置为大写:例: >>> name = ...
- matlab进阶:常用功能的实现,常用函数的说明
常用功能的实现 获取当前脚本所在目录 current_script_dir = fileparts(mfilename('fullpath')); % 结尾不带'/' 常用函数的说明 bsxfun m ...
随机推荐
- 使用命令行管理virtualBox
最近在鼓捣hadoop,装了几台虚拟机,,总感觉gui启动很别扭,后来发现virtualBox有个headless模式,只想说舒服! 常用命令 VBoxManage startvm name|id - ...
- Revit二次开发示例:ChangesMonitor
在本示例中,程序监控Revit打开文件事件,并在创建的窗体中更新文件信息. #region Namespaces using System; using System.Collections.Ge ...
- LOJ.2587.[APIO2018]铁人两项Duathlon(圆方树)
题目链接 LOJ 洛谷P4630 先对这张图建圆方树. 对于S->T这条(些)路径,其对答案的贡献为可能经过的所有点数,那么我们把方点权值设为联通分量的大小,可以直接去求树上路径权值和. 因为两 ...
- python开发_tkinter_菜单选项中英文切换_菜单选项不可用操作_博主推荐
我使用的python版本为:3.3.2 如果你对python中tkinter模块的菜单操作不是很了解,你可以看看: python开发_tkinter_窗口控件_自己制作的Python IDEL_博主推 ...
- wikioi 1380 没有上司的舞会 树形dp
1380 没有上司的舞会 时间限制: 1 s 空间限制: 128000 KB 题目等级 : 钻石 Diamond 题目描述 Description Ural大学有N个职员,编号为1~N.他 ...
- 事件冒泡 比bubble
冒泡的概念就是 当子元素触发事件的时候 相应的祖宗十八代素也会触发相同的事件(前提父元素也添加了一样的事件)eg:儿子 有一个onclick 祖宗十八代 也有onclick 当点击儿子的时候 祖宗十八 ...
- Iterative (non-recursive) Quick Sort
An iterative way of writing quick sort: #include <iostream> #include <stack> #include &l ...
- JavaScript也能求爱哦
这里面做了一个JavaScript的求爱小特效,效果例如以下: 不仅能出现以下的图的效果,还能够让这个图形尾随着鼠标转动哦,这里面仅仅是一个简单的没有修饰的小样例,基于这个样例能够让求爱,更加好玩了. ...
- linux下如何挂接(mount)光盘镜像文件、移动硬盘、U盘、Windows网络共享和NFS网络共享
首先,介绍一下挂接(mount)命令的使用方法,mount命令参数非常多,这里主要讲一下今天我们要用到的. 命令格式: mount [-t vfstype] [-o options ...
- .NET:CLR via C# Assembly Loading
基础知识 Internally, the CLR attempts to load this assembly by using the System.Reflection.Assembly clas ...