【Go初学者】Go学习总结1

从下载Go开始

用镜像站:https://golang.google.cn/dl/
一般直接上最新版
找到对应操作系统的版本下载

安装是傻瓜式的一直下一步,如果想改安装路径,那一定要记好放在哪里了

GoRoot

也就是我们的go开发包路径,环境变量配置还是那老一套

GoPath

现在已经不需要自己手动配置了,默认即可

GoProxy

因为默认的GoProxy配置是:GOPROXY=https://proxy.golang.org,direct,国内访问不到https://proxy.golang.org,所以就只能换一个Proxy,执行下面的命令修改Proxy

go env -w GOPROXY=https://goproxy.cn,direct

开始

init函数与main函数

init函数用于程序执行前做包的初始化的函数
main函数是程序的默认入口函数(主函数)

init函数可以用于任意包中,且可以重复定义多个
main函数只能用在main包中,且只能定义一个

基本数据类型

值类型

bool
int(32位或64位操作系统决定的32 or 64), int8, int16, int32, int64
unit(32位或64位操作系统决定的32 or 64), unit8(byte), unit 16, unit 32, unit64
float32, float64
string
complex64, complex128
array

正好最近学了计算机组成原理,就结合起来总结一下

整型int,unit

int后面的数字表示这个类型变量占用多少二进制位,int8也就是一字节有符号整数
unit同样也是整型,后面的数字同样是占用多少二进制位

这两个的区别主要在于有无符号位

int是有符号位的整数,

int8表示的范围是-128~127,
八位二进制,首位表示正负号, ( 0111    1111 ) 2 (0111\;1111)_2 (01111111)2也就是127
-128 是 ( 1000    0000 ) 2 (1000\;0000)_2 (10000000)2

unit是无符号位的整数,也就没有负数,

unit8表示的范围是0~255
( 1111    1111 ) 2 (1111\;1111)_2 (11111111)2表示的就是255

浮点型float32,float64

float32精确到小数点后7位

float64精确到小数点后16位

IEEE 754标准,

32表示32位短浮点数格式
其中,最前1位为符号位,紧接着是阶码(指数位)8位,尾数位(有效数字位)23位

64表示64位长浮点数格式
其中,最前1位为符号位,紧接着是阶码(指数位)11位,尾数位(有效数字位)52位

IEEE754浮点数标准格式

字符串

Go的字符串是值类型!
字符串拼接用+
多行字符串可用

s := `第一行
第二行
第三行`
复数 complex

啧,这个东西,高中就让我烦,现在还是不太想看,就写一点吧

complex64 (32 位实数和虚数)
complex128 (64 位实数和虚数)

var c1 complex64 = 5 + 10i

数组

Go的array数组,长度也是类型的一部分,长度为8的array和长度为16的数组完全是两个类型

数组创建

var 数组名 [size]T = [size]T{t1,t2,t3,...}

数组长度len(arr)

输出数组时不用再遍历输出,直接fmt.Println(arr)

字符型 unit8(byte),rune
  • unit8(byte)类型:代表ASCII码的一个字符
  • rune类型:代表一个UTF-8字符

当需要处理中文时,就要用rune类型
rune实际上是一个int32

引用类型

slice 切片

切片是数组的一个引用,是引用类型,自身是结构体,里面由,指针,长度,最大长度构成

len()求长度
cap()求最大长度(最大扩张容量)

创建切片可通过

var slice []type = make(type, len)
slice := make([]type,len)
slice := make([]type,len,cap)

一旦超出slice的最大长度,将会导致重新分配底层数组
简单来说,给slice append元素时,一不小心超出了最大长度,slice会把原数组的值拷贝一份过来,对slice进行扩容,此时复制过来的值再修改时,不会影响到原数组

var arr1 [3]int = [3]int{1,2,3}
var slice1 []int = arr1[:]
slice1[0] = 2
fmt.Println(arr1) // [2,2,3]
fmt.Println(slice1) // [2,2,3]

// 超出最大容量
slice1 = append(slice1,4)
slice1[0] = 3
fmt.Println(arr1) // [2,2,3]
fmt.Println(slice1) // [3,2,3,4]
Map

键值对数组,,,

map[keyType]ValueType

用make()来分配内存
make(map[keyType]ValueType,[cap])

chan

var 通道名 chan 传输的数据类型

所有的类型都可以用于通道,甚至空接口也可以,函数当然也可以

c1 := make(chan string) // 创建一个字符串型的信道

创建有方向的chan

var send_only chan<- int // 只接收
var read_only <-chan int // 只发送

常量

const(
	n1 = 100
	n2 = "诶嘿
)

// 多个常量一起声明时,第一个常量赋值后,其它常量不赋值,表示的意思是,后面的常量值与第一个常量值一样
const(
	n3 = 200
    n4
    n5
)

差不多了,下一篇继续水

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值