Golang变量学习总结

栏目: Go · 发布时间: 6年前

Golang里面变量总的来说分四大类型

1. bool,string

bool :指布尔类型,也就是 true , false
string : 字符串类型

2. (u)int, (u)int8, (u)int16, (u)int32, (u)int64, uintptr

intuint , 其中有 u 和没有 u 指的是 unsigned 指的是有无符号,也就是有无正负号, int 类型会根据你操作系统的字数来判断是 32位 还是 64位 ,如果你的操作系统是64位的,那么在定义 int 的时候就是 64位 ,也就是你定义 int 的时候编译器会根据你的操作系统来给这个变量自动分配多大的空间大小。

(u)int8, (u)int16, (u)int32, (u)int64 这些后面的 8, 16, 32, 64 这些是指你定义的变量的大小, 8 就是8位,这里的8位指的是二进制中的8位,同理 16, 32, 64 也是一样的道理,位数越多,变量能便是的范围越大。

uintptr 是指针类型,Go语言也是具有指针这一特性的,但是并没有像 c语言 使用那么的复杂。后会深究这个类型。

3. byte, rune

byte 类型你可以看作是 uint8 的一个别名, byteuint8 表示的范围是一样的,也可以叫做字节类型, byte ,最大能表示的范围也就是一个字节的空间大小。

rune 是一个新的数据类型,因为你在其他的语言中并没有见过这种类型,相对来说也比较陌生,但是我举个例子你就能完全明白了,在 c语言 中,有 char 这个类型,是用来便是一个 ASCII 字符的,但是是随着编程知识的普及,很多国家的人们都在学习编程,编写程序,但是语言就成为来一大障碍,仅仅用 ASCII 编码是远远不能满足人们的需求的,故 Go 语言就是用了 Unicode 编码, rune 也就相当于是在 Unicode 编码下的字符类型。

rune 的长度是32位的,我们都知道 unicode 是2字节的,但是互联网中很多时候都是使用的 UTF-8 编码,所以我们 rune 类型采用了4字节的存储空间,如果后期Go会升级成 UTF-8 编码提供了可能。

c语言 中,我们都知道 char 是可以和整型混用的,举个例子: printf("%c",97); 输出的是小写字母 a 。那么 rune 类型也是可以类似的使用的。

4. float32, float64, complex64, complex128

float32float64 都是浮点数类型,float32大约可以提供小数点后6位的精度,作为对比,float64可以提供小数点后15位的精度。如果想探究浮点数在计算机中的存储形式可以百度一下。

complex64complex128 就是用来表示我们数学中的 复数复数 实部和虚部, complex64 的实部和虚部都是32位float, complex128 的实部和虚部都是64位float。

Golang的变量定义方式

package main

import "fmt"

var bb uint8 = 12
var xx = 12
var (
    cc  = 12
    q, w = 12, 12
    b  string = "false"
)
func variableZoreValue() {
    var a int
    var b string
    fmt.Println(a, b)
}

func variableInitialValue() {
    var a int = 1
    n, x := 1, 2
    var s string = "abc"
    fmt.Println(a, s)
    fmt.Println(n, x)
}
func main() {
    variableZoreValue()
    variableInitialValue()
    fmt.Println(bb, xx, cc, q, w, b)
}

我们定义的变量可以在函数内也可以在函数外,在函数外部定义的变量并不是全局变量,应该是叫做包内变量,因为是在一个包下面。

定义一个变量:

var a int 这种定义方式指明了变量的类型,没有初始化,但是我们的编译器会帮你初始化为0

var a int = 16 这种方式是相比上一种方式多了初始化。

var a = 12 这种方式没有指定类型,但是初始化了一个值 12 ,这种方式编译器会自动的识别是那种类型,就像 python 里面一样,不需要指定类型。

a := 12 这种方式和上一种类似,但是更加方便,不用写前面的 var 了。

定义多个变量

var bb,cc uint8 = 12, 13 这种方式可以定义多个相同类型的变量

var z, str = 14, "string" 这种方式比上一种方式更好好用,因为这样可以同时定义多个不同类型的数据了。

n, x := 1, 2 这种方式比上一种方式更加方便,不仅可以同时定义多个不同类型的变量同时不用写 var 关键字了。

complex 复数类型

package main

import (
    "fmt"
    "math/cmplx"
    "math"
)

func complexVariable() {
    c := 3 + 4i
    fmt.Println("|3 + 4i|=",cmplx.Abs(c))
    fmt.Println(cmplx.Pow(math.E, 1i * math.Pi) + 1)
    fmt.Println(cmplx.Exp(1i * math.Pi) + 1)
    fmt.Printf("%0.3f", cmplx.Exp(1i * math.Pi) + 1)
}
func main() {
    complexVariable()
}

c := 3 + 4i ,我们在定义复数的时候应该是这种形式而不是: c := 3 + 4*i ,如果是这样的形式,则编译器会把这个 i 当作是变量处理,而不是复数标志

cmplx.Abs(c) ,取复数的绝对值

cmplx.Pow(math.E, 1i * math.Pi) + 1 ,计算 e^(iπ)+1 , e 是数学中的自然数。

cmplx.Exp(1i * math.Pi) + 1 ,另外一种计算方式

fmt.Printf("%0.3f", cmplx.Exp(1i * math.Pi) + 1) 格式化输出复数。

常量的定义

package main

import (
    "fmt"
    "math"
)
c consts() {
    var filename = "1.txt"
    const a, b  = 3, 4
    var c int = 0
    c = int(math.Sqrt((a*a + b*b)))
    fmt.Println(filename, c)
}
func main() {
    consts()
}

Go语言中的常量是和 c语言 中的宏常量是一样的,本着替换的原则,所以如果在定义常量的时候编译器不用指定类型,所以在 c = int(math.Sqrt((a*a + b*b))) 中就不用把 (a*a + b*b) 强转为float64。

在定义变量的规则中对常量也是适用的,我就不多讲了,自己去实践下就知道了。

定义枚举类型

在Go语言中并没有针对枚举类型的关键字的,那Go语言是怎么定义枚举类型的呢?

package main

import "fmt"

func enums() {
    const(
        c = 0
        cpp = 1
        java = 2
        python = 3
    )
    fmt.Println(c, cpp, java, python)
}
func main() {
    enums()
}

这样我们便定义了一个枚举同时还可以使用 iota 关键字,表示这个枚举类型是递增的

package main

import "fmt"

func enums() {
    const(
        c = iota
        cpp
        java
        python
    )
    fmt.Println(c, cpp, java, python)
}
func main() {
    enums()
}

更高级的定义方法:

// 定义b kb mb gb tb pb
const(
    b = 1 << (10 * iota)
    kb
    mb
    gb
    tb
    pb
)

iot 想得到与从0开始的给自增值,你要我们写写出表达式再复杂的枚举类型都可以使用这样的方式来定义常量。

总结

在Go语言的变量常量定义中,变量的类型标识是写的变量名的后边,编译器可以自动推测你需要定义变量的类型的,前提是你要初始化变量,没有 char 只有 rune ,原生态的支持复数这种类型。


以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持 码农网

查看所有标签

猜你喜欢:

本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们

算法引论

算法引论

[美]Udi Manber / 黄林鹏、谢瑾奎、陆首博、等 / 电子工业出版社 / 2005-9-1 / 35.00元

本书是国际算法大师乌迪·曼博(Udi Manber)博士撰写的一本享有盛誉的著作。全书共分12章:第1章到第4章为介绍性内容,涉及数学归纳法、算法分析、数据结构等内容;第5章提出了与归纳证明进行类比的算法设计思想;第6章到第9章分别给出了4个领域的算法,如序列和集合的算法、图算法、几何算法、代数和数值算法;第10章涉及归约,也是第11章的序幕,而后者涉及NP完全问题;第12章则介绍了并行算法;最后......一起来看看 《算法引论》 这本书的介绍吧!

图片转BASE64编码
图片转BASE64编码

在线图片转Base64编码工具

MD5 加密
MD5 加密

MD5 加密工具

XML、JSON 在线转换
XML、JSON 在线转换

在线XML、JSON转换工具