刘总的笔记小站

生活常识,娱乐搞笑,编程技巧,智能家居,深度学习,网络神经,数据挖掘

golang数值类型和派生类型的初始化和创建及流程控制

一,数值类型和派生类型

1,数值类型
值类型 (int、float、bool、string、arry、strcut) 变量直接存储值,内存通常在栈中分配
引用类型	uintptr、slice、map、chan、interface 变量存储的是地址,地址的空间才存储数据值,内存在堆中分配

基础数据类型有:布尔型(bool)	整型(int)	浮点型(float)	字符串(string)	复数(complex)
引用类型有:字典(map)	切片(slice)	通道(chan)	函数(func)	指针(uintptr)
复合数据类型有:数组(array)		结构体(struct)

布尔型
bool 布尔型的值只可以是常量 true 或者 false,默认值为 false。

字符串类型
string 编码统一为 UTF-8 编码标识 Unicode 文本,默认值为空字符串。

整型(默认值为 0)
uint8: 无符号 8 位整型(0 ~ 255);
uint16:无符号 16 位整型(0 ~ 65535);
uint32:无符号 32 位整型(0 ~ 4294967295);
uint64:无符号 64 位整型(0 ~ 18446744073709551615);
int8:有符号 8 位整型(-128 ~ 127);
int16:有符号 16 位整型(-32768 ~ 32767);
int32:有符号 32 位整型(-2147483648 ~ 2147483647);
int64:有符号 64 位整型(-9223372036854775808 ~ 9223372036854775807)

浮点型(默认值为 0)
float32:IEEE-754 32 位浮点数;
float64:IEEE-754 64 位浮点数;
complex64:32 位实数和虚数;
complex128:64 位实数和虚数;

其他数值类型
byte:类似 uint8;
rune:类似 int32;
uint:32 或 64 位;
int:与 uint 一样大小;
uintptr:无符号整型,用于存放一个指针;

2,派生类型
指针类型(Pointer)
数组类型
结构化类型(struct)
Channel 类型(chan)
函数类型(func)
切片类型(slice)
接口类型(interface)
Map 类型(map)


二,初始化

1,类型字面量初始化
数字类型 var i int = 10 var f float64 = 3.14 var c complex64 = 1 + 2i
布尔类型 var b bool = true
字符串类型 var s string = "hello, world"
错误类型 err := errors.New("an error occurred")
指针类型 var ptr *int = &i
数组类型 var arr [3]int = [3]int{1, 2, 3}
切片类型 var slice []int = []int{1, 2, 3}
字典类型 var dict map[string]int = map[string]int{"one": 1, "two": 2, "three": 3}
通道类型 var ch chan int = make(chan int)
结构体类型 type person struct { name string age int } var p person = person{name: "Bob", age: 30}
接口类型 type MyInterface interface { Method1() Method2() }
函数类型 func add(a, b int) int { return a + b } var f func(int, int) int = add

2,类型函数初始化
make 和 new 区别
make make函数返回输入参数类型,是一个用于创建切片(slice)、映射(map)和通道(channel)内置的数据结构的内建函数,make函数返回初始化的数据结构(切片、映射或通道)
new new函数返回对应输入参数类型的指针类型,主要作用是为类型申请一片内存空间,new 函数在底层会分配一块内存,大小为指定类型的大小,并将该内存清零
make 和 new 函数的区别主要有以下几点:
new 函数可以用于任意类型的变量,而 make 函数只能用于切片、映射和通道这三种引用类型的变量。
new 函数返回的是指向类型零值的指针,而 make 函数返回的是类型的值,已经初始化为非零值。
new 函数只是分配内存,不涉及内存的初始化,而 make 函数不仅分配内存,还会根据类型进行相应的初始化操作
总结:
make仅用来分配及初始化类型为 slice、map、chan 的数据,new 可分配任意类型的数据
new分配返回的是指针,即类型 *Type,make 返回引用,即Type
new分配的空间被清零, make 分配空间后,会进行初始化 

make(map[string]string)	缺少长度的参数,只传类型,这种用法只能用在类型为map或chan的场景,例如make([]int)是会报错的。这样返回的空间长度都是默认为0的
make([]int, 2)	指定了长度,例如make([]int, 2)返回的是一个长度为2的slice
make([]int, 2, 4)	第二参数指定的是切片的长度,第三个参数是用来指定预留的空间长度,例如a := make([]int, 2, 4)


三,关键字

break    default      func    interface    select
case     defer        go      map          struct
chan     else         goto    package      switch
const    fallthrough  if      range        type
continue for          import  return       var


四,go语言中的流程控制 顺序结构 、分支结构、 循环结构

//单分支
if 条件表达式 {
	逻辑代码
}
//多分支
if 条件表达式1 {
	逻辑1
} else if 条件表达式2 {
	逻辑2
} else if 条件表达式n {
    逻辑n
} else {
    xxx
}
//双分支
if 条件表达式1 {
	逻辑1
} else {
    xxx
}

//基本语法
switch 表达式 {
	case 值1,值2...:
		语句块1
	case 值3,值4...:
		语句块2
	....
	default:
		语句块
}


for 初始表达式; 布尔表达式; 迭代因子; {
	循环体;
}
for key, val := range coll {
	.....
}

# for range只可遍历数组、切片、字符串、map及通道


发表评论:

控制面板
您好,欢迎到访网站!
  查看权限
搜索
«   2024年9月   »
1
2345678
9101112131415
16171819202122
23242526272829
30
网站分类
最新留言
文章归档
网站收藏
友情链接
图标汇集
Powered by Z-BlogPHP

  • Copyright ©2021 @liuzong All rights reserved.
  • 陕ICP备17016542号