104.【GoLang基础】(三)

简介: 104.【GoLang基础】

7.常量

常量是一个简单的值的标识符,在程序运行时,不会被修改的量。

const 常量名 [type]= 值

常量中的数据类型值可以是布尔型、数字型(整数、浮点和复数)和字符串型

我们可以省略说明符 [type],因为编译器可以根据变量的值来判断其类型。

  • 显式类型定义: const b string=“abc”
  • 隐式类型定义: const b=“abc”

多个不同类型的声明可以简写为:

const a, b, c = 3.14, "sdsd", 20
package main // 这里的包一定要写成 main.
import "fmt"
// 导入包
func main() { // 主函数
  const URL string = "www.jsxs1.cn:8089" //显式定义
  const URL2 = "www.jsxs1.cn:8091"       //隐式定义
  const a, b, c = 3.14, "sdsd", 20
  fmt.Println(URL)
  fmt.Println(URL2)
  fmt.Println(a, b, c)
}

8.常量iota💥

iota , 特殊常量,可以认为是一个可以被编译器修改的常量。iota是go语言的常量计数器

iota在const关键字出现时将被充值为0 (const内部的第一行之前),const中每新增一行常量声明将使iota基数一次 (iota可理解为const语句块中的行索引)。

iota 可以被用作枚举值:

假如说被其他值给打断了,那么就会复制上面的值直到新出来一个iota

package main // 这里的包一定要写成 main.
import "fmt"
// 导入包
func main() { // 主函数
  const (
    a = iota //0
    b        // 1
    c        // 2
    d        // 3
    e        // 4
    f = "sdsds"
    g // sdsds
    h = 100
    i        //100
    j = iota // 9
    k        // 10
  )
  const (
    m = iota
    n
  )
  fmt.Println(a, b, c, d, e, f, g, h, i, j, k, m, n)
}

(四)、基本数据类型

Go语言是一种静态类型的编程语言,在Go编程语言中,数据类型用于声明函数和变量。数据类型的出现是为了把数据分成所需内存大小不同的数据,编程的时候需要大数据的时候才需呀申请大内存,就可以充分利用内存,编译器进行编译的时候,就要知道每个值的类型,这样编译器就知道要为这个值分配多少内存,并且知道这段分配的内存表示什么。

1.布尔类型 (bool)

%T 是类型, %t 是值

package main // 这里的包一定要写成 main.
import "fmt"
func main() { // 主函数
  var isFlag bool = true                          //默认为false
  fmt.Println(isFlag)                             // 打印输出类型
  fmt.Printf("类型是: %T, 值是: %t\n", isFlag, isFlag) // %T是类型 %t是值 \n是换行
}

2.数字型 (int float byte)

整形 int 和浮点型 float32.float64.Go语言支持整形和浮点型数字,并且支持复数,其中位的运算采用补码。

Go也有基于架构的类型,列如: unit 无符号int 有符号(可为负数)

序号 类型和描述
1 byte 类似于uint8
2 rune 类似于 int32
3 uint 32 或 64
4 int 32或 64
5 uintptr 无符号整形,用于存放一个指针
package main // 这里的包一定要写成 main.
import "fmt"
func main() { // 主函数
  //  定义一个整形
  var age int = 18
  fmt.Printf(" %T , %d ", age, age) // 类型依旧是 %T; 但整形是%d取值
  // 定义一个浮点型
  var money float32 = 20.31
  fmt.Printf(" %T , %.2f ", money, money) // 类型依旧是 %T; 但浮点型是%f取值->默认保留6位小数,%.nf 保留n位小数
}

3.字符串 (string)

字符串就是遗传固定长度的字符链接起来的字符序列

Go的字符串是由单个字节连接起来的,GO语言的字符串使用UTF-8编码表示和Unicode文本。

package main // 这里的包一定要写成 main.
import "fmt"
func main() { // 主函数
  // 字符串 -> 双引号
  var str string
  str = "hello jsxs"
  fmt.Printf(" %T , %s\n", str, str) // 类型依旧是%T, 但是字符串的值是: %s
  // 字符 -> 单引号
  var v1 int32 = 'A'
  v2 := 'B'
  fmt.Printf("%T,%c\n", v1, v1)
  fmt.Printf("%T,%c\n", v2, v2)
  fmt.Println("hello"+"world") //字符串的拼接使用+或者,进行链接,其他的使用,进行链接
  fmt.Println("hello ", "world")  //字符串的拼接使用+号进行链接,字符串和其他类型拼接需要使用,进行链接
}

  1. Go语言的字符串链接可以通过 + 实现 或者 , 实现
  2. Go语言的字符串与其他非字符串的链接使用的是: ,
  3. 双引号指的是: 字符串, 单引号指的是 字符
  4. 字符用 %c来定义,其类型是 int32
  5. 转义字符 \n 换行 \t 空格

4.数据类型的转换

在必要以及可行的情况下,一个类型的值可以被转换成另一种类型的值,由于Go语言不存在隐式类型转换,因此所有的类型转化都必须显式的声明:

转换成的类型type(被转换的变量名)
package main // 这里的包一定要写成 main.
import "fmt"
func main() { // 主函数
  var (
    a int     = 5
    b float32 = 5.0
  )
  //  需求: 将int类型的a转换位 float64类型
  var c float64 = float64(a)
  d := int(b)
  fmt.Printf("%T\n", a)
  fmt.Printf("%T\n", b)
  fmt.Printf("%T\n", c)
  fmt.Printf("%T\n", d)
}

类型转换只能定义正确的情况下才能转换成功,列如一个取值范围较小的类型转换到一个取值范围较大的类型 (将int16转换到int32).当从一个取值范围较大的类型转换到取值范围较小的类型时(将int32转换到int16时),会发生精度丢失的问题(截断)

(五)、派生数据类型

1.指针类型 (*)

指针变量指向了一个值的内存地址

指针类型的声明格式为var var_name *var-type,使用*类型表示为某某类型的指针。

  1. 比如var ptr *string就表示ptr为指向string类型的指针。指针的赋值为&变量名称
  2. 比如 var a = “abcde”;var ptr = &a,同样的,指针类型可以根据值自动判断类型
  3. 如果只定义了指针变量,而并没有给他赋值,那么该指针就会指向一个空的内存地址,也就是nil,类似其他语言中的null
  4. 指针的意思: 就是指向一个地址,它的值是一个门牌号(地址)
var var_name *var-type
package main // 这里的包一定要写成 main.
import "fmt"
var a = "abcde"
var ptr *string       //声明一个string类型的指针
var ptr1 *string = &a //声明一个string类型的指针
func main() { // 主函数
  fmt.Println(ptr) //当前指针ptr为空
  ptr = &a         //让ptr指向a的内存地址
  fmt.Println(ptr) //现在ptr指向a的内存地址了
  fmt.Println(ptr1)  // 获取地址
  fmt.Println(*ptr1)  //获取值
}

2.数组类型 ([])

数组是一组长度固定的统一数据类型的集合,注意:不同长度的数组属于不同的数据类型

数组的声明方式也很简单var a [n]int,n为数组的长度。后面我们会认识切片slice,其与数组最大的区别就是切片没有固定长度,是对数组的引用,所以在GO中切片比数组要常用许多。

数组的三种定义方式

//  数组的第一中定义
  var a [3]int = [3]int{1, 2, 3}
  // 数组的第二种定义
  var b [3]int
  b[0] = 1
  // 数组的第三种定义方式
  c := [3]int{1, 2, 3}
  fmt.Println(a, " ", b, " ", c)
for i, v := range a { //  这里的i是 idex,v是 value
    fmt.Printf("%d %d\n", i, v)
  }

数组的遍历

package main // 这里的包一定要写成 main.
import "fmt"
func main() { // 主函数
  a := [3]int{1, 2, 3} // 定义长度为3的数组,并且初始化值为1,2,3
  fmt.Println("以下是下标和值: ")
  //range循环数组的时候可以循环下标和值
  for i, v := range a { //  这里的i是 idex,v是 value
    fmt.Printf("%d %d\n", i, v)
  }
  fmt.Println("以下是值: ")
  //也可以只循环值,把下标丢弃
  for _, v := range a {
    fmt.Printf("%d\n", v)
  }
}

相关文章
|
12月前
|
自然语言处理 前端开发 Java
API管理平台:你用的到底是哪个?
本文介绍了多个API管理和文档工具,包括Apifox、Swagger及其增强版Knife4j和RapiDoc、阿里RAP、去哪儿YApi以及Redoc。这些工具各有特色,适用于不同的开发场景。Apifox提供一体化协作平台,支持API文档、调试、Mock和测试;Swagger结合Knife4j适合Java与前端团队,界面美观且功能丰富;YApi则适用于跨语言开发,支持多种API形式的管理;阿里RAP专注于接口文档管理和Mock服务;Redoc则是开源的现代化API文档浏览器。总结而言,选择工具应根据团队需求和技术栈来决定。
2588 16
|
4天前
|
云安全 监控 安全
|
1天前
|
存储 机器学习/深度学习 人工智能
打破硬件壁垒!煎饺App:强悍AI语音工具,为何是豆包AI手机平替?
直接上干货!3000 字以上长文,细节拉满,把核心功能、使用技巧和实测结论全给大家摆明白,读完你就知道这款 “安卓机通用 AI 语音工具"——煎饺App它为何能打破硬件壁垒?它接下来,咱们就深度拆解煎饺 App—— 先给大家扒清楚它的使用逻辑,附上“操作演示”和“🚀快速上手不踩坑 : 4 条核心操作干货(必看)”,跟着走零基础也能快速上手;后续再用真实实测数据,正面硬刚煎饺 App的语音助手口令效果——创建京东「牛奶自动下单神器」口令 ,从修改口令、识别准确率到场景实用性,逐一测试不掺水,最后,再和豆包 AI 手机语音助手的普通版——豆包App对比测试下,简单地谈谈煎饺App的能力边界在哪?
|
9天前
|
机器学习/深度学习 人工智能 自然语言处理
Z-Image:冲击体验上限的下一代图像生成模型
通义实验室推出全新文生图模型Z-Image,以6B参数实现“快、稳、轻、准”突破。Turbo版本仅需8步亚秒级生成,支持16GB显存设备,中英双语理解与文字渲染尤为出色,真实感和美学表现媲美国际顶尖模型,被誉为“最值得关注的开源生图模型之一”。
1123 6
|
11天前
|
机器学习/深度学习 人工智能 数据可视化
1秒生图!6B参数如何“以小博大”生成超真实图像?
Z-Image是6B参数开源图像生成模型,仅需16GB显存即可生成媲美百亿级模型的超真实图像,支持中英双语文本渲染与智能编辑,登顶Hugging Face趋势榜,首日下载破50万。
723 42
|
15天前
|
人工智能 Java API
Java 正式进入 Agentic AI 时代:Spring AI Alibaba 1.1 发布背后的技术演进
Spring AI Alibaba 1.1 正式发布,提供极简方式构建企业级AI智能体。基于ReactAgent核心,支持多智能体协作、上下文工程与生产级管控,助力开发者快速打造可靠、可扩展的智能应用。
1166 41
|
15天前
|
人工智能 前端开发 算法
大厂CIO独家分享:AI如何重塑开发者未来十年
在 AI 时代,若你还在紧盯代码量、执着于全栈工程师的招聘,或者仅凭技术贡献率来评判价值,执着于业务提效的比例而忽略产研价值,你很可能已经被所谓的“常识”困住了脚步。
930 77
大厂CIO独家分享:AI如何重塑开发者未来十年
|
3天前
|
人工智能 安全 前端开发
AgentScope Java v1.0 发布,让 Java 开发者轻松构建企业级 Agentic 应用
AgentScope 重磅发布 Java 版本,拥抱企业开发主流技术栈。
|
1天前
|
人工智能 JSON 前端开发
为什么你的API文档总是被吐槽?用这份"契约指令"终结前后端战争
本文针对前后端协作中"文档过时、不准确"的痛点,提供了一套实战验证的AI指令。通过强制结构化输入和自检机制,让AI自动生成包含完整参数、JSON示例和多语言代码的标准API契约文档,彻底解决接口沟通难题。
171 112

热门文章

最新文章