GOlang入门(1)

前言

摸鱼摆烂半年后,康复训练的第一篇博客,仅以此记录我开启Golang学习的新篇章。

入门第一站环境配置

我们来到官网:The Go Programming Language

我们直接dowload,我们这里注意要记录我们下载的位置

image-20250929164532380

我们把它配置到我们的环境变量中,加入到PATH里

本人采用的编辑器为VScode,我们需要添加拓展

image-20250929164717026

当然还有很多美化还有功能性的插件,就不在这里多做赘述了。

然后我们输出那句经典的hello world

image-20250929164849439

Go程序需要我们在命令行中切到相应的文件夹(如果没有切换到相应的路径是无法正确运行程序的),然后输入go run ***.go,可以执行,当然我们也可以先通过go build编译成.exe可执行性文件,在run运行文件。

GO开发注意事项

  1. 后缀为.go
  2. 应用程序得执行入口是main()函数
  3. Go语言严格区分大小写
  4. Go方法是由一条一条语句构成,每条语句后面不需要就加分号(Go语言会在每一行后自动加分号)
  5. Go是一行一行编译得,一位内我们一行就写一条语句,不能把多条语句写在同一行
  6. GO语言定义变量或者import得包如果没有使用到,代码不能编译通过
  7. 大括号成对出现,缺一不可,func main(){必须在一行,不可以把大括号放在下一行会报错

Golang变量的声明

Golang变量声明的三种使用方式

1. 指定变量类型,声明后不赋值,使用默认值

 var i int

2. 根据值自行判定变量类型

 var num = 10.11

3. 省略var,注意 :=左侧的变量不应该是已经生命过的,否则会导致编译错误

 num := "ttdr"

等价于

 var name string
 name = "ttdr"

多变量声明

同类型多个变量

 var n1, n2, n3 int

不同类型多个变量

 var n2, name, n3 = 100, "name", 888

类型推导

 n2, name, n3 := 100, "name", 888

变量的数据类型

基本数据类型

  1. 数值型

整形类型(int, int8, int16, int32, int64, uint, uint8, uint16,uint32, unit64, byte)

浮点类型 (float32, float64)

  1. 字符型(没有专门的字符型,使用byte来保存单个字母字符,不能存汉字,用utf-8编码)
  2. 布尔型
  3. 字符串

复杂数据类型

  1. 指针
  2. 数组
  3. 结构体
  4. 管道
  5. 函数
  6. 切片
  7. 接口
  8. map(类似于集合)

如何查看某个变量的数据类型和变量所占字节大小

fmt.Printf()可以用于做格式化输出

     var n1 int64 = 100
  fmt.Printf("n1 的类型 %T\n n1占用的字节数是 %d ",n1,unsafe.Sizeof(n1))

Sizeof是unsafe包的一个函数,可以返回n1变量占用的字节数,我们要引入unsafe包

整形

整数

类型有无符号占用存储空间(/字节)表数范围备注
int81-128-127
uint810-255
int162
int324
int648

第一位表示符号位,为0/1表示正负数,后面几位表示存储的数据

整形

类型有无符号占用存储空间表数范围备注
int32位四个字节64位8个字节
uint32位四个字节64位8个字节
rune与int32一样等价int32,表示一个unicode码,后面在存储中文字符串很有用
byte与uint8一样0-255存储字符的时候使用

浮点型

分类:float32——四字节 float64——八字节 (不受OS影响,默认声明位float64)

组成:符号位+指数位+尾数位 (浮点数都是有符号的,尾数为可能丢失导致精度损失)

字符类型

Golang没有专门的字符类型,如果要存储带个字符用byte来存储,

字符串是固定长度的字符连接起来的字符序列,Golang的字符串是由单个字节连接起来的,也就是说 对于传统的字符串由字符组成的,但是GO的字符串是由字节组成的

当我们直接输出byte值,就是输出了对应的字符的ascll码值,如果希望输出对应的字符,需要使用格式化输出

image-20250927151206762

byte的范围是0-255,所以对应的码值如果大于255就会越界,比如我们这里给他赋一个汉字,就会有overflows溢出了

image-20250927151650829

我们这里就给他赋一个更大的范围

image-20250927151812774

正确输出了汉字。

布尔类型

bool 只能是true 或者false,占用一个字节,用于逻辑运算。

字符串类型

基本使用:

     var address string = "三角洲启动"
  fmt.Println(address)

注意:

1. Golang中的字符串一旦被赋值就不能更改,GO中的字符串是不可变的

2. 字符串两种表示形式,一种是双引号——会识别转义字符,一种是反引号,以字符串原生形式输出,包括换行和特殊字符,可以实现防止攻击, 输出源代码的效果

 package main
 ​
 import (
  "fmt"
 )
 ​
 func main(){
  var address string = "三角洲启动"
  fmt.Println(address)
  str2 := `
  var n1 int64 = 100
  fmt.Printf("n1 的类型 %T\n n1占用的字节数是 %d ",n1,unsafe.Sizeof(n1))
  var address string = "三角洲启动"
  fmt.Println(address)
  `
  fmt.Println(str2)
 }
image-20250927163653738

3. 字符串的拼接

如果加号两边都是字符串时,加号就会被识别成字符串的拼接

image-20250927163927311

如果是一行太长,需要多行字符串相加,要把加号留在上面。

image-20250927164100689

数据类型的转换

Golang和Java/C不同,不同类型变量之间赋值需要显性转换,在Golang中,数据类型不能自动转换

如果在转换中,转换前的的数据超出了转换后数据的数据范围,会按溢出处理

语法:

 var i int32 = 1
 var n1 float32 = float32(i)
 var n2 int8 = int8(i)

注意:被转换的是变量存储的值,变量本身的数据类型并没有发生变化

基本数据类型和string的转换

方式1:fmt.Sprintf("%参数",表达式)

举例:

     var str1 string
  str1 = fmt.Sprintf("%d",num1)
  fmt.Println(str1)

???不知道参数是什么,看这里点一下

方式2:使用strconv包的函数

这里放个传送门

     var num1 = 99
  var num2 float64 = 23.345
  var str1 string
  str1 = strconv.FormatInt(int64(num1),10)
  fmt.Printf("str1:%q",str1)
  str1 = strconv.Itoa(num1)
  //Int类型(Int64会报错)直接转字符串可以用Itoa函数
  fmt.Printf("str1:%q",str1)
  str1 = strconv.FormatFloat(num2,'f',10, 64)
  //'f'是转成的格式,10表示小数位保留是为,64表示小数是64位
  fmt.Printf("str1:%q",str1)

String 转基本数据类型

方式:strconv包函数

     var str string = "true"
  var b bool
  b = strconv.ParseBool(str)
  fmt.Printf("type: %T b = %v",b,b)

我们发现这里出现了报错

image-20250929161931540

我们再来查看文档

image-20250929162020017

咱们可以看到这个是返回了两个值,但是我们只关心前面的布尔值那我们就忽略第二个值

 b , _ = strconv.ParseBool(str)
image-20250929162113426

得到了正确的结果,这里就字符串转int,就直接上示例了

     var str2 string = "12315646"
  var n1 int64
  n1 , _ = strconv.ParseInt(str2,10,64)
  fmt.Printf("type: %T b = %v",n1,n1)

浮点数转字符串同理。

丝,忽然有个坏坏的想法,如果我们不能够转成有效的数据会怎么样呢,我们来试一试。

image-20250929164215845

这里会变成默认值,但是类型是你指定的类型,到这里简单的数据类型基本上就讲完了

结语

一篇一语录,今日语录

明明知道,但就是做不到;特别想要,但就是得不到

——《认知觉醒:开启自我改变的原动力》

但知道和做到之间还有一个核心的东西,就是相信,成功者是因为相信,所以才能看见,普通人是看见了才相信,而愚蠢的人是看见了,也不愿意相信。也应照了笔者很喜欢的一句话,因为相信,所以看见,自命不凡,自证预言。

暂无评论

发送评论 编辑评论


				
上一篇
下一篇