当前位置: 首页 > news >正文

【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中,变量有三种使用方式:

  1. 声明指定具体变量类型,若不赋值,则变量会使用默认值;
  2. 不声明具体变量类型,编译器根据值自行判断变量类型
  3. 省略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语言数据类型

基本数据类型

  1. 数值型,又分为整数和浮点类型,整数类型有int,int8,int16,iunt32,int64,uint8,uint16,uint,uint32,uint64,浮点类型float32和float64,没有double,float32是单精度,float64是双精度。float是不受操作系统影响的,golang的浮点类型默认使用float64。
  2. 字符型,byte,保存单个字母字符,如果直接输出,输出的是ascii码对应的码值,需要用格式化输出打印业务值。go语言的字符使用utf8编码。
  3. 布尔型(bool),默认false。
  4. 字符串(string)(go语言中字符串是基本数据类型)。在go语言中,字符串一旦赋值,就是不可变的,不能修改其中某个位置的字符,但我们可以重新赋值。如果用双引号来初始化,会识别转义字符,用反引号会以原生字符串的形式输出,包括换行和特殊字符,可以实现防止攻击或输出源代码。默认为"".
  5. rune int32的别名,但区别是它是表示一个unicode的码点
  6. complex32 复数,还有complex64

基本数据类型的转换

go的类型转换必须显示转换,数据类型不会进行自动转换,这是与c和java不同的点。
转换方式:
T(v) 将v转成T类型
低精度与高精度之间也需要显示转换,go语言中基本数据类型的转换遵循以下原则:

  1. 被转换的是变量存储的数据,变量本身的数据类型并没有变化
  2. 被转换的类型可以从范围小转到范围大,如float32到float64,也可以范围大到范围小
  3. 范围大转范围小编译虽然不会报错,但可能会溢出
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语言派生数据类型。

派生数据类型

  1. 指针
  2. 数组
  3. 结构体
  4. 管道(channel)
  5. 函数
  6. 切片(slice)
  7. 接口
  8. 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脚本中有时候执行的操作可能会引发异常&#xff0c;为了直观的说明&#xff0c;这里举一个json反序列化的例子&#xff0c;脚本如下&#xff1a; #! /usr/bin/perl use v5.14; use JSON; use Data::Dumper;# 读取json字符串数据 my $json_str join(, <DATA>); # 反…...

『Redis』在Docker中快速部署Redis并进行数据持久化挂载

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

ubuntu创建apt-mirror本地仓库

首先创建apt-mirror的服务端&#xff0c;也就是存储所有apt-get下载的文件和依赖。大约需要300G&#xff0c;预留400G左右空间就可以开始了。 安装ubuntu省略&#xff0c;用的是ubuntu202204 ubuntu挂载硬盘&#xff08;不需要的可以跳过&#xff09;: #下载挂载工具 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的基础之上&#xff0c; 更强大的基础模型&#xff1a; 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实现快速排序算法

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

MAC配置环境变量

1、配置 JAVA JDK 1.1、查看 JDK 安装目录 &#xff08;1&#xff09;可以在Android Studio中查看&#xff0c;复制该路径 &#xff08;2&#xff09;也可以在官网下载 Java JDK下载地址 mac中的安装地址是"资源库->Java->JavaVirtualMachines"中 1.2、…...

系列五、DQL

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

【智能家居】七、人脸识别 翔云平台编程使用(编译openSSL支持libcurl的https访问、安装SSL依赖库openSSL)

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

基于node 安装express后端脚手架

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

Mrdoc知识文档

MrDoc知识文档平台是一款基于Python开发的在线文档系统&#xff0c;适合作为个人和中小型团队的私有云文档、云笔记和知识管理工具&#xff0c;致力于成为优秀的私有化在线文档部署方案。我现在主要把markdown笔记放在上面&#xff0c;因为平时老是需要查询一些知识点&#xff…...

C语言中getchar函数

在 C 语言中&#xff0c;getchar() 是一个标准库函数&#xff0c;用于从标准输入&#xff08;通常是键盘&#xff09;读取单个字符。它的函数原型如下&#xff1a; int getchar(void);getchar() 函数的工作原理如下&#xff1a; 当调用 getchar() 函数时&#xff0c;它会等待…...

接口测试中缓存处理策略

在接口测试中&#xff0c;缓存处理策略是一个关键环节&#xff0c;直接影响测试结果的准确性和可靠性。合理的缓存处理策略能够确保测试环境的一致性&#xff0c;避免因缓存数据导致的测试偏差。以下是接口测试中常见的缓存处理策略及其详细说明&#xff1a; 一、缓存处理的核…...

cf2117E

原题链接&#xff1a;https://codeforces.com/contest/2117/problem/E 题目背景&#xff1a; 给定两个数组a,b&#xff0c;可以执行多次以下操作&#xff1a;选择 i (1 < i < n - 1)&#xff0c;并设置 或&#xff0c;也可以在执行上述操作前执行一次删除任意 和 。求…...

2025 后端自学UNIAPP【项目实战:旅游项目】6、我的收藏页面

代码框架视图 1、先添加一个获取收藏景点的列表请求 【在文件my_api.js文件中添加】 // 引入公共的请求封装 import http from ./my_http.js// 登录接口&#xff08;适配服务端返回 Token&#xff09; export const login async (code, avatar) > {const res await http…...

Python如何给视频添加音频和字幕

在Python中&#xff0c;给视频添加音频和字幕可以使用电影文件处理库MoviePy和字幕处理库Subtitles。下面将详细介绍如何使用这些库来实现视频的音频和字幕添加&#xff0c;包括必要的代码示例和详细解释。 环境准备 在开始之前&#xff0c;需要安装以下Python库&#xff1a;…...

零基础设计模式——行为型模式 - 责任链模式

第四部分&#xff1a;行为型模式 - 责任链模式 (Chain of Responsibility Pattern) 欢迎来到行为型模式的学习&#xff01;行为型模式关注对象之间的职责分配、算法封装和对象间的交互。我们将学习的第一个行为型模式是责任链模式。 核心思想&#xff1a;使多个对象都有机会处…...

Unsafe Fileupload篇补充-木马的详细教程与木马分享(中国蚁剑方式)

在之前的皮卡丘靶场第九期Unsafe Fileupload篇中我们学习了木马的原理并且学了一个简单的木马文件 本期内容是为了更好的为大家解释木马&#xff08;服务器方面的&#xff09;的原理&#xff0c;连接&#xff0c;以及各种木马及连接工具的分享 文件木马&#xff1a;https://w…...

高效线程安全的单例模式:Python 中的懒加载与自定义初始化参数

高效线程安全的单例模式:Python 中的懒加载与自定义初始化参数 在软件开发中,单例模式(Singleton Pattern)是一种常见的设计模式,确保一个类仅有一个实例,并提供一个全局访问点。在多线程环境下,实现单例模式时需要注意线程安全问题,以防止多个线程同时创建实例,导致…...

基于Java+MySQL实现(GUI)客户管理系统

客户资料管理系统的设计与实现 第一章 需求分析 1.1 需求总体介绍 本项目为了方便维护客户信息为了方便维护客户信息&#xff0c;对客户进行统一管理&#xff0c;可以把所有客户信息录入系统&#xff0c;进行维护和统计功能。可通过文件的方式保存相关录入数据&#xff0c;对…...

基于IDIG-GAN的小样本电机轴承故障诊断

目录 🔍 核心问题 一、IDIG-GAN模型原理 1. 整体架构 2. 核心创新点 (1) ​梯度归一化(Gradient Normalization)​​ (2) ​判别器梯度间隙正则化(Discriminator Gradient Gap Regularization)​​ (3) ​自注意力机制(Self-Attention)​​ 3. 完整损失函数 二…...

比较数据迁移后MySQL数据库和OceanBase数据仓库中的表

设计一个MySQL数据库和OceanBase数据仓库的表数据比较的详细程序流程,两张表是相同的结构,都有整型主键id字段,需要每次从数据库分批取得2000条数据,用于比较,比较操作的同时可以再取2000条数据,等上一次比较完成之后,开始比较,直到比较完所有的数据。比较操作需要比较…...