【go语言实践一】go语言基础篇一
go语言基础
- 一些go语言学习辅助地址
- go代码运行方法
- go run xxx.go
- go build + xxx.go
- go语言编码规范
- go语言的{}的写法强制
- go语言注释
- go语言变量定义
- 多个全局变量的声明
- go语言数据类型
- 基本数据类型
- 基本数据类型的转换
- (其他)基本数据类型转string
- 1、使用fmt.Sprintf()转换
- 2、strconv包转换
- string转基本数据类型
- 使用strconv包的函数进行转换
- 小结
- 派生数据类型
- 如何打印变量数据类型
- 如何查看变量占用的字节数
- go语言中下划线_的用法
- import中使用_忽略引用包
- 函数返回使用_忽略返回值
一些go语言学习辅助地址
官方网站:
https://golang.google.cn/
https://golang.org/pkg – 官方标准api文档,可以查看所有包下函数和使用方法,官网里的tour按钮可以辅助运行观察,中文tour手册:
https://golang.google.cn/tour/welcome/1
go语言中文网:https://studygolang.com/?tab=golang
如何在官方文档上查看包里面的内容或函数
https://studygolang.com/pkgdoc
里面有go语言每个包的介绍及包内函数的介绍
go代码运行方法
go run xxx.go
直接命令执行go run加go源码文件即可运行,这种场景把编译运行都集合到一块了。
go build + xxx.go
使用go build编译生成可执行文件,然后跟c/c++可执行文件一样./xxx即可。默认以源码文件名作为可执行文件名,如果想自己命名,可以使用go build -o my_name xxx.go,-o参数可以指定输出名,跟c/c++是不是很类似。实际开发中都使用此方式。
go语言编码规范
go语言也有自己的编码开发要求,如:
- 源文件必须以go为扩展名
- 应用程序的执行入口函数是main函数
- 严格区分大小写
- go方法由一条条语句构成,每个语句后不需要分号,go语言会在每行后面自动加分号
- go编译器是一行行进行编译的,一行写一条语句,如果多条语句写在同一行就会报错
- go语言定义的变量和import的包如果没有用到,编译会报错
- 一行代码尽量不要超过80个字符
等等,另外值得注意的是,
go语言的{}的写法强制
func main() {//...
}
而不能
func main()
{//错误的写法
}
这样写编译器会报错
go语言注释
与c/c++注释风格一致,可以使用/**/块注释,也可以使用//行注释(一键注释crtl + /,重复按取消)
go语言变量定义
golang中,变量有三种使用方式:
- 声明指定具体变量类型,若不赋值,则变量会使用默认值;
- 不声明具体变量类型,编译器根据值自行判断变量类型
- 省略var
示例:
func main() {// 声明一个int类型变量var num int// 声明并初始化值var num int = 10// 声明一个变量并初始化为10.11,自动推导类型var num2 = 10.11// 省略var,等价于先声明再赋值:var name string name = "tom"// 注意,:=左侧的变量不能是已经声明过的,否则会编译出错name := "tom"// 一次性声明多个变量var n1, n2, n3 intvar n1, name, n3 = 100, "tom", 88n1,name, n3 := 100, "tom", 88
}
多个全局变量的声明
go语言的全局变量声明必要要有var关键字,但可以省略类型,使用自动类型推导
// 我们可以用以下方法声明全局变量并指定初始值
var n1 = 100
var n2 = 200
var name = "tom"
// 但实际中多个全局变量声明通常我们更便捷的写法如下下
var (n3 = 3n4 = 4name2 = "jack"
)
func main() {// ...
}
go语言数据类型
基本数据类型
- 数值型,又分为整数和浮点类型,整数类型有int,int8,int16,iunt32,int64,uint8,uint16,uint,uint32,uint64,浮点类型float32和float64,没有double,float32是单精度,float64是双精度。float是不受操作系统影响的,golang的浮点类型默认使用float64。
- 字符型,byte,保存单个字母字符,如果直接输出,输出的是ascii码对应的码值,需要用格式化输出打印业务值。go语言的字符使用utf8编码。
- 布尔型(bool),默认false。
- 字符串(string)(go语言中字符串是基本数据类型)。在go语言中,字符串一旦赋值,就是不可变的,不能修改其中某个位置的字符,但我们可以重新赋值。如果用双引号来初始化,会识别转义字符,用反引号会以原生字符串的形式输出,包括换行和特殊字符,可以实现防止攻击或输出源代码。默认为"".
- rune int32的别名,但区别是它是表示一个unicode的码点
- complex32 复数,还有complex64
基本数据类型的转换
go的类型转换必须显示转换,数据类型不会进行自动转换,这是与c和java不同的点。
转换方式:
T(v) 将v转成T类型
低精度与高精度之间也需要显示转换,go语言中基本数据类型的转换遵循以下原则:
- 被转换的是变量存储的数据,变量本身的数据类型并没有变化
- 被转换的类型可以从范围小转到范围大,如float32到float64,也可以范围大到范围小
- 范围大转范围小编译虽然不会报错,但可能会溢出
package main
import ("fmt"
)func main() {var i int = 100var n float32 = float(i)
}
(其他)基本数据类型转string
string与 基本数据类型与string转换实际工作中比较常见
1、使用fmt.Sprintf()转换
案例如下,其他的自行查阅官方文档
var num1 int = 10
str = fmt.Sprintf("%d", num1)
2、strconv包转换
需要import strconv,具体函数可以通过官方文档查阅
var num3 int64 = 888
var num4 float64 = 22.33
// 下面的10是10进制,需要二进制就用2
str = strconv.FormatInt(num3, 10)
// f格式,10表示小数点后10位
str = strconv.FormatFloat(num4, 'f', 10, 64)
此外也有个便捷的方法将int转成字符串:
Itoa()
string转基本数据类型
string转基本数据类型需要保证有效性,不能将“abcne"转成int,这样的转换golang会转成0
使用strconv包的函数进行转换
var str string = "true"
var b bool
// ParseBool返回两个值,我们使用_来忽略不关心的值
b, _ = strconv.ParseBool(str)
// 下面%v是按原生的方式进行打印
fmt.Printf("b type :%T, b=%v", b)
var str2 = 123456
var n1 int64
n1, _ = stronv.ParseInt(str2, 10, 64)
小结
go语言基础的数据类型基本上就以上内容,实际工作中需要用到时去api文档查阅即可,下一篇章讲述go语言派生数据类型。
派生数据类型
- 指针
- 数组
- 结构体
- 管道(channel)
- 函数
- 切片(slice)
- 接口
- map
如何打印变量数据类型
fmt.Printf("type n1:%T", n1)
如何查看变量占用的字节数
import ("fmt""unsafe"
)
// 返回的是字节数
fmt.Printf("n2 size:%d", unsafe.Sizeof(n2))
go语言中下划线_的用法
import中使用_忽略引用包
package main
// 使用_来忽略"fmt"包,如果"fmt"包没用到的话
import (_ "fmt"
)
函数返回使用_忽略返回值
// 假设myfunc有多个返回值,我们使用_忽略多余的返回值,只取我们关心的返回值
num1, _ = myfunc()
相关文章:
【go语言实践一】go语言基础篇一
go语言基础 一些go语言学习辅助地址go代码运行方法go run xxx.gogo build xxx.go go语言编码规范go语言的{}的写法强制 go语言注释 go语言变量定义多个全局变量的声明 go语言数据类型基本数据类型基本数据类型的转换(其他)基本数据类型转string1、使用fmt.Sprintf(…...

深度学习 Day12——P1实现mnist手写数字识别
🍨 本文为🔗365天深度学习训练营 中的学习记录博客🍖 原作者:K同学啊 | 接辅导、项目定制 文章目录 前言1 我的环境2 代码实现与执行结果2.1 前期准备2.1.1 引入库2.1.2 设置GPU(如果设备上支持GPU就使用GPU,否则使用C…...

【Docker实战】基于Dockerfile搭建LNMP+wordpress
一、项目背景和要求 公司在实际的生产环境中,需要使用Docker 技术在一台主机上创建LNMP服务并运行Wordpress网站平台。 然后对此服务进行相关的性能调优和管理工作 二、架构: nginx172.111.0.10docker-nginxmysql172.111.0.20docker-mysqlPHP172.111…...

【桌面应用开发】Tauri是什么?基于Rust的桌面应用
自我介绍 做一个简单介绍,酒架年近48 ,有20多年IT工作经历,目前在一家500强做企业架构.因为工作需要,另外也因为兴趣涉猎比较广,为了自己学习建立了三个博客,分别是【全球IT瞭望】,【…...
PHP的协程是什么?
PHP 的协程是一种轻量级的线程(或任务)实现,允许在一个进程中同时执行多个协程,但在任意时刻只有一个协程处于执行状态。协程可以看作是一种用户空间线程,由程序员显式地管理,而不是由操作系统内核进行调度…...

three.js 入门三:buffergeometry贴图属性(position、index和uvs)
环境: three.js 0.159.0 一、基础知识 geometry:决定物体的几何形状、轮廓;material:决定物体呈现的色彩、光影特性、贴图皮肤;mesh:场景中的物体,由geometry和materia组成;textu…...

Initial用法-FPGA入门3
Initial是什么 FPGA Initial是一种在FPGA中进行初始化的方法。在FPGA设备上,初始值决定了逻辑门的状态和寄存器的初始值。FPGA Initial可以通过设置初始值来控制电路在上电后的初始状态。 Initial的作用 2.1,控制电路启动时的初始状态 通过设置FPGA Ini…...

perl脚本中使用eval函数执行可能有异常的操作
perl脚本中有时候执行的操作可能会引发异常,为了直观的说明,这里举一个json反序列化的例子,脚本如下: #! /usr/bin/perl use v5.14; use JSON; use Data::Dumper;# 读取json字符串数据 my $json_str join(, <DATA>); # 反…...

『Redis』在Docker中快速部署Redis并进行数据持久化挂载
📣读完这篇文章里你能收获到 在Docke中快速部署Redis如何将Redis的数据进行持久化 文章目录 一、拉取镜像二、创建挂载目录1 宿主机与容器挂载映射2 挂载命令执行 三、创建容器—运行Redis四、查看运行情况 一、拉取镜像 版本号根据需要自己选择,这里以…...

ubuntu创建apt-mirror本地仓库
首先创建apt-mirror的服务端,也就是存储所有apt-get下载的文件和依赖。大约需要300G,预留400G左右空间就可以开始了。 安装ubuntu省略,用的是ubuntu202204 ubuntu挂载硬盘(不需要的可以跳过): #下载挂载工具 sudo apt…...
计算机网络 internet应用 (水
ARPA net ---Internet 前身 发展史: ARPA net 第一个主干网..美国军方NSFnet 美国国家科学基金会NSFANSnet 美国全国 (internet 叫法开始出现) 第二代互联网(现在() IP地址 IP地址 最高管理机构 - InterNIC IPV4 32位 IPV6 128位 域名 起名 解析 domain name sys…...

【ChatGLM3】第三代大语言模型多GPU部署指南
关于ChatGLM3 ChatGLM3是智谱AI与清华大学KEG实验室联合发布的新一代对话预训练模型。在第二代ChatGLM的基础之上, 更强大的基础模型: ChatGLM3-6B 的基础模型 ChatGLM3-6B-Base 采用了更多样的训练数据、更充分的训练步数和更合理的训练策略。在语义、…...
云原生Kubernetes系列 | Docker/Kubernetes的卷管理
云原生Kubernetes系列 | Docker/Kubernetes的卷管理 1. Docker卷管理2. Kubernetes卷管理2.1. 本地存储2.1.1. emptyDir2.1.2. hostPath2.2. 网络存储2.2.1. 使用NFS2.2.2. 使用ISCSI2.3. 持久化存储2.3.1. PV和PVC2.3.2. 访问模式2.3.3. 回收策略1. Docker卷管理...

Java实现快速排序算法
快速排序算法 (1)概念:快速排序是指通过一趟排序将要排序的数据分割成独立的两部分,其中一部分的所有数据都比另外一部分的所有数据都要小,然后再按此方法对这两部分数据分别进行快速排序。整个排序过程可以递归进行&…...

MAC配置环境变量
1、配置 JAVA JDK 1.1、查看 JDK 安装目录 (1)可以在Android Studio中查看,复制该路径 (2)也可以在官网下载 Java JDK下载地址 mac中的安装地址是"资源库->Java->JavaVirtualMachines"中 1.2、…...

系列五、DQL
一、DQL 1.1、概述 DQL的英文全称为:Data Query Language,中文意思为:数据查询语言,用大白话讲就是查询数据。对于大多数系统来说,查询操作的频次是要远高于增删改的,当我们去访问企业官网、电商网站&…...

【智能家居】七、人脸识别 翔云平台编程使用(编译openSSL支持libcurl的https访问、安装SSL依赖库openSSL)
一、翔云 人工智能开放平台 API文档开发示例下载 二、编译openSSL支持libcurl的https访问 安装SSL依赖库openSSL(使用工具wget)libcurl库重新配置,编译,安装运行(运行需添加动态库为环境变量) 三、编程实现人脸识别 四、Base6…...

基于node 安装express后端脚手架
1.首先创建文件件 2.在文件夹内打开终端 npm init 3.安装express: npm install -g express-generator注意的地方:这个时候安装特别慢,最后导致不成功 解决方法:npm config set registry http://registry.npm.taobao.org/ 4.依次执行 npm install -g ex…...

Mrdoc知识文档
MrDoc知识文档平台是一款基于Python开发的在线文档系统,适合作为个人和中小型团队的私有云文档、云笔记和知识管理工具,致力于成为优秀的私有化在线文档部署方案。我现在主要把markdown笔记放在上面,因为平时老是需要查询一些知识点ÿ…...
C语言中getchar函数
在 C 语言中,getchar() 是一个标准库函数,用于从标准输入(通常是键盘)读取单个字符。它的函数原型如下: int getchar(void);getchar() 函数的工作原理如下: 当调用 getchar() 函数时,它会等待…...

TDengine 快速体验(Docker 镜像方式)
简介 TDengine 可以通过安装包、Docker 镜像 及云服务快速体验 TDengine 的功能,本节首先介绍如何通过 Docker 快速体验 TDengine,然后介绍如何在 Docker 环境下体验 TDengine 的写入和查询功能。如果你不熟悉 Docker,请使用 安装包的方式快…...

.Net框架,除了EF还有很多很多......
文章目录 1. 引言2. Dapper2.1 概述与设计原理2.2 核心功能与代码示例基本查询多映射查询存储过程调用 2.3 性能优化原理2.4 适用场景 3. NHibernate3.1 概述与架构设计3.2 映射配置示例Fluent映射XML映射 3.3 查询示例HQL查询Criteria APILINQ提供程序 3.4 高级特性3.5 适用场…...
高效线程安全的单例模式:Python 中的懒加载与自定义初始化参数
高效线程安全的单例模式:Python 中的懒加载与自定义初始化参数 在软件开发中,单例模式(Singleton Pattern)是一种常见的设计模式,确保一个类仅有一个实例,并提供一个全局访问点。在多线程环境下,实现单例模式时需要注意线程安全问题,以防止多个线程同时创建实例,导致…...
Xen Server服务器释放磁盘空间
disk.sh #!/bin/bashcd /run/sr-mount/e54f0646-ae11-0457-b64f-eba4673b824c # 全部虚拟机物理磁盘文件存储 a$(ls -l | awk {print $NF} | cut -d. -f1) # 使用中的虚拟机物理磁盘文件 b$(xe vm-disk-list --multiple | grep uuid | awk {print $NF})printf "%s\n"…...
C++.OpenGL (14/64)多光源(Multiple Lights)
多光源(Multiple Lights) 多光源渲染技术概览 #mermaid-svg-3L5e5gGn76TNh7Lq {font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}#mermaid-svg-3L5e5gGn76TNh7Lq .error-icon{fill:#552222;}#mermaid-svg-3L5e5gGn76TNh7Lq .erro…...
Bean 作用域有哪些?如何答出技术深度?
导语: Spring 面试绕不开 Bean 的作用域问题,这是面试官考察候选人对 Spring 框架理解深度的常见方式。本文将围绕“Spring 中的 Bean 作用域”展开,结合典型面试题及实战场景,帮你厘清重点,打破模板式回答,…...
SQL Server 触发器调用存储过程实现发送 HTTP 请求
文章目录 需求分析解决第 1 步:前置条件,启用 OLE 自动化方式 1:使用 SQL 实现启用 OLE 自动化方式 2:Sql Server 2005启动OLE自动化方式 3:Sql Server 2008启动OLE自动化第 2 步:创建存储过程第 3 步:创建触发器扩展 - 如何调试?第 1 步:登录 SQL Server 2008第 2 步…...
Docker拉取MySQL后数据库连接失败的解决方案
在使用Docker部署MySQL时,拉取并启动容器后,有时可能会遇到数据库连接失败的问题。这种问题可能由多种原因导致,包括配置错误、网络设置问题、权限问题等。本文将分析可能的原因,并提供解决方案。 一、确认MySQL容器的运行状态 …...

Sklearn 机器学习 缺失值处理 获取填充失值的统计值
💖亲爱的技术爱好者们,热烈欢迎来到 Kant2048 的博客!我是 Thomas Kant,很开心能在CSDN上与你们相遇~💖 本博客的精华专栏: 【自动化测试】 【测试经验】 【人工智能】 【Python】 使用 Scikit-learn 处理缺失值并提取填充统计信息的完整指南 在机器学习项目中,数据清…...

rknn toolkit2搭建和推理
安装Miniconda Miniconda - Anaconda Miniconda 选择一个 新的 版本 ,不用和RKNN的python版本保持一致 使用 ./xxx.sh进行安装 下面配置一下载源 # 清华大学源(最常用) conda config --add channels https://mirrors.tuna.tsinghua.edu.cn…...