Go基础知识全面总结

文章目录

  • 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 mainimport ("fmt")func main() {var a bytea = '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 bytea = "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 = truevar b bool = falseif ( a && b ) {fmt.Printf("第⼀⾏ - 条件为 true\n" )}if ( a || b ) {fmt.Printf("第⼆⾏ - 条件为 true\n" )}a = falseb = trueif ( 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 mainimport "fmt"
func main() {var a int = 21var c intc = afmt.Printf("第 1 ⾏ - = 运算符实例,c 值为 = %d\n", c )c += afmt.Printf("第 2 ⾏ - += 运算符实例,c 值为 = %d\n", c )c -= afmt.Printf("第 3 ⾏ - -= 运算符实例,c 值为 = %d\n", c )c *= afmt.Printf("第 4 ⾏ - *= 运算符实例,c 值为 = %d\n", c )c /= afmt.Printf("第 5 ⾏ - /= 运算符实例,c 值为 = %d\n", c )c = 200;c <<= 2fmt.Printf("第 6⾏ - <<= 运算符实例,c 值为 = %d\n", c )c >>= 2fmt.Printf("第 7 ⾏ - >>= 运算符实例,c 值为 = %d\n", c )c &= 2fmt.Printf("第 8 ⾏ - &= 运算符实例,c 值为 = %d\n", c )c ^= 2fmt.Printf("第 9 ⾏ - ^= 运算符实例,c 值为 = %d\n", c )c |= 2fmt.Printf("第 10 ⾏ - |= 运算符实例,c 值为 = %d\n", c )
}

6. 其他运算符

image.png

package mainimport "fmt"
func main() {var a int = 4var b int32var c float32var ptr *intfmt.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 mainimport "fmt"func main() {var a int = 20var b int = 10var c int = 15var d int = 5var 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.rhkb.cn/news/186293.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

竞赛选题 深度学习猫狗分类 - python opencv cnn

文章目录 0 前言1 课题背景2 使用CNN进行猫狗分类3 数据集处理4 神经网络的编写5 Tensorflow计算图的构建6 模型的训练和测试7 预测效果8 最后 0 前言 &#x1f525; 优质竞赛项目系列&#xff0c;今天要分享的是 &#x1f6a9; **基于深度学习猫狗分类 ** 该项目较为新颖&a…

Python基础教程之十六:Python multidict示例–将单个键映射到字典中的多个值

1.什么是multidict词典> 在python中&#xff0c;“ multidict ”一词用于指代字典&#xff0c;在字典中可以将单个键映射到多个值。例如 多重结构 multidictWithList {key1 : [1, 2, 3],key2 : [4, 5]}multidictWithSet {key1 : {1, 2, 3},key2 : {4, 5}}1. list如果要…

内核移植笔记 Cortex-M移植

常用寄存器 PRIMASK寄存器 为1位宽的中断屏蔽寄存器。在置位时&#xff0c;它会阻止不可屏蔽中断&#xff08;NMI&#xff09;和HardFault异常之外的所有异常&#xff08;包括中断&#xff09;。 实际上&#xff0c;它是将当前异常优先级提升为0&#xff0c;这也是可编程异常/…

uniapp使用vue3和ts开发小程序自定义tab栏,实现自定义凸出tabbar效果

要实现自定义的tabbar效果&#xff0c;可以使用自定义tab覆盖主tab来实现&#xff0c;当程序启动或者从后台显示在前台时隐藏自带的tab来实现。自定义一个tab组件&#xff0c;然后在里面实现自定义的逻辑。 组件中所使用的组件api可以看&#xff1a;Tabbar 底部导航栏 | uView…

Centos7下搭建H3C log服务器

rsyslogH3C 安装rsyslog服务器 关闭防火墙 systemctl stop firewalld && systemctl disable firewalld关闭selinux sed -i s/enforcing/disabled/ /etc/selinux/config && setenforce 0centos7服务器&#xff0c;通过yum安装rsyslog yum -y install rsysl…

【uniapp】六格验证码输入框实现

效果图 代码实现 <view><view class"tips">已发送验证码至<text class"tips-phone">{{ phoneNumber }}</text></view><view class"code-input-wrap"><input class"code-input" v-model"…

AI:75-基于生成对抗网络的虚拟现实场景增强

🚀 本文选自专栏:AI领域专栏 从基础到实践,深入了解算法、案例和最新趋势。无论你是初学者还是经验丰富的数据科学家,通过案例和项目实践,掌握核心概念和实用技能。每篇案例都包含代码实例,详细讲解供大家学习。 📌📌📌在这个漫长的过程,中途遇到了不少问题,但是…

[量化投资-学习笔记008]Python+TDengine从零开始搭建量化分析平台-CCI和ATR

目录 1. 指标简介CCIATR 2. 程序编写题外话 1. 指标简介 将这两个指标放在一起&#xff0c;一方面是因为这两个指标都属于摆动指数&#xff0c;可以反应市场的活跃度。 另一方面是因为CCI和ATR与之前提到的EMA,MACD,布林带的三个指标的计算基础不同。之前的三个指标都是以收盘…

坐标系转换(仅作记载)

一.极坐标转换为普通坐标系 参考&#xff1a;极坐标方程与直角坐标方程的互化 - 知乎 (zhihu.com) 公式&#xff1a;&#xff08;无需考虑象限引起的正负问题&#xff09; 普通坐标系转换为极坐标系 参考&#xff1a; 极坐标怎么与直角坐标系相互转化&#xff1f; - 知乎 (zh…

Docker本地镜像发布到阿里云或私有库

本地镜像发布到阿里云流程 &#xff1a; 1.自己生成个要传的镜像 2.将本地镜像推送到阿里云: 阿里云开发者平台:开放云原生应用-云原生&#xff08;Cloud Native&#xff09;-云原生介绍 - 阿里云 2.1.创建仓库镜像&#xff1a; 2.1.1 选择控制台&#xff0c;进入容器镜像服…

如何在Linux上部署1Panel运维管理面板并远程访问内网进行操作

文章目录 前言1. Linux 安装1Panel2. 安装cpolar内网穿透3. 配置1Panel公网访问地址4. 公网远程访问1Panel管理界面5. 固定1Panel公网地址 前言 1Panel 是一个现代化、开源的 Linux 服务器运维管理面板。高效管理,通过 Web 端轻松管理 Linux 服务器&#xff0c;包括主机监控、…

广和通5G模组FM650助力阿里云打造无影魔方Pro

随着云基础设施的完善及云电脑体验的不断优化&#xff0c;越来越多的个人和企业选择无影云电脑进行办公。基于云原生的云网端技术架构&#xff0c;无影云电脑相比传统PC&#xff0c;具有弹性、安全、保障个人数据等产品优势。 10月31日&#xff0c;阿里云在杭州云栖大会上宣布…

RSA 2048位算法的主要参数N,E,P,Q,DP,DQ,Qinv,D分别是什么意思 哪个是通常所说的公钥与私钥 -安全行业基础篇5

非对称加密算法RSA 在RSA 2048位算法中&#xff0c;常见的参数N、E、P、Q、DP、DQ、Qinv和D代表以下含义&#xff1a; N&#xff08;Modulus&#xff09;&#xff1a;模数&#xff0c;是两个大素数P和Q的乘积。N的长度决定了RSA算法的安全性。 E&#xff08;Public Exponent&a…

原神游戏干货分享:探索璃月的宝箱秘密,提高游戏资源获取效率!

《原神》是一款备受玩家喜爱的开放世界冒险游戏&#xff0c;而在游戏中获取资源是提升角色实力的重要途径。在这篇实用干货分享中&#xff0c;我们将介绍一些探索璃月地区的宝箱秘密&#xff0c;帮助你提高游戏资源获取的效率。 首先&#xff0c;璃月地区的宝箱分为普通宝箱和精…

本地部署企业邮箱,让企业办公更安全高效

随着信息化时代的到来&#xff0c;企业邮箱几乎成了企业办公的标配&#xff0c;承载着企业业务往来和办公协同的重要职能。基于安全性、个性化需求、系统集成等方面的需要&#xff0c;许多企业选择本地部署企业邮箱&#xff0c;本地化部署不仅能有效保障企业信息安全的同时&…

家用工作站方案:ThinkBook 14 2023 版

本篇文章聊聊今年双十一&#xff0c;我新购置的家用工作站设备&#xff1a;ThinkBook 14 2023&#xff0c;一台五千元价位&#xff0c;没有显卡的笔记本。我为什么选择它&#xff0c;它又能做些什么。 写在前面 2021 年年中的时候&#xff0c;我写过一篇《廉价的家用工作站方…

React向组件内部动态传入带内容的结构--props

children props&#xff1a;通过组件标签体传入结构 <A><B>xxx</B> </A> {this.props.children}render props&#xff1a;通过组件标签属性传入结构&#xff0c;一般用render函数属性 <A render{data> <C data{data}></C>}></…

5 Tensorflow图像识别(下)模型构建

上一篇&#xff1a;4 Tensorflow图像识别模型——数据预处理-CSDN博客 1、数据集标签 上一篇介绍了图像识别的数据预处理&#xff0c;下面是完整的代码&#xff1a; import os import tensorflow as tf# 获取训练集和验证集目录 train_dir os.path.join(cats_and_dogs_filter…

SQL Server SSIS ETL job执行相关操作

创建SSIS项目 Excel导入SQL Server 构建Excel源 配置Excel源信息 配置SQL Server目标 双击“ADO NET目标” job执行 新建job 右键“SQL Server代理”的“作业”&#xff0c;点击“新建作业”&#xff0c;弹出“新建作业”的选项页 首先是“常规”选项页&#xff0c;…