【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()

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/216448.shtml

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

相关文章

单片双向马达驱动芯片D6208的芯片描述

D6208 是一块单片双向马达驱动电路,它使用TTL电平的逻辑信号就能控制卡式录音机和其它电子设备中的双向马达。该电路由一个逻辑部分和一个功率输出部分组成。逻辑部分控制马达正、反转向及制动,功率输出部分根据逻辑控制能提供100mA(典型值&a…

prometheus-相关应用服务脚本

为方便管理prometheus及相关的各应用管理,将配置为系统服务进行管理,以下是常用的服务脚本 一、prometheus 目录文件 cat /usr/lib/systemd/system/prometheus.service [Unit] DescriptionPrometheus Documentationhttps://prometheus.io/ Afternetwor…

[PyTorch][chapter 6][李宏毅深度学习][Logistic Regression]

前言: logistic回归又称logistic回归分析,是一种广义的线性回归分析模型,常用于数据挖掘,疾病自动诊断,经济预测等领域。 逻辑回归根据给定的自变量数据集来估计事件的发生概率,由于结果是一个概率&#xf…

【docker 】 安装docker(centOS7)

官网 docker官网 github源码 官网 在CentOS上安装Docker引擎 官网 在Debian上安装Docker引擎 官网 在 Fedora上安装Docker引擎 官网 在ubuntu上安装Docker引擎 官网 在RHEL (s390x)上安装Docker引擎 官网 在SLES上安装Docker引擎 最完善的资料都在官网。 卸载旧版本 …

LeetCode-503. 下一个更大元素 II【栈 数组 单调栈】

LeetCode-503. 下一个更大元素 II【栈 数组 单调栈】 题目描述:解题思路一:单调栈。思路是利用循环数组来维护一个单调递减栈,遇到当前元素比栈顶元素大的就出栈,在出栈的时候维护出栈元素的结果(即当前元素是出栈元素…

异地现场工控设备,如何实现远程配置、调试?

南京某企业专注于工业物联领域,在相关项目中往往会在各个点位部署基于Linux系统的中控主机,实现各类物联设备信息的采集、汇总。但是,由于各点位分散多地,且数量达到了上百个,虽然中控主机具备4G物联网接入能力&#x…

代码随想录Day49——121. 买卖股票的最佳时机 122.买卖股票的最佳时机II

121. 买卖股票的最佳时机 给定一个数组 prices ,它的第 i 个元素 prices[i] 表示一支给定股票第 i 天的价格。 你只能选择 某一天 买入这只股票,并选择在 未来的某一个不同的日子 卖出该股票。设计一个算法来计算你所能获取的最大利润。 返回你可以从…

Vue3-07-样式绑定-style绑定的写法总结

style 绑定的方式 1.html中直接一个属性一个属性的写; 2.直接绑定一个对象; 3.绑定一个包含多个样式对象的数组。style绑定样式的注意点 推荐使用 驼峰命名 规则来编写样式的名称,如 : fontSize:12px; 如果使用 中线分割的规则时…

医美行业-上游厂商的营销规模分析与测算

一、医美行业整体发展趋势:轻医美逐步占领市场,占比逐年增加,规模增速远超手术类医美 从2019年开始医美行业扩张速度放缓,2020年受疫情影响中国美容用户的医美行为有所减少,增速放缓至9.9%,随着疫情的好转及…

计算机组成原理-堆栈寻址

文章目录 堆栈寻址软堆栈vs硬堆栈小结 堆栈寻址 栈结构后进后出 软堆栈vs硬堆栈 硬堆栈用寄存器实现 软堆栈就是用内存实现 小结 入栈和出栈即栈顶元素位置的变化不同

C++11中std::async的使用详解

C11中的std::async是个模板函数。std::async异步调用函数,在某个时候以Args作为参数(可变长参数)调用Fn,无需等待Fn执行完成就可返回,返回结果是个std::future对象。Fn返回的值可通过std::future对象的get成员函数获取。一旦完成Fn的执行&…

【计算机网络】滑动窗口 流量控制 拥塞控制 概念概述

参考资料:计算机网络第八版-视频课程

LabVIEW实时建模检测癌细胞的异常

LabVIEW实时建模检测癌细胞的异常 癌症是全球健康的主要挑战之一,每年导致许多人死亡。世界卫生组织指出,不健康的生活方式和日益严重的环境污染是癌症发生的主要原因之一。癌症的发生通常与基因突变有关,这些突变导致细胞失去正常的增长和分…

记录 | 解决报错:version `GLIBC_2.25` not found

可以看出来应该是我们的 GLIBC 版本过低的原因造成的,下面我们用命令查看 glibc 的版本 strings /usr/lib64/libc.so.6 |grep GLIBC_或者strings /lib/x86_64-linux-gnu/libc.so.6 |grep GLIBC_比如类似输出: GLIBC_2.2.5 GLIBC_2.2.6 GLIBC_2.3 GLIBC…

java--Map集合的遍历方式

1.Map集合的遍历方式之一:需要用的Map的如下方法 2.Map集合的遍历方式二:键值对 3.Map集合的遍历方式三:Lambda 需要用的Map的如下方法

C#学习相关系列之yield和return的区别

在C#中,yield和return都是用于控制程序流程的关键字,但它们的使用方式和目的有所不同。return关键字用于从当前的函数或方法返回,并可以返回一个值。 public int Add(int a, int b) { return a b; } 此时该函数返回的是ab的和&#x…

es6 中的箭头函数和普通函数有什么区别?

1、普通函数中的 this 总是指向调用它的那个对象, 箭头函数没有自己的 this,他的 this 永远指向其定义环境,任何方法都改变不了其指向,如 call()、bind()、apply()。(正是因为它没有 this,所以也就不能用作构造函数&a…

mybatis-plus使用达梦数据库处理枚举类型报错的问题

使用mybatis-plus连接达梦数据库&#xff0c;枚举类型无法读取 枚举类&#xff1a; 实体&#xff1a; 数据库字段&#xff1a; mybatis-plus枚举包配置&#xff1a; 调用查询方法&#xff1a; List<QualityRuleTemplate> qualityRuleTemplates ruleTemplateServic…

可视化监控云平台/智能监控EasyCVR如何使用脚本创建ramdisk挂载并在ramdisk中临时运行

视频云存储/安防监控EasyCVR视频汇聚平台基于云边端智能协同&#xff0c;支持海量视频的轻量化接入与汇聚、转码与处理、全网智能分发、视频集中存储等。安防管理视频平台EasyCVR拓展性强&#xff0c;视频能力丰富&#xff0c;具体可实现视频监控直播、视频轮播、视频录像、云存…

cookies,sessionStorage 和 localStorage 的区别

sessionStorage 和 localStorage 是 HTML5 Web Storage API 提供的&#xff0c;可以方便的在 web 请求之间保存数据。有了本地数据&#xff0c;就可以避免数据在浏览器和服务器间不必要地来回传递。sessionStorage、localStorage、cookie 都是在浏览器端存储的数据&#xff0c;…