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 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.mfbz.cn/a/129331.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

MIPSsim模拟器 使用说明

&#xff08;一&#xff09; 启动模拟器 双击MIPSsim.exe&#xff0c;即可启动该模拟器。模拟器启动时&#xff0c;自动将自己初始化为默认状态。所设置的默认值为&#xff1a; u所有通用寄存器和浮点寄存器为全0&#xff1b; u内存清零&#xff1b; u流水寄存器为全0&#xff…

C++结构体定义 创建 赋值 结构体数组 结构体指针 结构体嵌套结构体

结构体是什么&#xff1f; struct是自定义数据类型&#xff0c;是一些类型集合组成的一个类型。结构体的定义方式 #include<iostream> using namespace std;struct Student {string name;int age;int score; };创建结构体变量并赋值 方式一&#xff0c;先创建结构体变…

基于springboot+vue开发的教师工作量管理系

教师工作量管理系 springboot31 源码合集&#xff1a;www.yuque.com/mick-hanyi/javaweb 源码下载&#xff1a;博主私 摘要 随着信息技术在管理上越来越深入而广泛的应用&#xff0c;管理信息系统的实施在技术上已逐步成熟。本文介绍了教师工作量管理系统的开发全过程。通过…

人工智能技术的高速发展,普通人如何借助AI实现弯道超车?

人工智能技术的高速发展&#xff0c;普通人如何借助AI实现弯道超车&#xff1f; 随着互联网信息传播的爆炸&#xff0c;人类科技文明的快速发展“人工智能”成为新的话题&#xff0c;科技的进步也让普通人觉得自己与社会脱节&#xff0c;找工作越来越难&#xff0c;创业越来越难…

Python使用Numba装饰器进行加速

Python使用Numba装饰器进行加速 前言前提条件相关介绍实验环境Numba装饰器进行加速未加速的代码输出结果 numba.jit加速的代码输出结果 前言 由于本人水平有限&#xff0c;难免出现错漏&#xff0c;敬请批评改正。更多精彩内容&#xff0c;可点击进入Python日常小操作专栏、Ope…

Aspose.OCR for .NET 2023Crack

Aspose.OCR for .NET 2023Crack 为.NET在图片上播放OCR使所有用户和程序员都可以从特定的图像片段中提取文本和相关的细节&#xff0c;如字体、设计以及书写位置。这一特定属性为OCR的性能及其在扫描遵循排列的记录时的功能提供了动力。OCR的库使用一条线甚至几条线来处理这些特…

什么是证书管理

在自带设备和物联网文化的推动下&#xff0c;数字化使连接到互联网的设备数量空前加速。在企业网络环境中&#xff0c;每个在线运行的设备都需要一个数字证书来证明其合法性和安全运行。这些数字证书&#xff08;通常称为 X.509 证书&#xff09;要么来自称为证书颁发机构 &…

长虹智能电视使用123

1、开机 在接通电源的情况下&#xff0c;长虹智能电视开机有两种方式。 方式1&#xff1a; 按电视右下角开机按钮 方式2&#xff1a; 按电视遥控器开机按钮 长虹智能电视开机后会进入其操作系统&#xff08;安卓&#xff09;。 屏幕左右双箭头图表&#xff0c;手指点击会…

力扣876:链表的中间结点

力扣876&#xff1a;链表的中间结点 题目描述&#xff1a; 给你单链表的头结点 head &#xff0c;请你找出并返回链表的中间结点。 如果有两个中间结点&#xff0c;则返回第二个中间结点。 示例 1&#xff1a; 输入&#xff1a;head [1,2,3,4,5] 输出&#xff1a;[3,4,5]…

无线优化之RRM模板

一、简介 RRM即,Radio Resource Management,射频资源管理 WLAN技术是以射频信号(如2.4G/5G的无线电磁波)作为传输介质,无线电磁波在传输过程中因周围环境导致无线信号衰减,从而影响无线用户上网的服务质量。 RRM模板主要用于保持最优的频射资源状态,自动检查周围无线…

二十四、城市建成区提取结果制图——建成区出图

一、前言 其实制图这一系列文章主要是为了照顾初学者,因为很多初学者并不是特别熟悉GIS平台一些操作,可能对于初步的制图有一定了解,但是对于一些稍微看起来高级并且复杂一点的图如何制作?例如下面这种多景的制作,其实吧万变不离其宗,这种仅仅只是拼接多幅数据框在一起,…

关于css 推荐几个超好看渐变色!

1.多彩糖果渐变 background: linear-gradient(135deg, #ff00cc, #ffcc00, #00ffcc, #ff0066);这个渐变色使用了多个鲜艳的颜色&#xff0c;从紫红色 (#ff00cc) 渐变到橙色 (#ffcc00)&#xff0c;然后到青色 (#00ffcc)&#xff0c;最后到鲜艳的粉红色 (#ff0066)。它给人一种快乐…

为啥$p(w|D)=p(y|X,w)$?

为啥 p ( w ∣ D ) p ( y ∣ X , w ) p(w|D)p(y|X,w) p(w∣D)p(y∣X,w)&#xff1f; p ( w ∣ X , y ) p ( w ∣ D ) p(w|X,y)p(w|D) p(w∣X,y)p(w∣D), p ( w ∣ D ) p ( D , w ) / p ( D ) p(w|D)p(D,w)/p(D) p(w∣D)p(D,w)/p(D)为啥 p ( D ∣ w ) p ( y ∣ X , w ) p(D|…

kubernetes istio

目录 一、部署 二、部署示例应用 三、部署遥测组件 四、流量管理 五、熔断 官网&#xff1a;https://istio.io/latest/zh/about/service-mesh/ 一、部署 提前准备好文件 tar zxf 15t10-1.19.3-linux-amd64.tar.gz cd 15t10-1.19.3/ export PATH$PWD/bin:$PATHistioctl install …

强化学习 - DQN及进化过程(Double DQN,Dueling DQN)

1.DQN 1.1概念 DQN相对于Q-Learning进行了三处改进&#xff1a; 1.引入神经网络&#xff1a;如下图所示希望能从状态S中提取Q(s,a) 2.经验回放机制&#xff1a;连续动作空间采样时&#xff0c;前后数据具有强关联性&#xff0c;而神经网络训练时要求数据之间具有独立同分布特性…

数据结构:AVL树的旋转(高度平衡树)

1、AVL树简介 AVL树是最先发明的自平衡二叉查找树。在AVL树中任何节点的两个子树的高度最大差别为1&#xff0c;所以它也被称为高度平衡树。增加和删除可能需要通过一次或多次树旋转来重新平衡这个树。AVL树得名于它的发明者G. M. Adelson-Velsky和E. M. Landis&#xff0c;他们…

CSS3渐变颜色

CSS3 渐变可以让你在两个或多个指定的颜色之间显示平稳的过渡。 CSS3渐变有两种类型&#xff1a;线性渐变&#xff08;Linear Gradients&#xff09;和径向渐变&#xff08;Radial Gradients&#xff09;。 线性渐变&#xff08;Linear Gradients&#xff09;&#xff1a; 线性…

MSVCP140_CODECVT_IDS.dll丢失怎么办?推荐三个解决方法帮你解决

MSVCP140_CODECVT_IDS.dll是Microsoft Visual C 2015 Redistributable的一个组件&#xff0c;它包含了一些运行时库文件。当您在运行某些程序时&#xff0c;可能会遇到“msvcp140_codecvt_ids.dll丢失”的错误提示。为了解决这个问题&#xff0c;您可以尝试以下三种方法&#x…

CH11_重构API

将查询函数和修改函数分离&#xff08;Separate Query from Modifier&#xff09; function getTotalOutstandingAndSendBill() {const result customer.invoices.reduce((total, each) > each.amount total, 0);sendBill();return result; }function totalOutstanding() …

Adobe ME下载、Media Encoder下载

Media Encoder 2021 是一款可以帮助Adobepremiere pro和Adobe After Effects的用户使用集成视频编码器进行创作的视频和音频编码软件。Media Encoder 2021 mac新版本中针对上一个版本进行了多方面的改进与优化&#xff0c;提升了软件的性能与支持文件格式提升&#xff0c;有需要…