广告
返回顶部
首页 > 资讯 > 后端开发 > GO >Go语言中常用的基础方法总结
  • 614
分享到

Go语言中常用的基础方法总结

2024-04-02 19:04:59 614人浏览 薄情痞子
摘要

目录字符串1.使用正则表达式验证字符串2.字符串和数字的相互转换3.格式化字符串时间1.字符串和时间的相互转换2.时间的比较切片映射接口延迟函数指针结构体并发字符串 1.使用正则表达

字符串

1.使用正则表达式验证字符串

使用regexp包中的Match函数:

func Match(pattern string, b []byte) (matched bool, err error)

Match函数返回一个表示在b中是否包含和pattern匹配的项的布尔值和一个错误。

package main

import (
    "fmt"
    "regexp"
)

func main() {
    // 正则表达式模式"^[\u4e00-\u9fa5]+$"表示从头到尾包含的内容是一个或多个中文字符串
    // 从\u4e00到\u9fa5是中文的Unicode编码,使用双引号,对应的编码会被解析为相应的中文
    matched, err := regexp.Match("^[\u4e00-\u9fa5]+$", []byte(`匹配中文字符`))

    // 不能使用反引号,因为反引号引用的是原生的字符,而正则表达式本身没有\u这种写法(有\s等写法,详情可以专门看正则表达式了解)
    // matched, err = regexp.Match(`^[\u4e00-\u9fa5]+$`, []byte(`匹配中文字符`))
    if err != nil {
        fmt.Println("正则表达式匹配出错1", err)
    } else {
        fmt.Println("正则表达式匹配的结果1:", matched)
    }

    // 正则表达式模式匹配英文大小写字母和下划线
    matched, err = regexp.Match(`^[a-zA-Z_]+$`, []byte(`AAZ123`))

    if err != nil {
        fmt.Println("正则表达式匹配出错2", err)
    } else {
        fmt.Println("正则表达式匹配的结果2:", matched)
    }

    matched, err = regexp.Match(`^[a-zA-Z_]+$`, []byte(`abc_DEF`))

    if err != nil {
        fmt.Println("正则表达式匹配出错3", err)
    } else {
        fmt.Println("正则表达式匹配的结果3:", matched)
    }
}

Go中,单引号 '' 用来引用单个字符,双引号 "" 用来引用可解析的字符,反引号 `` 用来引用原生的字符,比如"\n"会被解析为一个换行符,但是反引号引用的\n就是一个反斜杠和字符n。

2.字符串和数字的相互转换

使用strconv包中的函数。

(1)string类型int类型的相互转换

package main

import (
    "fmt"
    "strconv"
)

func main() {
    // 字符串转整型
    aStr := "123"
    if i, err := strconv.Atoi(aStr); err == nil {
        fmt.Println("字符串转换为整型后的值", i)
    }

    // 整型转字符串
    aInt := -123
    anotherStr := strconv.Itoa(aInt)
    fmt.Println("整型转字符串之后的值", anotherStr)
}

Atoi等同于ParseInt(s, 10, 0),将字符串转换为基数为10进制的int类型。

func ParseInt(s string, base int, bitSize int) (i int64, err error)

将一个字符串解析为整数,base是给定的基数(0、2到36),bitSize是位的大小(0到64),返回的值是和bitSize以及符号匹配的最大的整数。

当基数(base参数)为0的时候,函数会根据字符串的前缀来判断使用的是几进制,"0b"前缀对应2进制,"0" 或者"0o"前缀对应8进制, "0x"前缀对应16 进制,其他前缀对应10进制。

位的大小(bitSize参数)0,8,16,32,和 64 对应 int,int8,nt16,int32,和int64。

Itoa等同于FORMatInt(int64(i), 10),将整型按照10进制转换为字符串。

func FormatInt(i int64, base int) string

基数大于等于2小于等于23,小写的字母'a''z'表示大于等于10的位的值(比如对于16进制来说,'a'表示10,'f'表示15)。

(2)string类型和bool类型,float类型,uint类型的相互转换

浮点数转字符串:

func FormatFloat(f float64, fmt byte, prec, bitSize int) string

fmt是格式(format),有以下这些格式:

  • 'b'表示二进制指数,-DDDdp±ddd
  • 'e'表示十进制指数,-d.dddde±dd
  • 'E'表示十进制指数,-d.ddddE±dd;(大写的'E'和小写的'e'都表示的是是十进制指数)
  • 'f'表示没有指数,-ddd.dddd
  • 'g',对于大指数来说,'g'表示'e',否则'g'表示f
  • 'G',对于大指数来说,'G'表示'e',否则'G'表示f
  • 'x'表示十六进制分数和二进制指数,-0xd.ddddp±ddd
  • 'X'表示十六进制分数和二进制指数,-0Xd.ddddP±ddd

prec是精度:对于'e', 'E','f', 'x', 和 'X',它是小数点后的位数。对于'g' 和 'G',是最大的有效数字的位数(删除了末尾的0)。-1表示使用必须的位数的最小数字。

bitSize是位的大小:32 表示 float32, 64 表示 float64

    // 整型转字符串
    aInt := -123
    anotherStr := strconv.Itoa(aInt)
    fmt.Println("整型转字符串之后的值", anotherStr)

    // 字符串转bool值
    aBool, _ := strconv.ParseBool("false")
    // 布尔值转字符串
    strA := strconv.FormatBool(false)

    // 字符串转浮点数,ParseFloat的第2个参数是位的大小,32 表示 float32,64 表示 float64
    aFloat, _ := strconv.ParseFloat("1.23", 64)
    // 浮点数转字符串
    // 'E'表示十进制指数,-1表示必须的最小位数,64表示float64
    strB := strconv.FormatFloat(1.23, 'E', -1, 64)

    // 字符串转无符号整型
    aUint, _ := strconv.ParseUint("123", 10, 64)
    //无符号整型转字符串,将10进制表示的123转换为字符串
    strC := strconv.FormatUint(123, 10)

    fmt.Println(aBool, strA, aFloat, strB, aUint, strC)

3.格式化字符串

使用fmt包中的函数打印指定格式的字符串到标准输出中,以及将字符串整理为指定格式。

package main

import (
    "fmt"
)

func main() {
    fmt.Printf("%6.2f", 12.3) // 打印出的内容是12.30
    s := fmt.Sprintf("%6.2f", 12.3)
    fmt.Println(s) // 打印出的内容是12.30
}

Printf根据指定的格式打印字符串到标准输出中。Printf后面不会自带换行符,如果需要换行符的时候,手动在字符串末尾加上。

func Printf(format string, a ...any) (n int, err error)

Println打印内容到标准输出中,参数之间会加上空格,末尾会加上换行符。

func Println(a ...any) (n int, err error)

Sprintf根据指定的格式返回字符串。

func Sprintf(format string, a ...any) string

在format中的一些特殊符号的含义:

  • %v  值的默认格式,当打印结构体的时候,使用加号标识 (%+v)会将字段名称也打印出
  • %#v go语法的值的表示
  • %T  go语法的值的类型的表示
  • %%  表示一个百分号符号
  • %t  单词true或者false
  • %b  二进制的数
  • %c  打印Unicode代码点对应的字符
  • %d  打印10进制数
  • %o  打印8进制数
  • %s    字符串或者切片未解析的字节

还有更多符号的含义,查看fmt包了解更多。

    type A struct {
        A1 string
    }
    a := A{
        A1: "aaa",
    }
    fmt.Printf("%v\n", a)  // 打印内容 {aaa}
    fmt.Printf("%+v\n", a) // 打印内容 {A1:aaa}
    fmt.Printf("%#v\n", a) // 打印内容 main.A{A1:"aaa"}
    fmt.Printf("%T\n", a)  // 打印内容 main.A

    fmt.Printf("%t\n", true)                        // 打印内容 true
    fmt.Printf("%b\n", 8)                           // 打印内容 1000
    fmt.Printf("%c, %c, %c, %c\n", 65, 90, 97, 122) // 打印内容 A, Z, a, z
    fmt.Printf("%d\n", 123)                         // 打印内容 123
    fmt.Printf("%o\n", 123)                         // 打印内容 173

时间

使用time包中的函数。

1.字符串和时间的相互转换

package main

import (
    "fmt"
    "time"
)

func main() {
    // 时间转字符串
    now := time.Now()
    strA := now.Format("2006-01-02 15:04:05")
    fmt.Println(strA)

    // 字符串转时间
    timeA, _ := time.Parse("2006-01-02 15:04:05", strA)
    fmt.Println(timeA) // 打印的值是 2022-09-25 17:58:26 +0000 UTC,UTC是世界标准时间

    local, _ := time.LoadLocation("Local") // 本地时区
    timeB, _ := time.ParseInLocation("2006-01-02 15:04:05", strA, local)
    fmt.Println(timeB) // 打印的值是 2022-09-25 17:58:26 +0800 CST,CST是中国标准时间(北京时间),比UTC晚8个小时
}

2.时间的比较

    // 时间的加减
    tenMinute, _ := time.ParseDuration("-10m") // 有效的时间单位是 "ns", "us" (或者 "µs"), "ms", "s", "m", "h"。
    timeC := timeA.Add(tenMinute)              // 拿到距离timeA 10分钟之前的时间
    duration := timeC.Sub(timeA)

    // 时间的比较
    fmt.Println(duration.Minutes())  // 打印的值为-10
    fmt.Println(timeA.Equal(timeB))  // 判断 timeA 是否等于 timeB,值为false,timeA和timeB因为时区不同,所以这两个时间不相等
    fmt.Println(timeC.Before(timeA)) // 判断 timeA 是否小于 timeB,值为true
    fmt.Println(timeA.After(timeB))  // 判断 timeA 是否大于 timeB,值为true
    fmt.Println(timeB.After(timeA))  // 判断 timeA 是否大于 timeB,值为false

切片

    slice1 := []int{1, 2, 3}
    fmt.Println(slice1) // [1 2 3]

    slice2 := make([]int, 3) // 这里的3是数组的长度,是切片的初始长度
    fmt.Println(slice2)      // [0 0 0]

    // 向切片中添加元素
    slice2 = append(slice2, 1)
    fmt.Println(slice2) // [0 0 0 1]
    slice3 := make([]int, 2)
    slice3 = append(slice3, []int{2, 3, 4}...)
    fmt.Println(slice3) // [0 0 2 3 4]

    // 获取切片的部分内容
    fmt.Println(slice1[:])  // [1 2 3],slice[low:high],省略low之后low的默认值是0,省略high之后,high的默认值是切片的长度
    fmt.Println(slice1[2:]) // [3]
    fmt.Println(slice1[:1]) // [1]

    // 将slice1中的元素复制到slice2中
    copy(slice2, slice1)
    fmt.Println(slice2) // [1 2 3 1]

    // 遍历切片
    for index, value := range slice2 {
        fmt.Printf("索引%d,值%d\n", index, value)
    }

    var slice4 []string
    fmt.Println(slice4 == nil) // true,声明的切片的默认值是nil
    fmt.Println(len(slice4))   // 0,空的切片的默认长度是0

映射

    map1 := map[string]string{
        "a_key": "a_value",
        "b_key": "b_value"}
    fmt.Println(map1) // map[a_key:a_value b_key:b_value]

    map2 := make(map[int]string)
    fmt.Println(map2) // map[]

    map3 := map[string]interface{}{
        "a": []int{1, 2},
        "b": 1.23,
    }
    fmt.Println(map3) // map[a:[1 2] b:1.23]

    // 从映射中获取对应键的值
    fmt.Println(map3["a"]) // [1 2]

    // 修改映射中对应键的值
    map3["a"] = 1
    fmt.Println(map3) // map[a:1 b:1.23]

    // 遍历映射
    for key, value := range map3 {
        fmt.Printf("键:%v, 值:%v\n", key, value)
    }

    var map4 map[string]int
    fmt.Println(map4 == nil) // true,声明的map的默认值是nil
    fmt.Println(len(map4))   // 0,空map的长度为0

接口

接口类型定义了类型的集合。一个接口对象可以存储一个值,这个值是接口的类型集合中的任意一个类型。

一个类型通过实现接口的方法的方式来实现接口。

可以通过A Tour of Go的接口部分进行练习。

package main

import (
    "fmt"
)

func main() {
    aPerson := Person{
        Name: "沫沫",
    }
    fmt.Println(aPerson.Dream("梦想成为闲人")) // 沫沫梦想成为闲人

}

type Behavior interface {
    Dream(content string) string
}
type Person struct {
    Name string
}

// 类型Person实现了接口Behavior
func (t Person) Dream(content string) string {
    return fmt.Sprintf("%s%s", t.Name, content)
}

空接口interface{}(别名为any)表示任意类型,对于未知类型的值可以使用空接口。

类型断言语句断言接口类型包含指定的类型。

    var a interface{}
    a = 1
    a = "2"
    fmt.Println(a) // 2

    // 类型断言
    var s string
    s = a.(string)
    s, ok := a.(string)
    fmt.Println(s, ok) // 2, true
    if !ok {
        fmt.Println("a的值的类型不是string")
    }

延迟函数

延迟函数会在函数返回之前被调用。

package main

import (
    "fmt"
)

func main() {
    defer func() {
        fmt.Println("a")
    }()

    defer func() {
        fmt.Println("b")
    }()

    defer func() {
        fmt.Println("c")
    }()

    fmt.Println("要执行的逻辑1")
    fmt.Println("要执行的逻辑2")
}

打印的内容:

要执行的逻辑1
要执行的逻辑2
c
b
a

指针

Go语言中的指针

结构体

Go语言中的结构体

并发

Go语言中的goroutine和通道

以上就是Go语言中常用的基础方法总结的详细内容,更多关于Go语言常用方法的资料请关注编程网其它相关文章!

您可能感兴趣的文档:

--结束END--

本文标题: Go语言中常用的基础方法总结

本文链接: https://www.lsjlt.com/news/121236.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • Go语言中常用的基础方法总结
    目录字符串1.使用正则表达式验证字符串2.字符串和数字的相互转换3.格式化字符串时间1.字符串和时间的相互转换2.时间的比较切片映射接口延迟函数指针结构体并发字符串 1.使用正则表达...
    99+
    2022-11-11
  • Go语言基础语法之结构体及方法详解
    结构体类型可以用来保存不同类型的数据,也可以通过方法的形式来声明它的行为。本文将介绍go语言中的结构体和方法,以及“继承”的实现方法。 结构体类型 结构体类型(struct)在go语...
    99+
    2022-11-12
  • Go语言实现操作MySQL的基础知识总结
    目录前言下载依赖使用 mysql 驱动SetMaxOpenConnsSetMaxIdleConns操作前言 MySQL 是目前开发中最常见的关系型数据库,也是程序员打交道最多的数据库。 使用 Go 语言进行操控数据库需要...
    99+
    2022-09-01
  • Go的基本语法总结
    这篇文章主要讲解了“Go的基本语法总结”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“Go的基本语法总结”吧!目录 变量与常量Golang 中的标识符与关键字Golang 中的变量Golang...
    99+
    2023-06-20
  • Go语言中调用外部命令的方法总结
    目录引子运行命令显示输出显示到标准输出输出到文件发送到网络保存到内存对象中输出到多个目的地运行命令,获取输出分别获取标准输出和标准错误标准输入环境变量检查命令是否存在封装总结引子 在...
    99+
    2022-11-11
  • 怎么使用Go语言基础结构体
    本篇内容主要讲解“怎么使用Go语言基础结构体”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“怎么使用Go语言基础结构体”吧!概述结构体是由一系列具有相同类型或不同类型的数据构成的数据集合语法定义结...
    99+
    2023-06-25
  • Go语言基础结构体用法及示例详解
    目录概述语法结构体定义的三种形式第一种【基本的实例化】第二种【指针类型的结构体】第三种【取结构体的地址实例化,通过&的操作】初始化结构体键值对初始化结构体值列表填充结构体匿名...
    99+
    2022-11-12
  • [基础学习]MySQL常用语句命令总结
      前言 相信平时大家在开发时都会使用MySQL数据库,它是目前比较火的一款数据库工具,对于大多数企业的业务来说,MySQL可以很完美地支持了。 很多时候我们都是借助mysql可视化工具操作mysql,虽然说是比较方便,但是记住一些常用的...
    99+
    2023-01-31
    语句 命令 常用
  • Go语言基础类型及常量用法示例详解
    目录基础类型概述按类别有以下几种数据类型数值类型派生类型变量概述单个变量声明多个变量声明基础类型 概述 在 Go 编程语言中,数据类型用于声明函数和变量。数据类型的出现时为了把数据...
    99+
    2022-11-12
  • Go语言基础类型及常量用法示例分析
    本篇内容介绍了“Go语言基础类型及常量用法示例分析”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!概述在 Go 编程语言中,数据类型用于声明函...
    99+
    2023-06-25
  • linux中$符号的基础用法总结
    linux使用版本: CentOS 7 [root@azfdbdfsdf230lqdg1ba91 ~]# cat /etc/redhat-release CentOS Linux release 7.4.1708 ...
    99+
    2022-06-04
    Linux特殊符号 linux $符号 linux特殊字符
  • Go语言基础go接口用法示例详解
    目录概述语法定义接口实现接口空接口接口的组合总结 概述 Go 语言中的接口就是方法签名的集合,接口只有声明,没有实现,不包含变量。 语法 定义接口 type [接口名] inte...
    99+
    2022-11-12
  • Go语言实现请求超时处理的方法总结
    目录1. 简介2. 问题引入3. timer的实现方案3.1 timer的基本介绍3.2 timer实现超时控制3.3 对问题的解决4.timetCtx的实现方案4.1 timerC...
    99+
    2023-05-18
    Go语言请求超时处理方法 Go语言 超时处理方法 Go语言 超时处理
  • Go语言基础教程:四则运算的实现方法
    Go语言基础教程:四则运算的实现方法,需要具体代码示例引言:Go语言作为一门开发云原生应用的编程语言,受到越来越多开发者的青睐。作为学习Go语言的初学者,掌握基本的运算操作是必不可少的。本文将介绍Go语言下实现四则运算的基本方法,并提供具体...
    99+
    2023-12-23
    Go语言 基础教程 四则运算
  • Go语言基础map用法及示例详解
    目录概述语法声明和初始化读取删除遍历总结示例 概述 map是基于key-value键值对的无序的集合 Go语言中的map是引用类型 必须初始化才能使用。 ...
    99+
    2022-11-12
  • Go语言基础go build命令用法及示例详解
    目录go build一个Go项目在GOPATH下,会有如下三个目录 使用:注意: go build 1. 用于测试编译多个包或一个main包 2. build命令编译包丢弃非main...
    99+
    2022-11-12
  • Go语言基础go doc命令用法及示例详解
    目录go doc一、使用go doc命令在终端查看go doc packagego doc package/subpackagego doc package function二、使用...
    99+
    2022-11-12
  • mysqlcheck的常用语法总结
    本篇内容介绍了“mysqlcheck的常用语法总结”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成! ...
    99+
    2022-10-18
  • PHP的常用语法总结
    这篇文章主要介绍“PHP的常用语法总结”,在日常操作中,相信很多人在PHP的常用语法总结问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”PHP的常用语法总结”的疑惑有所帮助!接下来,请跟着小编一起来学习吧!PH...
    99+
    2023-06-17
  • R语言中data.frame的常用操作总结
    前言:近段时间学习R语言用到最多的数据格式就是data.frame,现对data.frame常用操作进行总结,其中函数大部分来自dplyr包,该包由Hadley Wickham所作,...
    99+
    2022-11-12
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作