Golang基础-1

人大金仓数据库Kingbase FlySync同步程序安装 Kingbase FlySync同步程序(以下简称 KFS)是面向异地容灾、数据集中共享的场景推出的具备在异构数据平台间实现实时、增量数据同步的工具类产品,主要采用了物理日志解析技术,帮助用户解决不同数据平台的数据间可实现任意方向实时移动流转的问题,并保证此过程中数据不丢失,状态可监控,流转数据量可统计。KFS 需要安装的主要组件有 2 个,分别是后端同步程序和管理控制平台,另外KFS的部署方式也有2种,为分离部署何集中部署•集中部署:KFS与数据库部署在同一机器上。 阅读详情

Go语言基础

介绍

基础

介绍

  • 本文介绍Go语言中变量命名规则、变量使用、变量的数据类型、枚举类型等相关知识。

基础

1. 变量命名规则
  • 变量名称必须以字母或下划线开始,后面可以跟任意数量的字母、数字或下划线,且变量名称区分大小写。
  • 不能使用保留关键字作为变量名。
  • 变量的命名一般遵循驼峰命名法(Camel Case)或者短横线分隔命名法(snake_case)。

驼峰命名法:
首单词首字母小写,后面的单词首字母大写(也称为驼峰式大小写或者驼峰记法),如:myName。
短横线分隔命名法:
所有字母都是小写,单词之间用短横线分隔,如:my-name。

var myName string         // 驼峰命名法
var my_name string        // 短横线分隔命名法
var user_id int           // 短横线分隔命名法,常用于导出变量
var userID int            // 驼峰命名法,常用于导出变量
const MaxConnections = 10 // 导出常量,驼峰命名法
2. 变量的使用
  • 变量基本使用示例
package main

import (
	"fmt"
)

// 全局变量,
var g1 int = 10

func main() {
	fmt.Println("----------局部变量----------")
	// 变量定义、赋值
	var age int8 = 18
	fmt.Println(age)

	// 变量定义,使用默认初始值
	var age2 int
	fmt.Println(age2)

	/*
		// go1.22版本报错,should merge variable declaration with assignment on next line (S1021)
		var age3 int
		age3 = 20
		fmt.Println(age3)
	*/

	// 变量定义、使用、赋值
	var age3 int
	fmt.Println(age3)
	age3 = 20
	fmt.Println(age3)

	// 变量类型自动推导
	var age4 = 30
	fmt.Println(age4)

	// 短变量定义,自动类型推导
	age5 := 40
	fmt.Println(age5)

	// 定义多个变量,使用默认初始化
	var n1, n2, n3 int
	fmt.Println(n1, ", ", n2, ", ", n3)

	// 定义多个变量,同时初始化,自动推导类型
	var m1, m2, m3 = 12, "MMM", 54
	fmt.Println(m1, ", ", m2, ", ", m3)

	// 短变量定义多个变量,自动推导类型
	s1, s2, s3 := 12, "MMM", 54
	fmt.Println(s1, ", ", s2, ", ", s3)

	// 定义多个变量,多用于全局变量
	var (
		v1 int
		v2 string
	)

	v1 = 16
	v2 = "4545"

	fmt.Println(v1, ", ", v2)

	// 常量,值不可改变
	const c1 int = 18
	fmt.Println(c1)
	// c1 = 10, 错误:cannot assign to c1 (neither addressable nor a map index expression) (compile)

	fmt.Println("----------全局变量----------")

	// 打印全局变量
	fmt.Println(g1)
}
  • 一些注意事项
    |- 变量赋值时类型不匹配会报错;变量声明后不使用会报错;变量重复声明会报错;
    |- 全局变量名称首字母大写可导出包,供其它包使用。
3. 变量数据类型
  • 大类型分为基本数据类型和复杂数据类型。
  • 基本数据类型:
类型名称描述
整型int,int8,int16,int32,int64,uint,uint8,uint16,uint32,uint64,byte,rune
浮点型float32,float64
字符型使用byte保存单个字符
布尔型bool
字符串string
package main

import (
	"fmt"
	"math"
	"reflect"
)

func main() {
	var age0 int = 18
	fmt.Println(reflect.TypeOf(age0), math.MinInt, " ~ ", math.MaxInt)
	var age1 int8 = 18
	fmt.Println(reflect.TypeOf(age1), math.MinInt8, " ~ ", math.MaxInt8)
	var age2 int16 = 18
	fmt.Println(reflect.TypeOf(age2), math.MinInt16, " ~ ", math.MaxInt16)
	var age3 int32 = 18
	fmt.Println(reflect.TypeOf(age3), math.MinInt32, " ~ ", math.MaxInt32)
	var age4 int64 = 18
	fmt.Println(reflect.TypeOf(age4), math.MinInt64, " ~ ", math.MaxInt64)

	var age5 uint = 18
	fmt.Println(reflect.TypeOf(age5), 0, " ~ ", uint(math.MaxUint))
	var age6 uint8 = 18
	fmt.Println(reflect.TypeOf(age6), 0, " ~ ", math.MaxUint8)
	var age7 uint16 = 18
	fmt.Println(reflect.TypeOf(age7), 0, " ~ ", math.MaxUint16)
	var age8 uint32 = 18
	fmt.Println(reflect.TypeOf(age8), 0, " ~ ", math.MaxUint32)
	var age9 uint64 = 18
	fmt.Println(reflect.TypeOf(age9), 0, " ~ ", uint64(math.MaxUint64))
    var n0 float32 = 18.16
	fmt.Println(reflect.TypeOf(n0), math.SmallestNonzeroFloat32, " ~ ", math.MaxFloat32)
	var n1 float64 = 18.1616262626262626262
	fmt.Println(reflect.TypeOf(n1), math.SmallestNonzeroFloat64, " ~ ", math.MaxFloat64)
}
类型范围
int-9223372036854775808 ~ 9223372036854775807
int8-128 ~ 127
int16-32768 ~ 32767
int32-2147483648 ~ 2147483647
int64-9223372036854775808 ~ 9223372036854775807
uint0 ~ 18446744073709551615
uint80 ~ 255
uint160 ~ 65535
uint320 ~ 4294967295
uint640 ~ 18446744073709551615
float321.401298464324817e-45 ~ 3.4028234663852886e+38
float645e-324 ~ 1.7976931348623157e+308
  • 复杂数据类型:
类型名称描述
指针指向某内存块, (var ptr *int)
数组一段连续的内存块,(var arr [10]int)
结构体定义了一种数据的布局,(type Test struct{})
管道语言层面提供的协程通信方式,(var ch chan int)
函数为完成某一功能的程序指令(语句)的集合,(func Sums(a int, b int) int {// TODO…})
切片对数组的一个连续片段的引用,(var s []int)
接口接口类型就是一组方法的集合,(type Shape interface{// TODO…})
map一种无序的键值对的集合,(var mp map[string]int)
4. 枚举类型
  • Go语言没有内置枚举类型,需要通过其它方式实现类似枚举类型的功能
  • 自定义枚举值:
func TestEnum() {
	const (
		kEqual = 0
		kGreator
		kLess
	)
	a := 10
	b := 20
	if a > b {
		fmt.Println(kGreator)
	} else if a == b {
		fmt.Println(kEqual)
	} else {
		fmt.Println(kLess)
	}
}
  • 自增枚举值:
func TestEnum() {
	const (
		kEqual = iota
		kGreator
		kLess
	)

	a := 10
	b := 20
	if a > b {
		fmt.Println(kGreator)
	} else if a == b {
		fmt.Println(kEqual)
	} else {
		fmt.Println(kLess)
	}
}
  • iota用法:
func TestIota() {
	// 只能在常量的表达式中使用
	// fmt.Println(iota) //错误,cannot use iota outside constant declaration (compile)

	// 默认值为 0,在const中每增加一行,值加 1
	const (
		a = iota //0
		b        //1
		c        //2
	)
	fmt.Printf("a=%d  b=%d  c=%d\n", a, b, c)

	// 多个 const出现时,每次 const 都会使 iota 值初始化为0
	const d = iota // a=0
	const (
		e = iota //b=0
		f        //c=1
	)
	fmt.Printf("d=%d  e=%d  f=%d\n", d, e, f)

	// 如果中断 iota,必须显式指定 iota 恢复,中断后其后边的值将保存最后一次指定的值
	const (
		Low    = iota //0
		Medium        //1
		High   = 100  //100
		Super         //100
		Band   = iota //4
	)
	fmt.Printf("Low=%d  Medium=%d  High=%d  Super=%d  Band=%d\n", Low, Medium, High, Super, Band)

	// 如果是同一行,不管多少 iota,其值都一样
	const (
		i          = iota             // 0
		j1, j2, j3 = iota, iota, iota // 1
		k          = iota             // 2
	)
	fmt.Printf("i=%d  j1=%d  j2=%d  j3=%d  k=%d\n", i, j1, j2, j3, k)

	// iota 值可以被忽略
	const (
		k1 = iota // 0
		k2        // 1
		_         // 2
		_         // 3
		k3        // 4
	)
	fmt.Printf("k1=%d  k2=%d  k3=%d \n", k1, k2, k3)

	// 在中间插入一个值
	const (
		Sun = iota // 0
		Mon        // 1
		Tue = 7    // 7
		Thu = iota // 3
		Fri        // 4
	)
	fmt.Printf("Sun=%d  Mon=%d  Tue=%d  Thu=%d  Fri=%d\n", Sun, Mon, Tue, Thu, Fri)
}

起始

DMA+Timer 生成 PWM 波形错位问题分析与解决 本文深入分析了DMA与Timer协同生成PWM波形时出现的错位问题,揭示了DMA传输启动时机与定时器溢出中断的微妙关系。通过占空比强制清零法和预装载值调校技巧,提供了有效的解决方案,并总结了PWM+DMA配置的最佳实践,帮助开发者避免类似问题。 阅读详情

相关推荐

深入解析MOS管电容特性:从基础理论到高频应用

本文深入解析了MOS管的电容特性,从基础物理结构出发,详细拆解了栅氧电容、重叠电容和结电容的成因与影响。文章重点探讨了电容值随工作状态变化的非线性特性,并分析了其在CMOS高频开关电源、射频电路等应用中的关键作用,包括开关损耗、米勒效应、信号完整性挑战以及如何将电容特性转化为可控元件(如MOS变容管)的机遇。最后提供了从选型、仿真到PCB布局的实战设计指南。

weixin_29278805的博客 382

should merge variable declaration with assignment on next line (S1021)go-staticcheck

S1021是 go-staticcheck 中的一条静态检查规则。它指出,应该将变量声明与赋值合并到下一行。 例如,应该将以下代码 var x intx = 5 修改为 var x= 5 这样可以更简洁地表示变量的定义和初始值。但是,这不是一项强制性的规则,你可以按照自己的喜好来决定是否遵循。 ...

weixin_42601702的博客 2040

MTK Linux Charger驱动分析(二) - power_supply_core.c

的核心作用可以概括为:提供统一的电源管理框架;管理电源设备注册、属性访问、事件通知;封装sysfs 接口和 uevent 通知,屏蔽硬件细节;驱动开发者只需要实现,不关心底层通知和接口细节。简单来说,它是电源子系统的“大脑和中枢”,具体的电池/充电器只是“信息源”。

iTom1900 1490

Golang 新手要注意的陷阱和常见错误(一)

Go 是一门简单有趣的语言,但与其他语言类似,它会有一些技巧。。。这些技巧的绝大部分并不是 Go 的缺陷造成的。如果你以前使用的是其他语言,那么这其中的有些错误就是很自然的陷阱。其它的是...

lxw1844912514的博客 3717

后向投影算法(BPA)-SAR成像算法系列(二)

SAR成像算法:后向投影算法(BPA)原理介绍及实现步骤解析。

yjh_2019的博客 1万+

论文笔记--Spatial-Temporal Fusion Graph Neural Networks for Traffic Flow Forecasting

Summary 在交通预测问题上,现有的框架通常利用给定的空间邻接图和复杂的机制来建模空间和时间关联。作者认为使用给定的空间邻接图会限制模型的有效时空相关性学习,并且它们通常使用单独的模块来实现空间和时间相关性,或者只使用独立的组件来捕获局部或全局的异质依赖关系,割裂了时空依赖关系。为此作者提出一种时空融合图神经网络用于交通预测。提出一种数据驱动的“时间图”生成方法,以此来补偿空间图可能没有反映的相关性。提出一种新的交通预测方法。 Problem Definition 交通预测中的挑战 以上图为

chenxino的博客 1755

UE4.24,UE4.25源码编译出错“类型转换错误”

1:打开下面指定文件 2:在“AppendCLArguments_Global”添加部分Code

weixin_42353038的博客 1200

BES2810_best1702_best1702_ibrt_三者关系深度解析

一颗芯片的三个名字:BES2810、best1702 与 best1702_ibrt 关系深度解析

weixin_42162924的博客 349

Go语言规范2 - 命名篇

文章目录命名篇2.1 基本命令规范2.2 项目目录名2.3 包名2.4 文件名2.5 常量2.6 变量变量申明变量命名惯例全局变量名局部变量名循环变量2.7 结构体(struct)2.8 接口名2.9 函数和方法名函数方法2.10 参数名2.11 返回值 命名篇 本篇以开发时从上往下的顺序既:开发前约定的基本命名规范、包、常量、变量、结构体、参数、返回值的顺序讲解了开发中各个环...

Survivalist_Boy的博客 1637

[密码学实战]商密TLCP协议抓包解析与深度分析(二十九)

[密码学实战]商密TLCP协议抓包解析与深度分析(二十九)

曼岛_的博客 632

用 deepseek 写小说(通用版提示词模板)

#Initialization:作为[Role],在[Goals]下,回顾你的[Skill],严格遵守[Constraints],5.第五步:人物大纲,给小说里的每个人物撰写背景故事,深挖人物过去的经历,原生家庭,住所:一栋位于市郊的房子,有三个卧室,房龄 10 年,厨房很大,当中有一个鸟式大理石。示例 2.戈德里洛克先去了熊老爹的工作坊,尝试用大纲法写作,却发现这种方法无聊透顶,1.第一步:一句话概括,一句话概述小说内容,主要包含小说癸型,主角,以及故事中需要。大灰狼的暴行彻底激怒了戈德里洛克,

陈奕昆的博客 2969

Golang 学习笔记1:Go 基础

Golang 学习笔记1:Go 基础

@码农充电站的专栏 1710

【FISCO BCOS】二十、多机部署区块链

实际开发中,为了满足高可用性和高容错性的需求,往往会采用多级部署区块链的方式,今天介绍一下FISCO BCOS的多机部署流程。

naihe_fish的博客 3651

【Golang第1~3章:基础】如何安装golang、第一个GO程序、golang的基础

本人是个菜鸡,这个是在B站上看边看视频边做的笔记,这一章是编程语言的基础 有变量、常量、数据类型、指针、标识符、运算符、流程控制,具体请看【文章目录】 配套视频自己去B站里面搜【go语言】,最高的播放量就是 里面的注释我写的可能不太对,欢迎大佬们指出╰(*°▽°*)╯

雪花凌落的盛夏 422

lwip-2.0.3

lwip是瑞典计算机科学院(SICS)的Adam Dunkels 开发的一个小型开源的TCP/IP协议栈。实现的重点是在保持TCP协议主要功能的基础上减少对RAM 的占用。

Camera2Demo

在Camera2 的基础上进行封装,使得Camera2一堆初始化逻辑与Activity分离,降低耦合度,完成预览拍照并保存的操作

非零基础自学Golang 第1章 走进Go 1.1 Go编程语言概述 1.1.1 Go 的历史

非零基础自学Golang 第1章 走进Go 1.1 Go编程语言概述 1.1.1 Go 的历史

代码改变世界 660

VB摄像头监控

该VB模块可对摄像头捕获的画面进行录像等,可在创建的窗口进行控制

100天精通Golang(基础入门篇)——第1天:学习Go语言基本概念

100天精通Golang(基础入门篇)——第1天:学习Go语言基本概念,欢迎来到100天精通Golang的基础入门篇!在这个系列教程中,我们将带领你逐步掌握Go语言的核心概念和语法。本篇博文将着重介绍Go语言的基本概念,包括其定义、用途和优势。通过阅读本文,你将对Go语言有一个清晰的了解。在第1天的学习中,我们将探索Go语言的基本概念。我们将介绍Go语言是什么,它可以用来做什么,以及它相较于其他编程语言的优势。

猫头虎技术团队:授渔优于赠鱼,兴趣引领智慧,探索之乐尤显珍贵。商务合作+:Libin9iOak ,万粉变现+:优快云WF,猫头虎承诺每年免费为100名C站创作者做账号流量诊断服务!全网搜:猫头虎技术团队,点击文章底部名片或直接私信我一切皆可谈,快找虎哥! 6万+

非零基础自学Golang 第1章 走进Go 1.2 Go语言官方文档 & 1.3 学好Go 的建议

非零基础自学Golang 第1章 走进Go 1.2 Go语言官方文档 & 1.3 学好Go 的建议

代码改变世界 2259

golang从0到1实战系统十一:Go 基础

使用 var 关键字是 Go 最基本的定义变量方式,与 C 语言不同的是 Go 把变量类型放在变量。_(下划线)是个特殊的变量名,任何赋予它的值都会被丢弃。//初始化“variableName”的变量为“value”值,类型是“type”Go 对于已声明但未使用的变量会在编译阶段报错,比如下面的代码就会产生一个错误:声。//定义一个名称为“variableName”,类型为"type"的变量。定义三个类型都是"type"的三个变量,并且它们分别初始化相应的值。//定义三个类型都是“type”的三个变量。

Mr_Roki的博客 323

Go最全Go爬虫学习笔记_go爬虫的知识储备(1),Golang编程基础培训

etcd 这个名字是 etc distributed 的缩写。我们知道,在 Linux 中 etc 目录存储了系统的配置文件,所以 etcd 代表了分布式的配置中心系统。然而,它能够实现的功能远不是同步配置文件这么简单。etcd 可以作为分布式协调的组件帮助我们实现分布式系统。

2401_84925152的博客 865

非零基础自学Golang 第1章 走进Go 1.4 常用软件及网站 & 1.5 小结

非零基础自学Golang 第1章 走进Go 1.4 常用软件及网站 & 1.5 小结

代码改变世界 485

Go最新golang基础入门教程_golang教程文档(1),最新出炉

如果需要指定build过程生成exe文件的名字,则可以使用-o参数来给编译过程指定生成的目标文件的名字,windows下必须为.exe后缀的文件名才行。go build 生成 .exe的可执行文件==>运行.exe执行文件。上述指令会将hello.go文件编译生成he.exe文件。如果程序有错误,编译过程中会报错,并提示是哪一行出错。编译:即将go语言转换成二进制可执行文件的过程。编译和执行 一步到位。

2401_84905039的博客 384

2024年Go最全Go 专栏|说说方法(1),Golang开发基础自学

本文主要学习了 Go 的方法,方法的声明和函数类似,他们的区别是:方法在定义的时候,会在func和方法名之间增加一个参数,这个参数就是接收者。接收者有两种类型:值接收者和指针接收者。不管是使用值接收者,还是指针接收者,一定要搞清楚类型的本质:对类型进行操作的时候,是要改变当前值,还是要创建一个新值进行返回?这些就可以决定我们是采用值传递,还是指针传递。最后就是方法的调用,可以直接使用操作符调用,还可以使用方法变量和方法表达式。只有基于面向对象编程思想,才能使用好方法。

2401_84911026的博客 974

2024年Go最新golang超详细基础入门教程_golang教程(1),Golang跨进程通信导论

在Go语言中,可以使用关键字var来定义变量,并使用赋值运算符对变量进行赋值。在上面的语句中,var关键字用于声明一个变量,age是变量的名称,int是变量的类型,是赋值运算符,将10赋给变量age。在上面的语句中,变量name的类型会被自动推导为字符串类型,并将字符串"Alice"赋值给变量name。age := 20在上面的语句中,:=是简短赋值运算符,表示将20赋值给新声明的变量age。由于没有明确指定变量的类型,因此编译器会根据右侧表达式的值来自动推导变量的类型。

2401_84920041的博客 1426

非零基础自学Golang 2 开发环境 2.1 Go 的安装

非零基础自学Golang 2 开发环境 2.1 Go 的安装

代码改变世界 329

零基础也能上手的 Golang 入门实战教程,从0到1搞定Go开发

强烈推荐这套 Golang 入门实战教程 —— 专为零基础小白量身打造,不玩虚的,从基础语法到实战项目,手把手带你吃透Go语言,学完就能上手做项目、练实操!

yuanlaile的博客 225

非零基础自学Golang 第1章 走进Go 1.1 Go编程语言概述 1.1.3 使用Go 语言的项目

非零基础自学Golang 第1章 走进Go 1.1 Go编程语言概述 1.1.3 使用Go 语言的项目

代码改变世界 542

Go最全Go~简介与特性(1),Golang面试基础技能罗列

Go语言不但能让你访问底层操作系统,还提供了强大的网络编程和并发编程支持。可以进行网络编程、系统编程、并发编程、分布式编程。具有“部署简单、并发性好、语言设计良好、执行性能好”等优势。Go 从C语言继承了相似的表达式语法、控制流结构、基础数据类型、调用参数传值、指针等很多思想。因为Go语言没有类和继承的概念,所以它和 Java 或 C++ 看起来并不相同。但是它通过接口(interface)的概念来实现多态性。Go语言有一个清晰易懂的轻量级类型系统,在类型之间也没有层级之说。

2401_84905039的博客 741
上一篇: 策略模式(Strategy)
下一篇: Golang基础-2
无夜_
博客等级 码龄7年 2916粉丝 51原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值