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.mzph.cn/news/136252.shtml

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

相关文章

win10语言切换调整为像win7一样,设置纯英文键盘切换,使用ctrol+shift切换键盘

文章目录 引入键盘布局说明安装美式键盘去掉微软键盘&#xff0c;修改布局切换快捷键最终效果 引入 我们在玩游戏或者写代码的时候&#xff0c;常常需要使用shift键&#xff0c;而输入法的shift键常常是中英切换按键&#xff0c;这就让人非常不爽了&#xff0c;这里仿照在win7…

【Git】快速入门安装及使用git与svn的区别常用命令

一、导言 1、什么是svn&#xff1f; SVN是Subversion的简称&#xff0c;是一个集中式版本控制系统。与Git不同&#xff0c;SVN没有分布式的特性。在SVN中&#xff0c;项目的代码仓库位于服务器上&#xff0c;团队成员通过向服务器提交和获取代码来实现版本控制。SVN记录了每个文…

Android Glide transform旋转rotate圆图CircleCrop,Kotlin

Android Glide transform旋转rotate圆图CircleCrop&#xff0c;Kotlin import android.graphics.Bitmap import android.os.Bundle import android.util.Log import android.widget.ImageView import androidx.appcompat.app.AppCompatActivity import com.bumptech.glide.load…

基于单片机的养殖场温度控制系统设计

博主主页&#xff1a;单片机辅导设计 博主简介&#xff1a;专注单片机技术领域和毕业设计项目。 主要内容&#xff1a;毕业设计、简历模板、学习资料、技术咨询。 文章目录 主要介绍一、控制系统设计二、系统方案设计2.1 系统运行方案设计2.1.1 羊舍环境温度的确定 三、 系统仿…

Leetcode—226.翻转二叉树【简单】

2023每日刷题&#xff08;二十四&#xff09; Leetcode—226.翻转二叉树 实现代码 /*** Definition for a binary tree node.* struct TreeNode {* int val;* TreeNode *left;* TreeNode *right;* TreeNode() : val(0), left(nullptr), right(nullptr) {}* …

【解决方案】vue 项目 npm run dev 时报错:‘cross-env‘ 不是内部或外部命令,也不是可运行的程序

报错 cross-env 不是内部或外部命令&#xff0c;也不是可运行的程序 或批处理文件。 npm ERR! code ELIFECYCLE npm ERR! errno 1 npm ERR! estate1.0.0 dev: cross-env webpack-dev-server --inline --progress --config build/webpack.dev.conf.js npm ERR! Exit status 1 np…

vue-router路由守卫进阶

vue-router路由守卫进阶 路由守卫&#xff0c;可以想象为古代御前侍卫&#xff0c;路由守卫&#xff0c;则是对路由进行权限控制 分类&#xff1a;全局守卫、独享守卫、组件内守卫 全局前置-路由守卫 作用&#xff1a;主要用来鉴权 用户点击导航区&#xff0c;随后引起路径的…

kubernetes (k8s)的使用

一、kubernetes 简介 谷歌2014年开源的管理工具项目&#xff0c;简化微服务的开发和部署。 提供功能&#xff1a;自愈和自动伸缩、调度和发布、调用链监控、配置管理、Metrics监控、日志监控、弹性和容错、API管理、服务安全等。官网&#xff1a;https://kubernetes.io/zh-cn…

后入能先出,一文搞懂栈

目录 什么是栈数组实现链表实现栈能这么玩总结 什么是栈 栈在我们日常编码中遇到的非常多&#xff0c;很多人对栈的接触可能仅仅局限在 递归使用的栈 和 StackOverflowException&#xff0c;栈是一种后进先出的数据结构(可以想象生化金字塔的牢房和生化角斗场的狗洞)。 栈&…

洛谷P5731 【深基5.习6】蛇形方阵java版题解

import java.util.Arrays; import java.util.Scanner;// 给出一个不大于9的正整数n&#xff0c;输出nn的蛇形方阵。 public class Main {public static void main(String[] args) {Scanner sc new Scanner(System.in);int n sc.nextInt();int[][] a new int[n][n];int total…

MySQL中表格的自我复制,与复制表格

先创建一个空表&#xff0c;my_tab01 CREATE TABLE my_tab01(id INT ,name VARCHAR(32),sal DOUBLE,job VARCHAR(32),deptno INT); SELECT * FROM my_tab01;准备一张有数据的表格&#xff1a; 将另一张表格的数据插入到my_tab01的表格中&#xff1a; -- 演示如何自我复制 --…

前端项目导入vue和element

1.安装nodejs 下载链接https://cdn.npmmirror.com/binaries/node/v18.18.0/node-v18.18.0-x64.msi 进入cmd 命令行模式 管理员身份运行 输入 &#xff08;node -v&#xff09;能看到版本号 npm config set prefix "C:\Program Files\nodejs" 默认路径 npm config…

刚柔相济铸伟业 ——访湖南顺新金属制品科技有限公司董事长张顺新

时代在变&#xff0c;唯初心不改。 精致、谦虚、谨慎、儒雅、温和——他就是张顺新&#xff0c;湖南顺新金属制品科技有限公司、湖南顺新供应链管理有限公司董事长&#xff0c;民建长沙市委常委&#xff0c;民建湖南省环资委副主任&#xff0c;省、市民建企联会常务副会长&…

基于SSM+Vue的随心淘网管理系统

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

官方Redis视图化工具Redisinsight

一、下载最新版本的 docker pull redislabs/redisinsight mkdir /data/redisinsight docker run -d -u root -p 8001:8001 -v /etc/localtime:/etc/localtime -v /data/redisinsight:/db --restartunless-stopped redislabs/redisinsight:latest 二、浏览器打开 http://192…

自动化测试(Java+eclipse)教程

webdriver环境配置 1.下载chromedriver到本地&#xff08;一定要选择和自己浏览器相对应的版本chromedriver下载地址&#xff09; 2.加入到环境变量path中 webdriver工作原理 创建web自动化测试脚本 1.Maven项目创建 File->New->project->(搜索maven)选择maven pr…

爱家房产网站源码 爱家房产网商业版 微信互动营销整合+手机触屏版+经纪人分销

房产网站源码手机访问自动转手机版修改修复如下&#xff1a; 1&#xff0c;修复手机版首页标题头部名称 2&#xff0c;修复手机版首页频道导航按钮 3&#xff0c;新增手机版广告位置显示方式 4&#xff0c;修复手机版首页内容显示样式 5&#xff0c;手机版头部背景颜色ic…

什么是观察者模式?用 Python 如何实现 Observer(观察者或发布订阅)对象行为型模式?

什么是观察者模式&#xff1f; 观察者模式&#xff08;Observer pattern&#xff09;是一种行为型设计模式&#xff0c;它允许对象之间建立一种一对多的依赖关系&#xff0c;当一个对象的状态发生变化时&#xff0c;其相关依赖对象都会得到通知并自动更新。 在观察者模式中&am…

三天打鱼两天晒网

文章目录 前言一、题目描述 二、题目分析 三、解题 程序运行代码 前言 本系列为选择结构编程题&#xff0c;点滴成长&#xff0c;一起逆袭。 一、题目描述 二、题目分析 三、解题 程序运行代码 #include<stdio.h> int main(){int n;scanf("%d",&n);i…

Go 接口:Go中最强大的魔法,接口应用模式或惯例介绍

Go 接口&#xff1a;Go中最强大的魔法,接口应用模式或惯例介绍 文章目录 Go 接口&#xff1a;Go中最强大的魔法,接口应用模式或惯例介绍一、前置原则二、一切皆组合2.1 一切皆组合2.2 垂直组合2.2.1 第一种&#xff1a;通过嵌入接口构建接口2.2.2 第二种&#xff1a;通过嵌入接…