【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() 函数时,它会等待…...
uniapp 对接腾讯云IM群组成员管理(增删改查)
UniApp 实战:腾讯云IM群组成员管理(增删改查) 一、前言 在社交类App开发中,群组成员管理是核心功能之一。本文将基于UniApp框架,结合腾讯云IM SDK,详细讲解如何实现群组成员的增删改查全流程。 权限校验…...
2025年能源电力系统与流体力学国际会议 (EPSFD 2025)
2025年能源电力系统与流体力学国际会议(EPSFD 2025)将于本年度在美丽的杭州盛大召开。作为全球能源、电力系统以及流体力学领域的顶级盛会,EPSFD 2025旨在为来自世界各地的科学家、工程师和研究人员提供一个展示最新研究成果、分享实践经验及…...
python/java环境配置
环境变量放一起 python: 1.首先下载Python Python下载地址:Download Python | Python.org downloads ---windows -- 64 2.安装Python 下面两个,然后自定义,全选 可以把前4个选上 3.环境配置 1)搜高级系统设置 2…...
【android bluetooth 框架分析 04】【bt-framework 层详解 1】【BluetoothProperties介绍】
1. BluetoothProperties介绍 libsysprop/srcs/android/sysprop/BluetoothProperties.sysprop BluetoothProperties.sysprop 是 Android AOSP 中的一种 系统属性定义文件(System Property Definition File),用于声明和管理 Bluetooth 模块相…...
【HarmonyOS 5 开发速记】如何获取用户信息(头像/昵称/手机号)
1.获取 authorizationCode: 2.利用 authorizationCode 获取 accessToken:文档中心 3.获取手机:文档中心 4.获取昵称头像:文档中心 首先创建 request 若要获取手机号,scope必填 phone,permissions 必填 …...
【Go语言基础【12】】指针:声明、取地址、解引用
文章目录 零、概述:指针 vs. 引用(类比其他语言)一、指针基础概念二、指针声明与初始化三、指针操作符1. &:取地址(拿到内存地址)2. *:解引用(拿到值) 四、空指针&am…...
第7篇:中间件全链路监控与 SQL 性能分析实践
7.1 章节导读 在构建数据库中间件的过程中,可观测性 和 性能分析 是保障系统稳定性与可维护性的核心能力。 特别是在复杂分布式场景中,必须做到: 🔍 追踪每一条 SQL 的生命周期(从入口到数据库执行)&#…...
Web后端基础(基础知识)
BS架构:Browser/Server,浏览器/服务器架构模式。客户端只需要浏览器,应用程序的逻辑和数据都存储在服务端。 优点:维护方便缺点:体验一般 CS架构:Client/Server,客户端/服务器架构模式。需要单独…...
c++第七天 继承与派生2
这一篇文章主要内容是 派生类构造函数与析构函数 在派生类中重写基类成员 以及多继承 第一部分:派生类构造函数与析构函数 当创建一个派生类对象时,基类成员是如何初始化的? 1.当派生类对象创建的时候,基类成员的初始化顺序 …...
数据库正常,但后端收不到数据原因及解决
从代码和日志来看,后端SQL查询确实返回了数据,但最终user对象却为null。这表明查询结果没有正确映射到User对象上。 在前后端分离,并且ai辅助开发的时候,很容易出现前后端变量名不一致情况,还不报错,只是单…...
