Go基础知识全面总结

news2024/12/28 19:24:27

文章目录

  • go基本数据类型
    • bool类型
    • 数值型
    • 字符
    • 字符串
  • 数据类型的转换
  • 运算符和表达式
    • 1. 算数运算符
    • 2.关系运算符
    • 3. 逻辑运算符
    • 4. 位运算符
    • 5. 赋值运算符
    • 6. 其他运算符
    • 运算符优先级
    • 转义符

go基本数据类型

bool类型

布尔型的值只可以是常量 true 或者 false。⼀个简单的例⼦:var b bool = true

数值型

  1. 整数型

⼆进制和位数的关系,以及 int 和 uint 的关系

int8 有符号 8 位整型 (-128 到 127) ⻓度:8bit
int16 有符号 16 位整型 (-32768 到 32767)
int32 有符号 32 位整型 (-2147483648 到 2147483647)
int64 有符号 64 位整型 (-9223372036854775808 到 9223372036854775807)
uint8 ⽆符号 8 位整型 (0 到 255) 8位都⽤于表示数值:
uint16 ⽆符号 16 位整型 (0 到 65535)
uint32 ⽆符号 32 位整型 (0 到 4294967295)
uint64 ⽆符号 64 位整型 (0 到 18446744073709551615)

  1. 浮点型

float32 32位浮点型数
float64 64位浮点型数

其他
byte 等于 uint8
rune 等于 int32
uint 32 或 64 位

字符

Golang中没有专⻔的字符类型,如果要存储单个字符(字⺟),⼀般使⽤byte来保存。
字符串就是⼀串固定⻓度的字符连接起来的字符序列。Go的字符串是由单个字节连接起来的。也就是说对于传统的字符串是由字符组成的,⽽Go的字符串不同,它是由字节组成的。

package main
	import (
		"fmt"
	)
	func main() {
		var a byte
		a = 'a'
		//输出ascii对应码值 。。 这⾥说明⼀下什么是ascii码
		fmt.Println(a)
		fmt.Printf("a=%c", a)
}

字符常量只能使⽤单引号括起来,例如:var a byte = ‘a’ var a int = ‘a’

package main
import (
	"fmt"
)
func main() {
	var a byte
	a = "a"
	//输出ascii对应码值 。。 这⾥说明⼀下什么是ascii码
	fmt.Println(a)
	fmt.Printf("a=%c", a)
}

字符本质是⼀个数字, 可以进⾏加减乘除

package main
import (
	"fmt"
	"reflect"
)
func main() {
	a := 'a'
	//这⾥注意⼀下 1. a+1可以和数字计算 2.a+1的类型是32 3. int类型可以直接变成字符
	fmt.Println(reflect.TypeOf(a+1))
	fmt.Printf("a+1=%c", a+1)
}

字符串

字符串就是⼀串固定⻓度的字符连接起来的字符序列。Go 的字符串是由单个字节连接起来的。Go 语⾔的字符串的字节使⽤ UTF-8 编码标识 Unicode ⽂本。

数据类型的转换

valueOfTypeB = typeB(valueOfTypeA)

a := 5.0
b := int(a)
type IT int
var a IT = 5
b := int(5)
c := IT(b)
var a int32 = 1
var b int64 = 3
b = int64(a)
fmt.Println(a, b)

int 转换为字符串:Itoa()

println("a" + strconv.Itoa(32)) 

string 转换为 int:Atoi()

i,_ := strconv.Atoi("3")
println(3 + i) 
i,err := strconv.Atoi("a")
if err != nil {
 println("converted failed")
}

Parse 类函数⽤于转换字符串为给定类型的值:ParseBool()、ParseFloat()、ParseInt()、ParseUint()。

b, err := strconv.ParseBool("true")
f, err := strconv.ParseFloat("3.1415", 64)
i, err := strconv.ParseInt("-42", 10, 64)
u, err := strconv.ParseUint("42", 10, 64)

ParseInt() 和 ParseUint() 有 3 个参数:

func ParseInt(s string, base int, bitSize int) (i int64, err error)
func ParseUint(s string, base int, bitSize int) (uint64, error)

说明:

  1. bitSize 参数表示转换为什么位的 int/uint,有效值为 0、8、16、32、64。当 bitSize=0 的时候,表示转换为 int 或 uint 类型。例如 bitSize=8 表示转换后的值的类型为 int8 或 uint8。
  2. base 参数表示以什么进制的⽅式去解析给定的字符串,有效值为 0、2-36。当 base=0 的时候,表示根据string 的前缀来判断以什么进制去解析: 0x 开头的以 16 进制的⽅式去解析, 0 开头的以 8 进制⽅式去解析,其它的以 10 进制⽅式解析

将给定类型格式化为 string 类型:FormatBool()、FormatFloat()、FormatInt()、FormatUint()。

s := strconv.FormatBool(true)
s := strconv.FormatFloat(3.1415, 'E', -1, 64)
s := strconv.FormatInt(-42, 16)
s := strconv.FormatUint(42, 16)

第⼆个参数 base 指定将第⼀个参数转换为多少进制,有效值为 2<=base<=36 。当指定的进制位⼤于 10 的时候,超出 10 的数值以 a-z 字⺟表示。例如 16 进制时,10-15 的数字分别使⽤ a-f 表示,17 进制时,10-16 的数值分别使⽤ a-g 表示。

FormatFloat() 参数众多:

func FormatFloat(f float64, fmt byte, prec, bitSize int) string
  • bitSize 表示 f 的来源类型(32:float32、64:float64),会据此进⾏舍⼊。
  • fmt 表示格式:‘f’(-ddd.dddd)、‘b’(-ddddp±ddd,指数为⼆进制)、‘e’(-d.dddde±dd,⼗进制指数)、‘E’(-d.ddddE±dd,⼗进制指数)、‘g’(指数很⼤时⽤’e’格式,否则’f’格式)、‘G’(指数很⼤时⽤’E’格式,否则’f’格式)。
  • prec 控制精度(排除指数部分):对’f’、‘e’、‘E’,它表示⼩数点后的数字个数;对’g’、‘G’,它控制总的数字个数。如果 prec 为 - 1,则代表使⽤最少数量的、但⼜必需的数字来表示 f。

运算符和表达式

1. 算数运算符

在这里插入图片描述

2.关系运算符

== != > < >= <=

3. 逻辑运算符

image.png

这个和 python 不⼀样,python 中使⽤ and or 来连接


package main
import "fmt"
func main() {
	 var a bool = true
	 var b bool = false
	 if ( a && b ) {
	 	 fmt.Printf("第⼀⾏ - 条件为 true\n" )
	 }
	 if ( a || b ) {
		  fmt.Printf("第⼆⾏ - 条件为 true\n" )
	 }
	 a = false
	 b = true
	 if ( a && b ) {
	 	 fmt.Printf("第三⾏ - 条件为 true\n" )
	 } else {
	  	fmt.Printf("第三⾏ - 条件为 false\n" )
	 }
	 if ( !(a && b) ) {
	  	fmt.Printf("第四⾏ - 条件为 true\n" )
	 }
}

4. 位运算符

位运算符对整数在内存中的⼆进制位进⾏操作。
下表列出了位运算符 &, |, 和 ^ 的计算:

image.png

假定 A = 60; B = 13; 其⼆进制数转换为:

A = 0011 1100
B = 0000 1101

A&B = 0000 1100
A|B = 0011 1101
A^B = 0011 0001

Go 语⾔⽀持的位运算符如下表所示。假定 A 为 60,B 为 13:

image.png

package main
import "fmt"
func main() {
	 var a uint = 60    
	 var b uint = 13   
	 var c uint = 0     
	 c = a & b   
	 fmt.Printf("第⼀⾏ - c 的值为 %d\n", c )
	 c = a | b   
	 fmt.Printf("第⼆⾏ - c 的值为 %d\n", c )
	 c = a ^ b   
	 fmt.Printf("第三⾏ - c 的值为 %d\n", c )
	 c = a << 2  
	 fmt.Printf("第四⾏ - c 的值为 %d\n", c )
	 c = a >> 2  
	 fmt.Printf("第五⾏ - c 的值为 %d\n", c )
}

5. 赋值运算符

下表列出了所有 Go 语⾔的赋值运算符。

image.png

package main
	import "fmt"
func main() {
	 var a int = 21
	 var c int
	 c = a
	 fmt.Printf("第 1 ⾏ - = 运算符实例,c 值为 = %d\n", c )
	 c += a
	 fmt.Printf("第 2 ⾏ - += 运算符实例,c 值为 = %d\n", c )
	 c -= a
	 fmt.Printf("第 3 ⾏ - -= 运算符实例,c 值为 = %d\n", c )
	 c *= a
	 fmt.Printf("第 4 ⾏ - *= 运算符实例,c 值为 = %d\n", c )
	 c /= a
	 fmt.Printf("第 5 ⾏ - /= 运算符实例,c 值为 = %d\n", c )
	 c = 200;
	 c <<= 2
	 fmt.Printf("第 6⾏ - <<= 运算符实例,c 值为 = %d\n", c )
	 c >>= 2
	 fmt.Printf("第 7 ⾏ - >>= 运算符实例,c 值为 = %d\n", c )
	 c &= 2
	 fmt.Printf("第 8 ⾏ - &= 运算符实例,c 值为 = %d\n", c )
	 c ^= 2
	 fmt.Printf("第 9 ⾏ - ^= 运算符实例,c 值为 = %d\n", c )
	 c |= 2
	 fmt.Printf("第 10 ⾏ - |= 运算符实例,c 值为 = %d\n", c )
}

6. 其他运算符

image.png

package main
	import "fmt"
func main() {
	 var a int = 4
	 var b int32
	 var c float32
	 var ptr *int
	 fmt.Printf("第 1 ⾏ - a 变量类型为 = %T\n", a );
	 fmt.Printf("第 2 ⾏ - b 变量类型为 = %T\n", b );
	 fmt.Printf("第 3 ⾏ - c 变量类型为 = %T\n", c );
	 ptr = &a  
	 fmt.Printf("a 的值为 %d\n", a);
	 fmt.Printf("*ptr 为 %d\n", *ptr);
}

运算符优先级

有些运算符拥有较⾼的优先级,⼆元运算符的运算⽅向均是从左⾄右。下表列出了所有运算符以及它们的优先级,由上⾄下代表优先级由⾼到低

image.png

当然,你可以通过使⽤括号来临时提升某个表达式的整体运算优先级。


package main
	import "fmt"

func main() {
	 var a int = 20
	 var b int = 10
	 var c int = 15
	 var d int = 5
	 var e int;
	 e = (a + b) * c / d;   
	 fmt.Printf("(a + b) * c / d 的值为 : %d\n", e );
	 e = ((a + b) * c) / d;  
	 fmt.Printf("((a + b) * c) / d 的值为 : %d\n" , e );
	 e = (a + b) * (c / d); 
	 fmt.Printf("(a + b) * (c / d) 的值为 : %d\n", e );
	 e = a + (b * c) / d;  
	 fmt.Printf("a + (b * c) / d 的值为 : %d\n" , e ); 
}

转义符

image.png

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1184908.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Windows系统C++语言环境下通过SDK进行动作捕捉数据传输

NOKOV度量动作捕捉系统可以与市面上主流的操作系统和编程语言实现通信。可以在Windows系统C语言环境下通过SDK进行动作捕捉数据传输。 一、形影软件设置 1、实时模式和后处理模式都可以通过SDK传输数据。以后处理模式为例。将模式切换到后处理模式 2、加载一个刚体数据 3、打…

2.7V 到 5.5V、串行输入、电压输出、16 位数模转换器MS5541/MS5542

MS5541/MS5542 是一款单通道、 16 位、串行输入、电压 输出的数模转换器&#xff0c;采用 2.7V 至 5.5V 单电源供电&#xff0c;输出范围 为 0V 至 V REF 。在输出范围内保证单调性&#xff0c;在温度范围为 -40 C 至 85 C 能够提供 1LSB INL 的 14 位精度。…

2023年重水(氧化氘)市场规模:现状及未来发展趋

重水是水的一种&#xff0c;又称氘化水&#xff0c;它的摩尔质量比一般水要重。普通的水是由两个只具有质子的氢原子和一个氧16原子所组成&#xff0c;但在重水分子内的两个氢同位素氘&#xff0c;比一般氢原子有各多一个中子&#xff0c;因此造成重水分子的质量比一般水要重。…

双wan路由器介绍( 多wan口路由器用途,双wan网速叠加快吗)

​ 文章同款&#xff1a;https://www.key-iot.com/iotlist/sr500-15.html 对于工业领域来说&#xff0c;网络连接的可靠性和稳定性至关重要。双WAN口工业级路由器SR500是一款出色的解决方案&#xff0c;旨在提供强大的多线路冗余和负载均衡功能&#xff0c;以满足工业环境中的…

使用PHP实现对称加密和解密过程,真的是太简单了!

&#x1f680; 个人主页 极客小俊 ✍&#x1f3fb; 作者简介&#xff1a;web开发者、设计师、技术分享博主 &#x1f40b; 希望大家多多支持一下, 我们一起进步&#xff01;&#x1f604; &#x1f3c5; 如果文章对你有帮助的话&#xff0c;欢迎评论 &#x1f4ac;点赞&#x1…

[yarn]yarn异常

一、运行一下算圆周率的测试代码&#xff0c;看下报错 cd /home/data_warehouse/module/hadoop-3.1.3/share/hadoop/mapreduce hadoop jar hadoop-mapreduce-examples-3.1.3.jar pi 1000 1000 后面2个数字参数的含义&#xff1a; 第1个1000指的是要运行1000次map任务 …

【Element】隐藏 el-table 展开行的箭头

需求 点击行展开行&#xff0c;隐藏箭头 方法 首先需求是点击行显示展开行 row-click"rowClick"const rowClick (row: any, column: any, event: any) > {console.log(row, column, event)if (multipleTable.value) {multipleTable.value.toggleRowExpansio…

存储虚拟化讲解

目录 存储虚拟化的分类 按照虚拟化发生的位置分类 基于主机的虚拟化 基于存储设备的虚拟化 基于网络的虚拟化 按照虚拟化实现方式分类 带内虚拟化 带外虚拟化 按照虚拟化的对象分类 虚拟机磁盘类型 按照磁盘的特性分类 按照磁盘的安全性分类 什么是虚拟化 存储虚拟…

许战海战略文库 | 从“物美价廉”到“技术出海”:中国车企新能源时代如何征服全球市场?

引言&#xff1a;从燃油车到新能源汽车,中国车企的海外战略正在经历一次深刻的转变。面临技术、产业链和文化等多重挑战,他们如何调整步伐,捕捉新的机遇&#xff0c;同时避免潜在风险,将决定其在全球市场的未来地位。 在燃油车时代&#xff0c;中国车企凭借“物美价廉”赢得了一…

基于SSM的“大学生艺术节”管理系统的设计与实现

末尾获取源码 开发语言&#xff1a;Java Java开发工具&#xff1a;JDK1.8 后端框架&#xff1a;SSM 前端&#xff1a;采用JSP技术开发 数据库&#xff1a;MySQL5.7和Navicat管理工具结合 服务器&#xff1a;Tomcat8.5 开发软件&#xff1a;IDEA / Eclipse 是否Maven项目&#x…

Powerpoint不小心被覆盖?PPT误删文件如何恢复?

PowerPoint不小心删除了&#xff0c;这可能是众多学生和工作人员最头痛的事情了。PPT被覆盖或误删可能意味着几个小时的努力付之东流。那么PPT覆盖的文档要如何救回来呢&#xff1f;小编将会在本篇文章中为大家分享几个解决方案&#xff0c;使PPT文档覆盖还原操作成为可能&…

Go:如何在GoLand中引用github.com中的第三方包

本篇博客主要介绍如何在GoLand中引入github.com中的第三方包。具体步骤如下&#xff1a; 正文 (1) 先在GoLand中打开go的工作区目录(即环境变量$GOPATH设置的变量)。如图&#xff1a; 关于工作区目录中的三个子目录: bin: 保存已编译的二进制可执行程序&#xff1b;pkg: 保…

OpenAI首届开发者大会多项更新汇总

OpenAI Dev Day 提供了多项更新&#xff0c;总结如下&#xff1a; GPT 4-Turbo - 现在可以通过API使用GPT 4-Turbo。- 提供了更长的128k令牌上下文&#xff0c;之前为32k。- 相比GPT-4&#xff0c;成本降低了50%以上。- 知识更新至2023年4月&#xff0c;之前为2021年9月。- 性…

JAVA 版小程序商城免费搭建 多商家入驻 直播带货 商城系统 B2B2C 商城源码之 B2B2C产品概述

1. 涉及平台 平台管理、商家端&#xff08;PC端、手机端&#xff09;、买家平台&#xff08;H5/公众号、小程序、APP端&#xff08;IOS/Android&#xff09;、微服务平台&#xff08;业务服务&#xff09; 2. 核心架构 Spring Cloud、Spring Boot、Mybatis、Redis 3. 前端框架…

快速搭建UmiJS4.0项目及常见问题解决方案

yarn create umi选择项目类型 ○ Pick Umi App Template │ Simple App选择创建工具 ○ Pick Npm Client │ yarn选择源 ○ Pick Npm Registry │ taobao启用 Prettier&#xff08;可选&#xff09; yarn umi g √ Pick generator type Enable Prettier -- Setup Pr…

Cesium 相机设置

1.setView 直接跳转到目的地 // 设置相机位置 const position Cesium.Cartesian3.fromDegrees(113, 31, 20000); // setView通过定义相机目的地&#xff08;方向&#xff09;,直接跳转到目的地 viewer.camera.setView({ destination: position, // 位置设置 orientation: { //…

【C/PTA——循环结构3】

C/PTA——循环结构3 7-1 二分法求多项式单根1.题目要求2.代码实现 7-2 循环-十进制转化1.题目要求2.代码实现 7-3 梅森数1.题目要求2.代码实现 7-4 单词长度1.题目要求2.代码实现 7-5 21循环-求和31.题目要求2.代码实现 7-6 21循环-金字塔1.题目要求2.代码实现 7-7 循环-杨辉三…

Vue技巧大揭秘:v-show与v-if的区别及性能对比一目了然

&#x1f3ac; 江城开朗的豌豆&#xff1a;个人主页 &#x1f525; 个人专栏 :《 VUE 》 《 javaScript 》 &#x1f4dd; 个人网站 :《 江城开朗的豌豆&#x1fadb; 》 ⛺️ 生活的理想&#xff0c;就是为了理想的生活 ! 目录 ⭐ 专栏简介 &#x1f4d8; 文章引言 一、v…

房产网小程序源码 房产中介小程序源码 房产网源码

房产网小程序源码 房产中介小程序源码 房产网源码 功能介绍&#xff1a; 一、付费发布信息 支持付费发布、刷新、置顶房源信息&#xff1b;二、个人发布信息 支持个人和房产经纪人发布房源信息&#xff1b;三、新房楼盘模块 支持新房楼盘功能&#xff0c;后台添加…

单链表(3)

现在有一个指针p&#xff0c;指向数据2所在的结点的地址——那么如何访问这个数据2 前面说过指针访问数据成员使用的是 指向符->。则访问这个数据2就是——p->data.因为p一开始就指向数据2的结点地址了 那么如何访问数据3,4往后等等 访问3就是——p->next->data…