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)
时间: 2024-11-10 18:04:32

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

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

Ⅰ.概述 学习一门软件的开发,开发工具的掌握可以说尤为重要.由于Keil集成开发工具支持多种MCU平台的开发,是市面上比较常见的,也是功能比较强大一款IDE.所以,对于大多数人说,选择Keil几乎是单片机或者嵌入式开发人员的不二选择. 从今天开始的接下来一些时间总结关于Keil的使用方法.计划前一阶段总结常见功能,后面综合性的总结Keil的功能. 关注我的朋友应该知道,我前面已经总结过Keil下载与安装 和 Keil新建软件工程这两篇文章,今天接着上面的文章来总结Keil使用方法之常用功能. 使

Harbor 学习分享系列4 - Harbor常用功能实验.md

前言 本文为Harbor技术分享系列的第4部分也是初级部分的完结篇,下个阶段作者将会进阶分享,更多详细的内容将会将会在文中介绍. 云盘链接 链接:https://pan.baidu.com/s/1PTHHAqrRC41sesRuLtr2Tg 密码:2z9f 通过本文无法把本文中的实验进行成功,请联系作者本人,作者会录制视频发送给您 如果大家有比较好的技术分享平台或者博客平台等欢迎分享,感谢. 不得不吐槽博客园的编辑器真心用不太习惯.建议大家下载完成可以使用 typora编辑器进行阅读. 如果转载

js常用功能代码

js常用功能代码(持续更新): 1,--折叠与展开 <input id="btnDisplay" type="button" class="baocun2" value="添加" onclick="changeDisplay()" /> <script type="text/javascript"> function changeDisplay() { var h

SVN的安装与常用功能使用以及解决安装配置过程中的一些错误

SVN简介: SVN是Subversion的简称,是一个开放源代码的版本控制系统,将工程代码集中在服务器上进行一个统一的集中式管理,从而能够方便地控制代码版本,相较于RCS.CVS,它采用了分支管理系统,它的设计目标就是取代CVS.互联网上很多版本控制服务已从CVS迁移到Subversion.说得简单一点SVN就是用于多个人共同开发同一个项目,共用资源的目的,而且通过使用SVN开发人员之间[学Java,到凯哥学堂kaige123.com]能够很方便的更新.提交工程代码,并且如果工程的版本有冲突还

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

WebStorm 是 JetBrain 公司开发的一款 JavaScript IDE,使用非常方便,可以使编写代码过程更加流畅. 本文在这里分享一些常用功能的使用技巧,希望能帮助大家更好的使用这款强大的 JavaScript 开发工具. 代码编辑 代码跳转: Ctrl + 左键 或者 Ctrl + B,可以跳转到函数或者变量的声明位置 调用位置: Alt + F7,查找调用者 自动补全: 最好是修改一下响应时间,Settings->Editors->General->Code Compl

项目中常用功能,如:流媒体、健康数据(步数等)等-b

整理iOS开发中使用的各种流媒体和常用的高级功能.由于时间关系,目前只写了一部分功能,全部都采用的是系统方法,没用第三方,截图如下: screen1.png screen2.png 个人比较懒,不爱多写文字,直接上代码,哈哈. 视频 系统用AVFoundation与MediaPlayer框架实现播放视频的方案.其中AVFoundation扩展性好,都需自定义功能,而MediaPlayer集成简单,但是样式不可扩展. 1.AVFoundation使用AVPlayer播放视频,它属于view的lay

html(三) -- 常用功能标签

媒体标签 <embed></embed> 属性:        hidden : 设置隐藏插件是否隐藏.        src :用于指定音乐的路径 超链接标签 <a></a> 属性: href  : 用于指定链接的资源.常用协议:file:. mailTo:. http:      target: 设置打开新资源的目标.属性对应的值:_Blank 在独立的窗口上打开新资源   _self 在当前窗口打开新资源. a标签的原理:    1. a标签的href

IOS开发-OC学习-常用功能代码片段整理

IOS开发-OC学习-常用功能代码片段整理 IOS开发中会频繁用到一些代码段,用来实现一些固定的功能.比如在文本框中输入完后要让键盘收回,这个需要用一个简单的让文本框失去第一响应者的身份来完成.或者是在做与URL有关的功能时,需要在Info.plist中添加一段代码进而实现让网址完成从Http到Https的转换,以及其他的一些功能. 在从一个新手到逐渐学会各种功能.代码.控件.方法如何使用的过程中,也在逐渐积累一些知识,但是一次总不会把这些东西都深刻记住并完全理解.所以在这儿记录下这些东西,用来

keepalived高可用的常用功能介绍

Keepalived的作用是检测web服务器的状态,如果有一台web服务器死机,或工作出现故障,Keepalived将检测到,并将有故障的web服务器从系统中剔除,当web服务器工作正常后Keepalived自动将web服务器加入到服务器群中,这些工作全部自动完成,不需要人工干涉,需要人工做的只是修复故障的web服务器.本篇文章会介绍keepalived的安装,配置,还有keepalived的一些脚本,keepalived+nginx高可用实现和keepalived双机互为主从的实现. keep