golang基础知识

Basic Knowledge You Need to Have for Golang(Golang 基础知识概括) Basic Knowledge You Need to Have forGolang This article covers the knowledge which is important to know as a golang developer The main reference is a tour of go, build web application with golang a... 阅读详情

基础阶段学习知识

21天精通Go语言 :推荐两倍速观看
Go语言学习博客 上述B站视频的对应博客
go语言编程基础
Go by Example 中文版
golang学习图谱

go语言基本语法
  • 变量声明后必须使用,否则不会编译通过,全局变量除外
  • 变量赋值的三种方式
//第一种
var name string = "Alice"
//第二种
var name = "Alice"
//第三种,只能在函数中使用 
name := "Alice"
  • 匿名变量用一个下划线"-"表示
  • iota关键字是按照行来计数的,每增加一行就会加1
  • float默认类型是float64,float32和float64之间不能相互赋值
  • 字符串相关操作
 str := "哈哈哈,I am a student"
 s1 := []rune(str)  //把字符串强制转换为一个run切片
 s1[1] = '中'
 fmt.Println(string(s1))  //将切片转换为字符串,输出为  哈中哈,I am a student
  • rune在本质上是一个int32类型的
  • go中没有关键字char,字符型也是int32
  • go中没有while关键字,只有for循环
  • 可以使用for range遍历数组、切片、字符串、map及通道
  • 初始化数组
 arr := [...]int{1,2,3,4,5,6,7,8,9,10}
  • 数组是值类型,不是引用类型,所以支持==和!=运算符
strings包
随机数
func main()  { 
	rand.Seed(time.Now().UnixNano())  //生成随机数种子
	fmt.Println(rand.Int())
}
函数
函数作为参数和返回值
import "fmt"

func main()  {
	function(f1)
}
func f1() int {
	return 10
}
func function(x func() int) func(int,int) int{
	ret := func(a,b int) int{
		return a+b
	}
	return ret
}

上述函数function的传入参数可以是函数,但这个函数的返回值需要是int类型;function的返回值也是函数,返回的这个函数需要满足两个int类型参数,和int类型返回值

匿名函数
  • 在函数结尾加()表示立即执行,一般适用于只使用一次的情况
func main()  {
	f1 := func(a,b int) {
		println(a+b)
	}
	f1(2,3)
	func(a,b int){
		println(a+b)
	}(1,2)
}
闭包
  • 闭包是一个函数,此函数包含了外部作用域的一个变量
func f1(f func())  {
	fmt.Println("f1执行了")
}

func f2(x,y int)  {
	fmt.Println("f2执行了")
	fmt.Println(x+y)
}

//f3 修改后的函数
func f3(f func(int,int),x,y int) func() {
	tmp := func() {
		//fmt.Println(x+y)
		f(x,y)
	}
	return tmp
}
高级语法
切片

本篇博文不错
切片(Slice)是一个拥有相同类型元素的可变长度的序列。它是基于数组类型做的一层封装。它非常灵活,支持自动扩容。切片是一个引用类型,它的内部结构包含地址、长度和容量。切片一般用于快速地操作一块数据集合。和数组的区别在于数组的复制为值复制,切片的复制为引用复制。

  • 切片的容量是指 从切片的第一个元素开始到最后的元素的容量
//切片声明
var name []T
//make函数构造切片
make([]T, size, cap)
//slice内部节后
type SliceHeader struct{
	Data uintptr
	Len int
	Cap int
}
/*
T:切片的元素类型
size:切片中元素的数量
cap:切片的容量
*/

切片的扩容原理:代码在src/runtime/slice.go下

newcap := old.cap
doublecap := newcap + newcap
if cap > doublecap {
	newcap = cap
} else {
	if old.len < 1024 {
		newcap = doublecap
	} else {
		// Check 0 < newcap to detect overflow
		// and prevent an infinite loop.
		for 0 < newcap && newcap < cap {
			newcap += newcap / 4
		}
		// Set newcap to the requested cap when
		// the newcap calculation overflowed.
		if newcap <= 0 {
			newcap = cap
		}
	}
}
  • 首先判断,如果新申请容量(cap)大于2倍的旧容量(old.cap),最终容量(newcap)就是新申请的容量(cap)。
  • 否则判断,如果旧切片的长度小于1024,则最终容量(newcap)就是旧容量(old.cap)的两倍,即(newcap=doublecap),
  • 否则判断,如果旧切片长度大于等于1024,则最终容量(newcap)从旧容量(old.cap)开始循环增加原来的1/4,即(newcap=old.cap,for {newcap += newcap/4})直到最终容量(newcap)大于等于新申请的容量(cap),即(newcap >= cap)
  • 如果最终容量(cap)计算值溢出,则最终容量(cap)就是新申请容量(cap)。
包管理

若需要访问不同包下的func、type、变量及常量,需要将变量名首字母大写
若要访问不同包结构体下的字段,需要将字段变量名首字母大写

反射

反射比较好的文章
反射例子

作用:Go 语言提供了一种机制在运行时更新变量和检查它们的值、调用它们的方法,但是在编译时并不知道这些变量的具体类型,这称为反射机制。

Go语言的反射主要是通过Type和Value两个基本概念进行实现的,实现主要位于reflect包下
Type:反射变量的类型信息
Value:反射变量自身的实例信息

gin框架传输json数据两种形式
r.GET("/hello", func(c *gin.Context) {
		//方式1 使用map进行序列化
		data := map[string]interface{}{
			"name":"root",
			"age":"12",
		}
		data := gin.H{"name":"root","age":18}
		c.JSON(http.StatusOK, data)
		//方式2 定义结构体
		var data struct{
			Name string
			Age int `json:"afe"`  //go要求返回字符必须首字母大写,使用这种方式可以在json取值时返回首字母小写
			Message string
		}
		data.Message = "hello"
		data.Age = 18
		data.Name = "hai"
		c.JSON(http.StatusOK,data)
	})
GoLang笔记—基础语法篇 我们从计算机系统的角度来讲,变量就是一段或者多段内存,用于存储数据 注意:变量声明以关键字var开头,变量类型后置,行尾无须分号如果你学过C语言,就会体会到这样声明的好处,比如C语言这样声明:int* a, b ,那么只有a是指针,b不是,这样会使人迷惑,如果想要两个变量都为指针,需要这样定义:。 在go语言中,我们使用这样的声明方式:,就可以轻松的将a,b都声明为指针。变量的命名规则遵循驼峰命名法,即首个单词小写,每个新单词的首字母大写,例如: startDate当一个变量被声明之后,系统自动赋予它该类型 阅读详情

相关推荐

Go开发工程师-Golang基础知识篇

本文梳理了Go语言中map相关的重要面试考点和底层实现原理。重点内容包括:1. map底层数据结构(哈希表+桶结构)及查询时间复杂度(平均O(1));2. 扩容机制(负载因子>6.5或溢出桶过多触发渐进式扩容);3. 常见问题(未初始化panic、并发读写问题);4. sync.Map实现原理(读写分离+双map结构)及其与加锁map的性能对比;5. 典型面试题解析(哈希冲突处理、rehash策略、数据迁移等)。同时对比了slice的底层结构和使用注意事项,为开发者应对技术面试提供了系统性的知识框架。

封印大枪的专栏 448

Golang 学习笔记-----Channel

概念 声明 初始化 操作 发送 接收 关闭 判断关闭 分类 有缓冲通道 无缓冲通道 单向通道 异常 概念 单纯地将函数并发执行是没有意义的。函数与函数间需要交换数据才能体现并发执行函数的意义。 虽然可以使用共享内存进行数据交换,但是共享内存在不同的goroutine中容易发生竞态问题。为了保证数据交换的正确性,必须使...

vjhghjghj的博客 862

Zemax实战:手把手教你设计一个40倍、NA0.65的显微物镜(附初始结构文件)

本文详细介绍了使用Zemax设计40倍、NA0.65显微物镜的完整流程,从初始结构搭建到优化验证,涵盖光学设计的关键技巧和实战经验。通过分阶段优化策略和公差分析,帮助工程师快速掌握高倍显微物镜的设计方法,提升光学系统性能。

weixin_42525369的博客 341

Go语言 rand(随机数)包

包"math/rand" 随机数生成器,可以生成 整型或浮点型 的伪随机数。 随机数种子 不同的种子生成不同的随机数,无种子编译后运行的结果是定值。通常以时钟作为参数初始化,rand.Seed(time.Now().UnixNano())。...

汉阳Hann's Home 2620

RV1126B SDK移植实战:从DDR配置到USB烧写全解析

本文详细解析了RV1126B SDK移植的核心实战流程,重点攻克了DDR初始化失败与USB烧写两大难题。文章从理解启动流程入手,提供了DDR配置错误的排查步骤、SDK编译配置要点,并深入讲解了USB烧写的完整操作与常见问题解决方案,旨在帮助开发者高效完成系统移植与稳定运行。

weixin_29164497的博客 542

使用基于python的neurora进行表征相似性分析(RSA)

发现了一款用于表征分析的Python API,还是挺方便的,这里简单介绍一下进行表征相似性分析的使用方法。

zjh12312311的博客 2764

万字Golang基础知识(肝爆三天三夜,手撕Golang基本语法结构)

Golang1.2初识Golang1.3 Go的语法要求1.3.1 token 1.2初识Golang 首先让我们问候一下世界 package main import "fmt" func main(){ fmt.Println("Hello, world!\n") } 运行结果: 对世界进行了一波问候后,我们对这个简单的程序进行解读分析 (1)第一行我们定义了一个名为 package 的包,main是可执行程序的包名,所有的Go源程序文件头部必须有一个包声明语句。 (2)然后用 关键字 impo

qq_53060585的博客 2106

Starlink地面终端天线对星(一)对星流程,星历下载,信标信号

starlink卫星终端对星采用机械伺服+相控阵电子扫描的混合模式,兼顾快速盲扫和高精度跟踪;对星流程分三步:冷启动与盲捕获 → 建立初始链路并下载星历 → 进入正常通信模式;

chen2jiang3的博客 2722

golang超详细基础入门教程_golang教程

Go语言(或 Golang)起源于2007年,并在2009年正式对外发布。Go是非常年轻的一门语言,它的主要目标是"兼具Python等动态语言的开发速度和C/C++等编译型语言的性能与安全性"。Go语言是编程语言设计的又一次尝试,是对类C语言的重大改进,它不但能让你访问底层操作系统,还提供了强大的网络编程和并发编程支持。Go语言的设计理念是不损失应用程序性能的情况下降低代码的复杂性,旨在创造一种新的编程语言,既能够保持C和C++的效率,又能够拥有像Python和Ruby的灵活性和易读性。

web13093320398的博客 4889

R 分析裂区试验设计

裂区试验有主区部分和副区部分, 因而有主区部分误差(误差 a,简记为Ea )和副区部分误差(误差b,简记为Eb) 分别用于测验主区处理以及副区处理和主、副互作的显著性。对同一个二因素试验资料作自由度和平方和的分解,则可发现随机区组的误差项自由度和平方和分别为DFe、SSe,而裂区设计有两个误差项,其自由度和平方和分别为DFEa,DFEb, SSEa, SSEb。而区组,处理效应等各个变异项目的自由

samhuairen的专栏 8934

1、使用Spark SQL查询Databricks:全面指南

本博客全面介绍了如何使用Spark SQL在Databricks平台上进行高效的数据查询与分析。内容涵盖SQL基础操作、数据过滤、复杂查询技巧、简单与高级计算、数据聚合、日期处理等核心主题,适合数据分析师、开发人员及SQL学习者。通过逐步讲解和实用示例,帮助读者掌握从入门到高级的SQL技能,并提供学习路径建议和免费代码资源,助力实际数据分析工作。

redis7keeper的博客 90

Golang学习记录:基础知识篇(一)

很久之前就想学Go语言了,但是一直有其他东西要学,因为我学的是Java嘛,所以后面学的东西一直是跟Java相关的。最近来到公司实习,需要用到Go语言,所以就趁着这个机会把Go学了。简单来说就是由Google公司的Robert Griesemer,Rob Pike和Ken Thompson设计的一种静态类型、编译型语言。它在2009年正式对外公开,目标是解决大规模软件工程中的问题。Go语言的语法简洁清晰,易于学习和使用,编译速度快,具有垃圾回收功能,并且拥有强大的标准库。

qq_44386537的博客 313

GameFramework教程✨六、怎样加载一个3D UI

怎样加载一个3D UI

星河造梦坊 1583

【20200903】【Golang基础知识】Go语言定义变量、fmt包、Print、Println、Printf、Go语言注释

一、Go 语言注释 1. 单行注释:// 2. 多行注释:/*……*/ 3. 快捷键:ctrl+/(windows)或 command+/(macOS) 二、fmt 包 package main // 引入 main 包 func main() // go 语言的入口文件 import “fmt” // fmt 包用于打印数据,这是引入 fmt 包的方式 三、Print、Println、Printf的区别 1. 常见的打印数据的方法: fmt.Println //..

诗小葵的博客 775

PyTorch生成式人工智能——VQ-VAE详解与实现

VQ-VAE (Vector Quantised-Variational AutoEncoder) 的核心思想就是将 VAE 的连续潜变量离散化。它通过学习一个码本 (Codebook) 来实现这一点,码本是一个包含有限个嵌入向量的字典。模型不是直接输出一个连续的潜在向量,而是从码本中找出与编码器输出最接近的嵌入向量来代替它。本节首先详细讲解 VQ-VAE 的技术原理,然后使用 PyTorch 从零开始实现 VQ-VAE 模型。

盼小辉丶的博客 3284

OV9734 DATASHEET,完整规格书

OV9734完整规格书,包括电气参数,尺寸规格,寄存器配置表等

go基础知识----Golang无限开启Goroutine?该如何限定Goroutine数量?

原文链接

u013915286的博客 314

锂电池充电器电路设计 里面有电路

锂电池充电器电路设计 里面有电路 3.7V升压到5V电路设计。

golang之基础知识

package main必须首先出现,紧跟着的是import(引入不是main的其他的包)。在GO中,package总是首先出现的,然后是import,然后是其他的内容。当GO程序开始执行时,首先调用的函数是main.main(),这是从C语言中继承来的,GO语言是一种类C的语言。示例程序如下:                      package main                

557

IDEA的使用指南

IDEA基于java的使用手册,可以最快速的上手,在使用中不断的丰富自己的使用技巧.

Data-Structures-and-Algorithm-Analysis-in-Java.pdf

作者: Weiss, Mark A. 出版社: Addison Wesley Data Structures and Algorithm Analysis in Java is an “advanced algorithms” book that fits between traditional CS2 and Algorithms Analysis courses. In the old ACM Curriculum Guidelines, this course was known as CS7. This text is for readers who want to learn good programming and algorithm analysis skills simultaneously so that they can develop such programs with the maximum amo...

Golang学习:基础知识篇(三)—— Map(集合)

很久之前就想学Go语言了,但是一直有其他东西要学,因为我学的是Java嘛,所以后面学的东西一直是跟Java相关的。最近来到公司实习,需要用到Go语言,所以就趁着这个机会把Go学了。简单来说就是由Google公司的Robert Griesemer,Rob Pike和Ken Thompson设计的一种静态类型、编译型语言。它在2009年正式对外公开,目标是解决大规模软件工程中的问题。Go语言的语法简洁清晰,易于学习和使用,编译速度快,具有垃圾回收功能,并且拥有强大的标准库。

qq_44386537的博客 485

Golang基础知识--十安辰

Golang基础 Go语言的SDK是什么? SDK就是软件开发工具包。做Go开发之前,我们需要先安装配置好SDK Golang环境变量配置及其作用 GOROOT:指定GO SDK的安装目录 Path: 指定 sdk/bin 下的目录: go.exe gofmt.exe godoc.exe GOPATH: 就是Go项目的工作目录,所有项目的源码都放在这个目录下 Golang程序的编写、编译、运行步骤 编写:就是敲代码 编译:go build 源码文件 =>生成.exe二进制可执行文件 运行:

十安辰的博客 504

Go-基础知识

本文内容基于《Go语言核心编程》,李文塔著。 1 基础知识 1.1 语言简介 1.1.1 Go语言的诞生背景 当前编程语言对兵法的支持不是很好,不能很好地发挥多核CPU的威力; 程序规模越来越大,编译速度越来越慢; 现有的编程语言设计越来越复杂,某些特性的实现不怎么优雅。 1.1.2 Go语言的特性 特性集合 特性项 Go C Java 基础语法 关键字和保留字 25个 ANSI 32个 大于48个 控制结构 支持顺序、循环、分支

YETA的博客 706

Go基础知识

1. Go的学习方法 高效而愉快的学习 先建立一个整体框架,然后细节 在实际工作中,要培养用到什么,能够快速学习什么能力 先know how,再know why 编程软件是一门“做中学”的学科,不是会了再做,而是做了才会 适当的囫囵吞枣 学习软件编程是在琢磨别人怎么做,而不是我认为应该怎么做的过程 2. 学习新的技术或者知识点 原理 基础语法 3. 快速入门案例: 一个简单的案例 了解技...

weixin_40581279的博客 2423

Go基础知识总结

这种方式是将fmt包中的所有方法全部导入到当前包中,那么fmt包中的所有方法都可以直接当成本包的方法来调用了,不用再加包名fmt(但这样本包就不能定义与fmt包所有函数的函数名相同的函数了)后,新增3个元素,加上之前的元素就总共有6个了,超过了容量4,所以这时候切片需要扩容,而扩容的机制就是原始容量的2倍,也就是在新增元素后发现超过了原始的容量的话,会自动以初始容量的2倍去扩容。,是一个空接口,根据之前对接口实现的理解,空接口里没有任何方法,那么就可以认为所有的类型其实都是实现了这个接口的,因此这个。...

张氏小毛驴的博客 1332

GOlang基础知识<二>

1.GO语言的转义字符 \t :对齐功能 \n:换行符 \“:一个”字符 \r:回车 代码: package main import "fmt" func main() { fmt.Println("hello\tdadaw") fmt.Println("hello\ndadaw") fmt.Println("hello\rdadaw") fmt.Println("hello\"dadaw") } 效果: 2.GO语言的基本类型 2.1int整数型 ...

小蔡的博客 1365

golang 基础知识

写过一段时间 golang 后,业务开发应该游刃有余了,可以检查下这些基本的语法你都掌握了么?25 个关键字、37 个预定义标识符,41 个标准库是不是都很熟悉了? 独特的 interface、go、select 语法你都会用了么? 基础知识 正如大部分编程语言,了解基本的数据结构、关键字、语法、包引用、错误处理等,就可以进行简单的业务开发了. 本文主要梳理了 golang 这些基本的知识点,可以...

blog 1011
上一篇: 最小编辑距离
下一篇: golang 并发
code_AC
博客等级 码龄12年 255粉丝 109原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值