iis服务器助手广告广告
返回顶部
首页 > 资讯 > 后端开发 > GO >Golang中常用的基本数据类型有哪些
  • 942
分享到

Golang中常用的基本数据类型有哪些

2023-07-02 13:07:57 942人浏览 独家记忆
摘要

这篇文章主要讲解了“golang中常用的基本数据类型有哪些”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“Golang中常用的基本数据类型有哪些”吧!Golang 是一种强类型语言,变量使用时

这篇文章主要讲解了“golang中常用的基本数据类型有哪些”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“Golang中常用的基本数据类型有哪些”吧!

Golang中常用的基本数据类型有哪些

Golang 是一种强类型语言,变量使用时需要进行强制类型定义,一旦某一个变量被定义,如果不经强制转换,那么它永远就是该类型。

变量声明及初始化

Golang 推荐使用驼峰式命名,如 QuoteRuneToASCII 和 parseRequestLine 等。

定义变量的几种形式:

// 第一种,先声明类型,再进行初始化赋值// 如果没有初始化,则变量默认为零值。var a inta = 3// 第二种, 根据赋值自动适配类型b := 3   // 这种写法只能在函数体中出现         // 效果等价于 var b = 3, 但后者可以在函数体之外的地方使用// 第三种,声明类型的同时进行赋值var c int = 3// 第四种,使用 new 创建变量,然后返回变量的地址,类型为 *typep := new(int)*p = 3// 与 python 相同,交换两个变量的值,可以使用 a, b = b, a // 但与 Python 不同的是两个变量的类型必须是相同的。

注意:

  • Golang 中不允许出现未使用的变量,否则会报错 a declared and not used。但是全局变量是允许声明但不使用。

  • Golang 的封装性由变量名第一个字母决定,大写字母开头的变量是可导出的变量,可以在包外使用,小写字母或者下划线开头的变量只能在本包内使用。

  • “:=” 是一个变量声明语句,而 “=‘ 是一个变量赋值操作,一行中简短声明多个变量时,":=" 语句中必须至少要声明一个新的变量。

基本数据类型

获取元素类型

// 方法一,创建 reflect 变量import "reflect"var a inttypeOfA := reflect.TypeOf(a)fmt.Println(typeOfA)// 或者直接 fmt.Println(reflect.TypeOf(a))// 方法二,使用 fmt 查看import "fmt"var a intfmt.Printf("%T", a)   // 注意不能用 Println

整型

数字表示类型的比特长度,不同长度的类型是独立的,混合计算会报错

int 的长度由硬件决定:

数据类型计算机架构比特宽度字节宽度
int32位324
int64位648
uint32位324
uint64位648

也可以指定 int 的固定长度类型:

数据类型比特宽度
int88
int1616
int32 (rune, 可以用来表示一个 Unicode 字符)32
int6464
uint8 (byte)8
uint1616
uint3232
uint6464

浮点类型

Golang 支持两种浮点型数值:float32 和 float64。可以使用 math 包中的常量获取浮点类型的边界值

const (    MaxFloat32             = 3.40282346638528859811704183484516925440e+38  // 2**127 * (2**24 - 1) / 2**23    SmallestNonzeroFloat32 = 1.401298464324817070923729583289916131280e-45 // 1 / 2**(127 - 1 + 23)    MaxFloat64             = 1.797693134862315708145274237317043567981e+308 // 2**1023 * (2**53 - 1) / 2**52    SmallestNonzeroFloat64 = 4.940656458412465441765687928682213723651e-324 // 1 / 2**(1023 - 1 + 52))

注意:浮点类型有精度限制,计算结果不准确,不推荐使用
需要进行浮点计算时,可以使用放大 100 倍的整数计算,计算完成再将结果缩小 100 倍

复数

Golang 自带了复数类型,分别为 complex64, complex128,定义时需要制定实部和虚部,如:

var c1, c2 complex64c1 = 1 + 2ic2 = 2 + 3ifmt.Println(c1 + c2) // out: 3 + 5i

布尔

bool 类型,有 true 和 false 两种类型,要注意的是,和 python 不同,Golang 不会自动对变量识别 true or false,因此 if 1 这种方式是会报错的

错误

error,error 实际上是一种接口类型,后续会单独介绍,可以先参考官网文档 error document

字符

rune, byte 可用于表示单个字符,字符串,rune 数组,byte 数组之间可以相互转换,让我们从源码看看 byte 和 rune 的区别:

// byte is an alias for uint8 and is equivalent to uint8 in all ways. It is// used, by convention, to distinguish byte values from 8-bit unsigned// integer values.type byte = uint8// rune is an alias for int32 and is equivalent to int32 in all ways. It is// used, by convention, to distinguish character values from integer values.type rune = int32

可以看出,byte 为 1 字节的 uint8 数值,rune 为 4 字节的 int32 数值,通过下面的代码,可以看出一个中文字符占了三个字节,在 []byte{} 中长度为 3,string 和 []byte{} 的长度相等,string 实际上就是由 byte 数组实现的。

a := "测试T"aRune := []rune(a)aByte := []byte(a)fmt.Println(a, aRune, aByte)fmt.Println(len(a), len(aRune), len(aByte))  // output:// 测试T [27979 35797 84] [230 181 139 232 175 149 84]// 7 3 7

字符串

string 类型,与 python 不同,go 的字符串只能用 “” 或者 原始字符串引号 ``(重音符号)

// 普通字符串s1 := "hello\nworld"    // 里面的 \n 会被转义为回车// 原始字符串,相当于 python 中在字符串前面加 rs2 := `hello\nworld`    // 所有内容都是字符,不会被转义

字符串是不可修改的,对字符串进行修改操作时,会创建一个新的字符串赋值给当前字符串

s := "hello"s += " world" // 这样不会报错,会把 "hello world" 整个重新分配给 ss[0] = "a"    // 这样写就会报错

因此,如果涉及到大批量的字符串拼接或者修改的操作,效率会很低且耗费资源,推荐使用 bytes 包的 Buffer 来进行操作

import "bytes"bs := bytes.NewBufferString("")bs.WriteString("hello ")bs.WriteString("world")s := bs.String()  // out: hello world

更多内容可查看官网文档 bytes document

字符串常用操作

获取字符串长度

字符串本质上是字符数组,所以可以使用 len(s) 获取长度。
要注意的是对用户名等可能包含中文或其他字符的字符串进行判断时,使用 utf8 长度判断而不是 len() 判断,否则识别出来的长度是不正确的

fmt.Println(len("测试"))// 6fmt.Println(utf8.RuneCountInString("测试"))// 2fmt.Println(utf8.RuneCountInString("混合测试,fight!"))  // 11

数值和字符串的相互转换

  • int 转换为 string

int 转换为 string 不能直接 string(i),这样转完会变成空值

s := strconv.Itoa(i)
  • int64 转换为 string

var i64 int64s := strconv.FORMatInt(i64,10)  // 第二个参数为基数(2~36),如十进制二进制等
  • string 转换为 int 型

使用非数值的字符串转换为数值时会发生错误,比如 “abc” 转为数字或者使用空字符串,因此需要接收 error。

i, err := strconv.Atoi(s)if err != nil {return err}
  • string 转换为 int64

//第二个参数为基数(2~36),//第三个参数位大小表示期望转换的结果类型,其值可以为0, 8, 16, 32和64,//分别对应 int, int8, int16, int32和int64i64, err := strconv.ParseInt(s, 10, 64)

string 和 slice 相互转换

  • slice 转换为 string

import "strings"sli := []string{"111","2222","333","4444"}ss := strings.Join(s,"--")  // 输出为 111--2222--333--4444
  • string 转换为 slice

ss := "a,b,c"sli := strings.Split("a,b,c", ",")

字符串替换

使用 strings 包的 Replace 函数进行字符串替换

// Replace// 如果最后一个参数为正整数,表示将前 n 个 old 替换为 new// 如果最后一个参数为负数,一般为-1,表示全局替换,相当于 ReplaceAllfunc Replace(s, old, new string, n int) string// 例:fmt.Println(strings.Replace("oink oink oink", "oink", "moo", -1))// output: moo moo moofmt.Println(strings.Replace("oink oink oink", "oink", "moo", 2))// output: moo moo oink// ReplaceAllfunc ReplaceAll(s, old, new string) string

指针

如果用“var x int”声明语句声明一个x变量,那么 &x 表达式(取x变量的内存地址)将产生一个指向该整数变量的指针,指针对应的数据类型是 *int ,指针被称之为“指向int类型的指针”。同时 *p 表达式对应p指针指向的变量的值。

x := 1p := &x     // p 为指向 x 的指针   fmt.Println(*p)   // 输出 1*p = 2     // 修改 *p 指向对象的值fmt.Println(x)   // 输出 2

任何类型的指针的零值都是 nil。如果 p != nil 测试为真,那么 p 是指向某个有效变量。指针之间也是可以进行相等测试的,只有当它们指向同一个变量或全部是nil时才相等。

自定义类型

type 类型名字 底层类型

这种操作的意义在于赋予相同基本类型(比如 float64)的变量不同的含义,比如华氏温度和摄氏温度,这两种温度被定义成不同的数据类型,可以避免混用不同的温度单位,产生错误的计算结果。

// Package tempconv performs Celsius and Fahrenheit temperature computations.package tempconvimport "fmt"type Celsius float64 // 摄氏温度type Fahrenheit float64 // 华氏温度const (    AbsoluteZeroC Celsius = -273.15 // 绝对零度    FreezinGC Celsius = 0 // 结冰点温度    BoilingC Celsius = 100 // 沸水温度)func CToF(c Celsius) Fahrenheit {     return Fahrenheit(c*9/5 + 32) }func FToC(f Fahrenheit) Celsius {     return Celsius((f - 32) * 5 / 9) }

常量

go 使用 const 创建常量,它们在编译时被创建,只能是数字、字符串或布尔
值。

// 常量用的是 = 而不是 :=const x = 42

可以使用 iota 生成枚举值,第一个iota 表示为0,当iota 再次在新的一行使用时,它的值累加 1。第一行之外的 = iota 可以省略,只要出现了一次 iota, 当前 const 结构中后面每一行 iota的值加1。

package mainimport "fmt"func main() {    const (        a = iota  // 0        b // 1        c // 2        d = "ha"  // "ha", iota += 1, iota = 3        e // "ha", iota += 1, iota = 4        f = 100   // 100, iota += 1, iota = 5        g // 100, iota += 1, iota = 6        h = iota  // 7        i // 8    )        fmt.Println(a,b,c,d,e,f,g,h,i)    // 结果为 0 1 2 ha ha 100 100 7 8        // 另一个有趣的示例    const (        x = 1 << iota  // 1 << 0        y = 3 << iota  // 3 << 1        z  // 3 << 2        q  // 3 << 3    )        fmt.Println(x,y,z,q)    // 结果为 1 6 12 24}

格式化输出

使用 fmt 包进行格式化输出,可参考链接
格式化输出方式

强制类型转换

type_name(expression)// 如 f := float32(3)i := int64(2)

注意:将长类型强制转换为短类型时会发生截断

感谢各位的阅读,以上就是“Golang中常用的基本数据类型有哪些”的内容了,经过本文的学习后,相信大家对Golang中常用的基本数据类型有哪些这一问题有了更深刻的体会,具体使用情况还需要大家实践验证。这里是编程网,小编将为大家推送更多相关知识点的文章,欢迎关注!

您可能感兴趣的文档:

--结束END--

本文标题: Golang中常用的基本数据类型有哪些

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

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

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

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

下载Word文档
猜你喜欢
  • Golang中常用的基本数据类型有哪些
    这篇文章主要讲解了“Golang中常用的基本数据类型有哪些”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“Golang中常用的基本数据类型有哪些”吧!Golang 是一种强类型语言,变量使用时...
    99+
    2023-07-02
  • java中有哪些基本数据类型
    java的基本数据类型:1.字节型byte;2.短整型short;3.整型int;4.长整型long;5.单精度浮点型float;6.双精度浮点型double;7.布尔型boolean;8.字符型char;java中基本数据类型有:字节型b...
    99+
    2022-10-07
  • Redis中的基本数据类型有哪些
    这篇文章主要讲解了“Redis中的基本数据类型有哪些”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“Redis中的基本数据类型有哪些”吧!Redis数据结构简...
    99+
    2022-10-19
  • JavaScript中的基本数据类型有哪些
    小编给大家分享一下JavaScript中的基本数据类型有哪些,希望大家阅读完这篇文章之后都有所收获,下面让我们一起去探讨吧!一、区分大小写在JavaScript中,所有的一切(变量、函数和操作符)都区分大小...
    99+
    2022-10-19
  • java中的基本数据类型有哪些
    这篇文章主要介绍java中的基本数据类型有哪些,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!基本数据类型1.整数类型:byte、short、int、long注意:1.java各整数类...
    99+
    2022-10-19
  • 聊聊Golang中的几种常用基本数据类型
    本篇文章带大家了解一下golang 的几种常用的基本数据类型,如整型,浮点型,字符,字符串,布尔型等,并介绍了一些常用的类型转换操作。Golang 是一种强类型语言,变量使用时需要进行强制类型定义,一旦某一个变量被定义,如果不经强制转换,那...
    99+
    2022-06-30
    Go Golang
  • php有哪些基本数据类型
    php的基本数据类型有字符串、整数、浮点数、布尔型、数组、对象、NULL、资源和回调函数。详细介绍:1、字符串,用于存储文本数据,字符串是由一系列字符组成的,可以使用单引号或双引号括起来,字符串是PHP中最常用的数据类型之一,可以用于存储文...
    99+
    2023-11-02
    基本数据类型 php
  • Swift基本数据类型有哪些
    这篇文章主要介绍Swift基本数据类型有哪些,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!Swift 基本数据类型1. 整型var intType: Int = 11print...
    99+
    2023-06-25
  • numpy基本数据类型有哪些
    numpy基本数据类型有bool、int、uint、float和complex。详细介绍:1、bool,用于表示逻辑值,值为True或False;2、int,用于表示整数值,可以是有符号或无符号整数;3、uint,用于表示无符号整数值;4、...
    99+
    2023-11-21
    numpy
  • Java基本数据类型有哪些
    本篇内容介绍了“Java基本数据类型有哪些”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!Java 基本数据类型变量就是申请内存来存储值。也就...
    99+
    2023-06-02
  • redis基本数据类型有哪些
    redis基本数据类型有:1、String;2、List;3、Set;4、Hash;5、Sorted Set。详细介绍:1、String,这是Redis最基本的数据类型,可以存储任何类型的数据,包括字符串、数字和二进制数据等;2、List,...
    99+
    2023-12-18
    Redis 基本数据类型
  • SQL基本的数据类型有哪些
    SQL基本的数据类型有以下几种:1. 整数类型:包括INT、SMALLINT、TINYINT、BIGINT等。2. 浮点类型:包括F...
    99+
    2023-10-10
    SQL
  • mysql有哪些基本的数据类型
    本文主要给大家介绍mysql有哪些基本的数据类型,文章内容都是笔者用心摘选和编辑的,具有一定的针对性,对大家的参考意义还是比较大的,下面跟笔者一起了解下mysql有哪些基本的数据类型吧。数值类型整数类型ti...
    99+
    2022-10-18
  • ecmascript的基本数据类型有哪些
    这篇文章主要为大家展示了“ecmascript的基本数据类型有哪些”,内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带领大家一起研究并学习一下“ecmascript的基本数据类型有哪些”这篇文...
    99+
    2022-10-19
  • Rust的基本数据类型有哪些
    这篇文章主要讲解了“Rust的基本数据类型有哪些”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“Rust的基本数据类型有哪些”吧!Rust 和 Go 一样,都是静态类型语言,这表示每个变量的类...
    99+
    2023-06-15
  • Python中的基本数据类型有哪些呢
    今天就跟大家聊聊有关Python中的基本数据类型有哪些呢,可能很多人都不太了解,为了让大家更加了解,小编给大家总结了以下内容,希望大家根据这篇文章可以有所收获。基本数字类型首先我们开始认识一下基本的数字类型吧:整数类型浮点数类型复数类型整数...
    99+
    2023-06-03
  • javascript都有哪些基本数据类型
    本篇内容主要讲解“javascript都有哪些基本数据类型”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“javascript都有哪些基本数据类型”吧! ...
    99+
    2022-10-19
  • VB.NET基本数据类型都有哪些
    VB.NET基本数据类型都有哪些,相信很多没有经验的人对此束手无策,为此本文总结了问题出现的原因和解决方法,通过这篇文章希望你能解决这个问题。VB.NET基本数据类型的重要方法和属性举例 Dim i As In...
    99+
    2023-06-17
  • JAVA基本数据类型有哪些呢
    本篇文章给大家分享的是有关JAVA基本数据类型有哪些呢,小编觉得挺实用的,因此分享给大家学习,希望大家阅读完这篇文章后可以有所收获,话不多说,跟着小编一起来看看吧。关键字(掌握)        (1)...
    99+
    2023-06-02
  • oracle中哪些基本数据类型
    本篇文章给大家分享的是有关oracle中哪些基本数据类型,小编觉得挺实用的,因此分享给大家学习,希望大家阅读完这篇文章后可以有所收获,话不多说,跟着小编一起来看看吧。Char:定长字符串,如果字符没有定义的...
    99+
    2022-10-18
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作