Go语言学习笔记(二)

12 阅读3分钟

1.整型:

1.1:整型分为两大类,有符号数和无符号数.一个整数的存在形式是一定长度的二进制数据.有符号数利用二进制最高位表示符号(正或负).除最高位以外的数值都用来表示数值大小.无符号数不会出现负数.所有二进制数都用来表示大小.

2.浮点型:

2.1:浮点型往往用来表示小数.分为单精度和双精度.关键字分为float32和float64.

2.2类型推导:

package main

import (
	"fmt"
	"reflect"
)

func main() {

	var a float32

	//未显示声明变量b的数据类型
	b := 1.4

	fmt.Println("显示声明,a的类型是: ", reflect.TypeOf(a))

	//类型推导的结果与操作系统平台位数相关
	fmt.Println("类型推导,b的类型是:  ", reflect.TypeOf(b))
}

执行结果:

2.3浮点类型比较:

package main

import (
	"fmt"
	"math/big"
)

func main() {

	floata := 3.14

	floatb := 3.15

	//用big.newFloat()floata.
	result := big.NewFloat(floata).Cmp(big.NewFloat(floatb))

	if result < 0 {
		fmt.Println("a小于b")
	}

	if result == 0 {
		fmt.Println("a等于b")
	}

	if result > 0 {
		fmt.Println("a大于b")
	}
}

执行结果:

3.布尔类型:

用bool关键字来声明一个布尔类型的变量.取值有true和false两种.

package main

import (
	"fmt"
)

func main() {

	//声明一个布尔类型变量的方式.
	var success = true

	if success {
		fmt.Println(success)
	}

	var result bool

	result = true

	fmt.Println(result)
}

执行结果:

4.字符型:

字符型指的是单个字符,这里的字符不仅指ASCII码,也包含了中文及其他文言文字符.

package main

import (
	"fmt"
)

func main() {

	//	声明字符型变量.
	var c = '中'

	fmt.Println(c)

	fmt.Printf("%c\n", c)

	fmt.Println(string(c))
}

执行结果:

第一个输出的内容是20013,这个是字符'中'转换为UTF-8编码后的十进制数字.

5.字符串类型:

可以使用关键字string来声明一个字符串类型.

package main

import (
	"fmt"
	"reflect"
)

func main() {
	var s string
	s = "go语言字符串"

	fmt.Println("s的内容为: ", s, "\n")

	fmt.Println("s的类型为: ", reflect.TypeOf(s))
}

执行结果:

5.2:字符串内存中的存储:

package main

import (
	"fmt"
)

func main() {

	//	字符串在内存中的存储
	var s string

	s = "字符串"

	len := len(s)

	fmt.Println(len)
	for i := range len {
		fmt.Printf("%X ", s[i])
	}
}

执行结果:

从输出结果看,变量长度为9.汉字一般用三个字节存储,所以为9.

5.3:rune处理:

package main

import (
	"fmt"
	"unicode/utf8"
)

func main() {

	//	字符串在内存中的存储
	var s string

	s = "字符串"

	//rune处理文本
	n := utf8.RuneCountInString(s)

	fmt.Println("字符串的长度为:", n)

	for _, c := range s {
		fmt.Printf("%T, %X", c, c)
	}
}

执行结果:

rune主要对应Unicode的字符.rune在表现形式上是一个数字(int32),所以打印出来是这样的.

6.数组类型:

6.1数组特点:

所有元素存储于连续内存.

数组可以直接利用位置索引来访问元素.

数组大小不可变更.

6.2声明数组变量:

package main

import (
	"fmt"
)

func main() {

	//	声明数组
	a := [5]int{1, 2, 3, 4, 5}

	fmt.Println(a)

}

​6.3索引访问元素:

package main

import (
	"fmt"
)

func main() {

	//	声明数组
	a := [5]int{1, 2, 3, 4, 5}

	fmt.Println("索引位置2元素为: ", a[2])

	a[2] = 0

	fmt.Println(a)

}

执行结果:

6.4数组作为参数:

package main

import (
	"fmt"
)

func main() {

	//	声明数组
	a := [5]int{1, 2, 3, 4, 5}

	change(a)

	fmt.Println(a)
}

func change(a [5]int) {
	a[2] = 100
	fmt.Println(a)
}

执行结果:

通过输出可以看出,传入函数的数组值并未发生改变.证明传入函数时实际上是复制了一个数组.

夜深了,常思己之不足.