2 golang中变量的定义

个人理解的是,go里面的变量和const修饰的常量其实是不同的概念,做了一个彻底的区分。

对变量的定义:引入了关键字var对变量进行声明

var a int
var b string
var c float64
var e [4] int // 数组
var f [] int  //数组切片
var f * int    //正确
var v1 int = 5 //正确
var v2 = 5     //正确,编译器自动推导出V2类型
v3 := 5        //正确,编译器自动推导出V3的类型

多重赋值

Go语言提供了大多数的语言所不支持的多重赋值,使得变量的的变换变得十分简单,多重赋值的一个例子,就是不要像c语言一样使用中间的变量

i := 2
j := 3
i , j = i , i //交换i与j的值

变量的类型

获取变量的大小

//使用unsafe
package main

import (
  "fmt"
  "unsafe"
)

func main(){
    var a int64 = 10000
    fmt.Println("length of a : " , unsafe.Sizeof(a))
}

布尔类型

Go语言提供内置的布尔值true和false,Go语言支持标准的逻辑比较和比较操作,但是操作结果都是布尔值。在go里面是不允许将其他的类型转换为bool类型的,比如int类型。必须使用false以及true。

var f * int    //正确
var v1 int = 5 //正确
var v2 = 5     //正确,编译器自动推导出V2类型
v3 := 5        //正确,编译器自动推导出V3的类型

字符串

go的字符串和c里面的不同,使用的是UTF-8的一个序列,不再是ASCII,因为UTF-8的编码不定长比较灵活,所以一个字符串的大小也可能是1到4个字节。Go 这样做的好处是不仅减少了内存和硬盘空间占用,同时也不用像其它语言那样需要对使用 UTF-8 字符集的文本进行编码和解码。

t1 := "\"hello world\""
t2 := "\u5b32\u8FCE"
t2 := `"hello"`
转义字符 含义
\\ 表示反斜线
' 单引号
" 双引号
\n 换行符
\uhhhh 4 个 16 进制数字给定的 Unicode 字符

在 Go 语言中单个字符可以使用单引号( ' )来创建。之前的课程中,我们有学习过rune类型,它等同于int32,在 Go 语言中,一个单一的字符可以用一个单一的rune来表示。这也是容易理解的,因为 Go 语言的字符串是 UTF-8 编码,其底层使用 4 个字节表示,也就是 32 bit

在 Go 语言中,字符串支持切片操作,但是需要注意的是如果字符串都是由 ASCII 字符组成,那可以随便使用切片进行操作,但是如果字符串中包含其他非 ASCII 字符,直接使用切片获取想要的单个字符时需要十分小心,因为对字符串直接使用切片时是通过字节进行索引的,但是非 ASCII 字符在内存中可能不是由一个字节组成。如果想对字符串中字符依次访问,可以使用range操作符。另外获取字符串的长度可能有两种含义,一种是指获取字符串的字节长度,一种是指获取字符串的字符数量。

字符串支持以下操作:

语法 描述
s += t 将字符串 t 追加到 s 末尾
s + t 将字符串 s 和 t 级联
s[n] 从字符串 s 中索引位置为 n 处的原始字节
s[n:m] 从位置 n 到位置 m-1 处取得的字符(字节)串
s[n:] 从位置 n 到位置 len(s)-1 处取得的字符(字节)串
s[:m] 从位置 0 到位置 m-1 处取得的字符(字节)串
len(s) 字符串 s 中的字节数
len([]rune(s)) 字符串 s 中字符的个数,可以使用更快的方法 utf8.RuneCountInString()
[ ]rune(s) 将字符串 s 转换为一个 unicode 值组成的串
string(chars) chars 类型是[]rune 或者[]int32, 将之转换为字符串
[ ]byte(s) 无副本的将字符串 s 转换为一个原始的字节的切片数组,不保证转换的字节是合法的 UTF-8 编码字节

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章