Golang

关注公众号 jb51net

关闭
首页 > 脚本专栏 > Golang > Go 数据类型 数组

浅析Go语言的数据类型及数组

作者:掘金小逆

Golang是一种静态强类型、编译型语言。Go 语言语法与 C 相近,但功能上有:内存安全,GC(垃圾回收),结构形态及 CSP-style 并发计算。本文主要和大家聊聊Go语言的数据类型及数组,希望对大家有所帮助

Go语言身世简介

Go(又称 Golang)是 Google 的 Robert Griesemer,Rob Pike 及 Ken Thompson 开发的一种静态强类型、编译型语言。Go 语言语法与 C 相近,但功能上有:内存安全,GC(垃圾回收),结构形态及 CSP-style 并发计算。

Go语言的第一个程序

我们使用的IDE工具为GoLand(没错,又是Jetbrains家的产物,我是重度爱好者),在写Go程序之前,我们首先得配置好Go语言的开发环境,这里就不做赘述,相信凭借各位的能力,一定能够没问题

package main
​
import "fmt"
​
func main() {
    fmt.Println(123456)
}

这里是Go语言的第一个程序,我们把这个程序拆分下来细看一下

首先是package,相信有语言基础的同学都能够明白这个是的意思,我们导入的是main的包,读者可以理解为一种约定俗成,没有main的话,你的Go程序会出现奇奇怪怪的问题

其次,是import,这里指的是导入的意思,我们导入了fmt这个库,经过求证,fmt该库是用来格式化输入输出,也就是我们所说的java中的System.out.println();或者是JavaScript中的console.log(),这么一说,相信大家也不陌生

Go语言的数据类型

在介绍数据类型之前,想为读者介绍的是,Go语言是没有以分号结尾的这个习惯,而且是先声明var类型(一般情况下都是var类型的数据),紧接着声明变量名数据类型

var name string
var age int
var sex bool

同时我们还加入了一种懒人写法,想到这里大家可能就想到了结构体,将同种声明含义的变量放到一个大括号里面,没错,在Go语言中也能过实现这一操作

var (
        name string
        age int
        sex bool
        pwd float32
    )

这么一看,似乎下面的方法要高效的多

Go语言匿名变量

很多小伙伴第一次看到这个匿名变量,有点发懵。其实可以这么理解,匿名变量顾名思义,就是不想让人知道,在Go语言中我们可以用_来代替,要注意的是:匿名变量不占用命名空间,不会分配内存

func foo() (int, string) {
    return 10, "Q1mi"
}
func main() {
    x, _ := foo()
    _, y := foo()
    fmt.Println("x=", x)
    fmt.Println("y=", y)
}

在这个代码块中我们可以看到,我们定义了一个foo方法用于保存相关参数,第一个参数类型为int,第二个参数类型为string;紧接着我们在main方法中,使用匿名变量去调用foo方法,为了体现差异,我们进行二次方法调用,最后输出的结果显而易见(写上方的demo是为了验证匿名变量的使用)

Go语言的数据类型

iotago语言的常量计数器,它只能在常量的表达式中使用(作者觉得这一点非常的人性化,因为以往在java中,这一功能需要声明一个变量+for循环才能实现,go语言yyds!

贴一张从Google找的图片,请读者自行查阅数据类型及其所对应的范围

类型长度(字节)默认值说明
bool1false
byte10uint8
rune40Unicode Code Point, int32
int, uint4或8032 或 64 位
int8, uint810-128 ~ 127, 0 ~ 255,byte是uint8 的别名
int16, uint1620-32768 ~ 32767, 0 ~ 65535
int32, uint3240-21亿~ 21亿, 0 ~ 42亿,rune是int32 的别名
int64, uint6480
float3240.0
float6480.0
complex648
complex12816
uintptr4或8以存储指针的 uint32 或 uint64 整数
array值类型
struct值类型
string“”UTF-8 字符串
slicenil引用类型
mapnil引用类型
channelnil引用类型
interfacenil接口
functionnil函数

至于读者想问的字符串转化、转义字符这些问题,作者并没有给出详细的介绍,因为这些相关介绍读者都是能够直接在网上查阅到的,在此不作赘述

Go语言中的数组

今天作者花了大量的时间来学习Go语言,其中有一半的时间都花在了数组上面

首先我们来看Go语言文档中对于数组的定义

1. 数组:是同一种数据类型的固定长度的序列。

2. 数组定义:var a [len]int,比如:var a [5]int,数组长度必须是常量,且是类型的组成部分。一旦定义,长度不能变。

3. 长度是数组类型的一部分,因此,var a[5] int和var a[10]int是不同的类型。

4. 数组可以通过下标进行访问,下标是从0开始,最后一个元素下标是:len-1

很多读者反应:你给我们看这些也没用啊,没有实际的例子我们看不懂!!!

一维数组

func main() {
    a := [3]int{1, 2}
    b := [...]int{1, 2, 3, 4}
    c := [5]int{2: 100, 4: 100}
    d := [2]struct {
        name string
        age  uint8
    }{
        {"user1", 10},
        {"user2", 20},
    }
    fmt.Println(a, b, c, d)
}

对于上方代码,我们做出如下的详细解析

这里就有小伙伴要问了,能不能使用...来代替结构体前面的数字,作者给出的答复是:可以但没必要;因为你下面的括号里面要声明具体的数据类型所对应的值,你既然能够知道具体有几个数来对应数据类型,又何必使用...来代替呢?

二维数组

func main() {
    a := [2][3]int{{1, 2, 3}, {4, 5, 6}}
    b := [...][2]int{{1, 1}, {2, 2}, {3, 3}}
    fmt.Println(arr0, arr1)
    fmt.Println(a, b)
}

对于上方代码,我们做出如下的详细解析

到此这篇关于浅析Go语言的数据类型及数组的文章就介绍到这了,更多相关Go 数据类型 数组内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

您可能感兴趣的文章:
阅读全文