Go语言基础整理集合

2023-11-09

什么是Go语言

go语言是一门静态强类型语言

  • 什么是动态和静态:
    • 可以理解为解释型和编译型 (python,动态解释型语言 一边编译一边执行)(golang,java,静态编译型语言 必须先将文件编译成可执行文件后才能运行)
  • 什么是强类型语言:
    • 强制类型定义的语言,即一旦某一个变量被定义类型,如果不经强制转换,那么它永远就是该数据类型。
    • 强类型语言包括:Java、Python、C++等语言。其中Python是动态语言,是强类型定义语言,是类型安全的语言,Java是静态语言,是强类型定义语言,也是类型安全的语言。
  • 什么是弱类型语言:
    • 弱类型定义的语言,某一个变量被定义类型,该变量可以根据环境变化自动。
    • 弱类型语言包括:VB,PHP,JavaScript等语言。其中VBScript是动态语言,是一种类型不安全的原因。
  • Go 语言特色
    • 简洁、快速、安全
    • 并行、有趣、开源
    • 内存管理、数组安全、编译迅速
  • Go 语言用途
    • Go 语言被设计成一门应用于搭载 Web 服务器,存储集群或类似用途的巨型中央服务器的系统编程语言。对于高性能分布式系统领域而言,Go 语言无疑比大多数其它语言有着更高的开发效率。它提供了海量并行的支持,这对于游戏服务端的开发而言是再好不过了。

GO语言开发注意事项

  1. Go是以包作为管理单位 每个Go源文件必须声明它所属的包。
  2. Go应用程序的执行入口是main()方法。
  3. main函数只能声明在main包中,不能声明在其他包中,并且一个main包中也必须有且仅有一个main函数。
  4. Go语言严格区分大小写。
  5. 函数的左大括号必须和函数在同一行。
  6. Go语言通过import导包,用什么包导什么包(导入了不用会编译出错)。
  7. Go是以包作为管理单位 每个Golang源文件必须声明它所属的包。

Hello Golang

编写go语言的第一个文件

package main   

import (f "fmt")

func main(){

	f.Println("你好 golang")

}

Go语言数据类型

整形数据类型(int)

package main

import (
	f "fmt"
	"math"
)

// 有符号整形
func main(){
	// 整形顾名思义就是存储数据类型是正数。
	// golang中分为衣服好和无符号,简单理解就是存储范围上的差异,
	// 有符号整形分为 int 86 32 64  以及默认的int
	// 除非我们需要使用特定大小的整数,否则通常都使用int来表示整数
	var num8 int8 = 127
	var num16 int16 = 32767
	var  num32  int32 = math.MaxInt32
	var num64 int64 = math.MaxInt64
	var num int = math.MaxInt

	// golang 支持累加操作  a:=1  a++
	// python 就不支持累加操作 必须这样写  a+=1

	f.Printf("num8是 %d\n",num8)
	f.Printf("num16是 %d\n",num16)
	f.Printf("num32是 %d\n",num32)
	f.Printf("num64是 %d\n",num64)
	f.Printf("num是 %d\n",num)

}

字符串数据类型(string)

package main

import (
	f "fmt"
)

// 字符串
func main(){
	// 字符串几乎是我们最常见的数据类型之一,使用起来也很方便,直接使用双引号进行引用即可
	// 有些字符串没有线程的文字代号,只能使用转义字符来标书,比如这里哥/t

	mystring := "hello\tgolang.18"
	f.Printf(mystring)

}

浮点数据类型(float)

package main

import (
	f "fmt"
	"math"
)

// 浮点
func main(){
	// 浮点数据类型表示存储的数据是实数,比如说3.1415926,主要分为32和64位
	// 区别在于长度。和整数一样,除非需要使用特定大小的浮点,否则通常都使用float来表示浮点 

	var num1 float32 = math.MaxFloat32
	var num2 float64 = math.MaxFloat64

	f.Printf("num1的类型是%T,num1是%g\n",num1,num1)
	f.Printf("num2的类型是%T,num2是%g\n",num2,num2)

	// num1的类型是float32,num1是3.4028235e+38
	// num2的类型是float64,num2是1.7976931348623157e+308

}

字符数据类型(byte)

package main

import (
	f "fmt"

)

// 字符
func main(){
	// 字符是组成字符串的最小元素,golang中使用byte定义字符串,
	// byte表示utf-8字符串单个字节的值

	// byte 使用单引号 '' 代表字节码
	// 双引号 "" 代表字符串

	var x byte = 65
	var y uint8 = 65

	f.Printf("x = %c\n",x) // x = A
	f.Printf("y = %c\n",y) // y=A
	// x = A
	// y = A

}

布尔数据类型(bool)

package main

import (
	f "fmt"
)

// 布尔 bool
func showBool(){
	// bool通常情况下表示真或者假通常出现在条件语句中,在Python中布尔数据类型可以参与数值运算,也可以和其他数据类型进行转换
	//  但是在golang中镇值用true表示,并且不与1相等,同样假值用false表示,并且不与0相等,使用上相对严格,没有Python那么挥洒自如
	a := true
	b := false
	f.Println("a=",a)
	f.Println("b=",b)
	f.Println("true && false = ",a && b)
	f.Println("true || false = ",a || b)

}


func main(){
	showBool()
	
}

Go语言容器数据类型

哈希数据类型(hash)

package main

import f "fmt"


func main(){
	// 容器数据类型
	//  字典也叫集合 (map)
	// "key:value  key只能是可哈希的值(不可以扩容缩容的值)"


	s_dict := map[string]int{
		"小明":10,
		"小红":20,
	}

	f.Println(s_dict["小红"])//通过key取值
	// 如果要获取的key不存在的话 会返回你当前定义的value的数据类型的0值
	// 而python的话获取不存在的key会报错,或者使用python字典.get('小红',None)设定默认值


	d_dict := map[int]int{}  //允许空值

	// 赋值操作 循环 或者根据key来赋值
	for i := 0; i < 5; i++ {
		d_dict[i]=i
	}

	// 遍历操作  如果你用不到key或者value可以使用_占位符代替,_只做占位符做用并不是声明。
	for key,value := range  d_dict{


		f.Println(key,value)
	} 

	f.Println(d_dict)

}

Go语言的变量(var)和常量(content)

什么是变量和常量

  • 变量
    • 变量是具体数据被内存存储之后内存地址的名称,说白了就是内存中的门牌号。
  • 常量
    • 表示不变的值,在程序运行时,不会被代码逻辑修改,比如数字上的圆周率,自然常数e等

变量

// 变量是具体数据被内存存储之后内存地址的名称,说白了就是内存中的门牌号。
package main

import (
	f "fmt"
	"unsafe"
)

func main() {
	// 在Golang里我们使用var关键字声明变量
	// 如果是有初始值的变量我们可以省略变量声明中的类型
	// var name int
	// var name =1
	
	// 海象操作符来声明变量,这还重方式可以不使用var关键字。事实上呢,
	// 它更像是一个连贯操作,我们可以既声明又赋值,那么我们这个操作可以算得上是一种赋值表达式
	// 但是需要注意已经声明过的变量就不是再次使用海象操作符来声明了
	// 海象操作符只能用在函数的内部

	// 可以使用&符号查看内存地址
	// 也可以使用unsafe.Sizeof获取内存大小 
	var name 
	name = 666
	f.Println(&name)
	f.Println(unsafe.Sizeof(name))

	// golang 也支持交换赋值操作
	b,a := "bbbbb","aaaaa"

	b,a = a,b

	f.Println(a,b)

}

常量

package main

import (
	f "fmt"
)

func main(){

	// 常量constant 表示不变的值,在程序运行时,不会被代码逻辑修改,比如数字上的圆周率,自然常数e等
	const num int = 1

	// const也可以定义枚举类型
	// 常量声明可以使用 iota 常量生成器初始化,它用于生成一组以相似规则初始化的常量,但是不用每行都写一遍初始化表达式。
	// 在一个 const 声明语句中,在第一个声明的常量所在的行,iota 将会被置为 0,然后在每一个有常量声明的行加一。

	const (
		// 可以在const()中添加一个关键字iota, 每行的iota都会累加1, 第一行的iota默认是0
		a = iota      // iota = 0
		b             // iota = 1
		c             // iota = 2
	)

	f.Println(num)

}

Go语言的作用域(scope)

package main

import (f "fmt")


// 在函数或者块之外定义的变量我们称之为全局变量,这些变量在程序的整个生命周期中国,都可以使用
var myvarable3 int = 6


func main(){
	// 变量的作用域可以理解为可访问变量的程序的某个范围,比如说啊,在类里,方法里
	// 循环里面定义的变量,那么在函数或代码库尔中声明的变量,我们称之为虎局部变量,
	// 这些变量不能在函数或块之外的的地方访问,所以这些变量我们可以称之为块变量。

	var myvarable1,myvarable2 int =  69,145

	f.Println(myvarable1,myvarable2,myvarable3)

}

Go语言的运算操作符

数学运算符(+ - * / %(取余))

a := 1
	b := 2
	c := false
	f.Println(a+b)
	f.Println(a-b)
	f.Println(a*b)
	f.Println(a/b)
	f.Println(a%b)

比较运算符

if (a==b){
	f.Println("等于")
}

if (a!=b){
	f.Println("不等于")
}

if (a>b){
	f.Println("大于")
}

if (a<b){
	f.Println("小于")
}

if (a>=b){
	f.Println("大于等于")
}

if (a<b){
	f.Println("小于等于")
}

逻辑运算符

if a==1 && b==2{
	f.Println("逻辑与")
}

if a==1 || b==1{
	f.Println("逻辑或")
}

if !c{
	f.Println("逻辑非")
}

位运算

f.Println(a & b) //位于  可以判断一个结点是否有一个权限
f.Println(a | b) //位或   可以给一个结点权限
f.Println(a ^ b) //位异或  可以删除一个结点的权限
f.Println(a << 1) //左位移  可以将某一条数据整体向左移动
f.Println(a >>1) //右位移   可以将某一条数据整体向右移动

捕获用户终端输入

var  x int
f.Println("请输入一个整数")
f.Scanln(&x) //读取键盘的输入,通过操作地址,赋值给x
f.Println(x)

再此奉上Golang基础集合的github地址供大家参考
GitHub - renaissancezyc/golang-Basics: golang 基础合集

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Go语言基础整理集合 的相关文章

  • 让CHAT介绍下V2ray

    CHAT回复 V2Ray是一个网络工具 主要用于科学上网和保护用户的网络安全 它的名字源自Vmess Ray 光线 通过使用新的网络协议 为用户提供稳定且灵活的代理服务 下面是一些V2Ray的主要特性 1 多协议支持 V2Ray 提供了大量
  • 基于java的婴幼儿产品销售系统设计与实现

    基于java的婴幼儿产品销售系统设计与实现 I 引言 A 研究背景和动机 婴幼儿产品销售系统是针对婴幼儿家庭的产品销售平台 该系统的设计需要满足安全 便捷 高效等多个方面的要求 针对该系统 我们可以采用基于Java的Web框架搭建 主要分为
  • 软件测试|使用matplotlib绘制平行坐标系图

    简介 绘制平行坐标系图 Parallel Coordinates Plot 是一种用于可视化多维数据的强大方法 在这篇文章中 我们将介绍如何使用Matplotlib库创建平行坐标系图 以及如何解释和定制这种图表 我们将使用一个示例数据集来演
  • 电商数据api拼多多接口获取商品实时数据价格比价api代码演示案例

    拼多多商品详情接口 接口接入入口 它的主要功能是允许卖家从自己的系统中快速获取商品详细信息 通过这个接口 卖家可以提取到商品的各类数据 包括但不限于商品标题 价格 优惠价 收藏数 下单人数 月销售量等 此外 还可以获取到商品的SKU图 详情
  • 软件测试|教你使用Python下载图片

    前言 我一直觉得Windows系统默认的桌面背景不好看 但是自己又没有好的资源可以进行替换 突然我一个朋友提醒了我 网络上的图片这么多 你甚至可以每天换很多个好看的背景 但是如果让我手动去设置的话 我觉得太麻烦了 我不如使用技术手段将图片下
  • 基于java的物流信息网系统设计与实现

    基于java的物流信息网系统设计与实现 I 引言 A 研究背景和动机 基于Java的物流信息网系统设计与实现的研究背景和动机 随着互联网的普及和电子商务的快速发展 物流信息网系统已成为现代物流管理的重要组成部分 物流信息网系统能够实现物流信
  • js中关于字符串的创建和判断类型

    文章目录 创建方法 判断类型的技巧 区分 1 typeof 2 instanceof 共点 1 Object prototype toSt
  • 华为OD机试真题-分披萨-2023年OD统一考试(C卷)

    题目描述 吃货 和 馋嘴 两人到披萨店点了一份铁盘 圆形 披萨 并嘱咐店员将披萨按放射状切成大小相同的偶数扇形小块 但是粗心服务员将披萨切成了每块大小都完全不同奇数块 且肉眼能分辨出大小 由于两人都想吃到最多的披萨 他们商量了一个他们认为公
  • 【硕士论文复现】可再生能源发电与电动汽车的协同调度策略研究(Matlab代码实现)

    欢迎来到本博客 博主优势 博客内容尽量做到思维缜密 逻辑清晰 为了方便读者 座右铭 行百里者 半于九十 本文目录如下 目录 1 概述 1 1 上层问题 1 2 下层问题 2 运行结果
  • 【无迹卡尔曼滤波】不确定和间接测量的非线性动力系统识别研究(Matlab代码实现)

    欢迎来到本博客 博主优势 博客内容尽量做到思维缜密 逻辑清晰 为了方便读者 座右铭 行百里者 半于九十 本文目录如下 目录 1 概述 2 运行结果 3 参考文献 4 Matlab代码及文章
  • Android Navigation的四大要点你都知道吗?

    在JetPack中有一个组件是Navigation 顾名思义它是一个页面导航组件 相对于其他的第三方导航 不同的是它是专门为Fragment的页面管理所设计的 它对于单个Activity的App来说非常有用 因为以一个Activity为架构
  • 面试官随便问几个问题就知道你究竟做没做过微信支付宝支付

    面试官随便问几个问题就知道你究竟做没做过微信支付宝支付 你知道直连模式和服务商模式吗 网上的课程一般给你演示的都是直连模式 而企业中有不少是申请成为了服务商 因为里面有佣金提成 我粗俗地解释 直连模式 就是说你是一个会做生意的老板 自己会搞
  • 计算机Java项目|基于SSM的篮球系列网上商城设计与实现

    作者简介 Java领域优质创作者 CSDN博客专家 CSDN内容合伙人 掘金特邀作者 阿里云博客专家 51CTO特邀作者 多年架构师设计经验 腾讯课堂常驻讲师 主要内容 Java项目 Python项目 前端项目 人工智能与大数据 简历模板
  • 2024史上最全Java面试八股文(带全部答案)

    今天要谈的主题是关于求职 求职是在每个技术人员的生涯中都要经历多次 对于我们大部分人而言 在进入自己心仪的公司之前少不了准备工作 有一份全面细致 面试题 将帮助我们减少许多麻烦 在跳槽季来临之前 特地做这个系列的文章 一方面帮助自己巩固下基
  • 【go语言】结构体数据填充生成md错误码文件

    这里使用pongo2这个模版引擎库进行md文件渲染 GitHub flosch pongo2 Django syntax like template engine for Go package main import fmt github
  • 【go语言】读取toml文件

    一 简介 TOML 全称为Tom s Obvious Minimal Language 是一种易读的配置文件格式 旨在成为一个极简的数据序列化语言 TOML的设计原则之一是保持简洁性 易读性 同时提供足够的灵活性以满足各种应用场景 TOML
  • 初学者如何快速入门Python(内附详细攻略),一文讲清

    目前python可以说是一门非常火爆的编程语言 应用范围也非常的广泛 工资也挺高 未来发展也极好 Python究竟应该怎么学呢 我自己最初也是从零基础开始学习Python的 给大家分享Python的学习思路和方法 一味的买书看书 看视频 是
  • 2024年华为OD机试真题-查找接口成功率最优时间段-Python-OD统一考试(C卷)

    题目描述 服务之间交换的接口成功率作为服务调用关键质量特性 某个时间段内的接口失败率使用一个数组表示 数组中每个元素都是单位时间内失败率数值 数组中的数值为0 100的整数 给定一个数值 minAverageLost 表示某个时间段内平均失
  • 计算机Java项目|有机蔬菜商城

    作者简介 Java领域优质创作者 CSDN博客专家 CSDN内容合伙人 掘金特邀作者 阿里云博客专家 51CTO特邀作者 多年架构师设计经验 腾讯课堂常驻讲师 主要内容 Java项目 Python项目 前端项目 人工智能与大数据 简历模板
  • 【js学习之路】遍历数组api之 `filter `和 `map`的区别

    一 前言 数组是我们在项目中经常使用的数据类型 今天我们主要简述作用于遍历数组的api filter 和 map 的区别 二 filter和map的共同点 首先 我们主要阐述一下 filter 和 map 的共同点 api的参数都是回调函数

随机推荐

  • 动态sql MyBatis处理多对一,一对多映射关系

    MyBatis处理模糊查询 1 用 符代替 接参 避免 占位符被解析成 在字符串中无法接参 select from user where username like name 2 使用sql语句中字符串拼接的函数 select from u
  • 微信小程序背景图片设置问题

    我们都知道 用css给网页设置背景图片 可以导入网络图片和本地图片 1 网络图片 元素定位 background image url https timgsa baidu com timg image quality 80 size b99
  • CUDA error: CUBLAS_STATUS_EXECUTION_FAILED when calling ‘cublasSgemm’

    运行transformer模型是报错如题 1 减小batch size 原因是调用cublas函数时会生成句柄 占用一定的内存 确保剩余内存够使用 2 gpu驱动版本和cuda torch版本的匹配问题 低版本的gpu驱动 尝试换成11 0
  • 怎么上传本地项目或文件到SVN服务器

    实验需要将本地的文件上传到SVN的doc文件夹下 在桌面右击 TortoiseSVN gt Repo brower gt 输入你的仓库的url gt 输入用户姓名和密码 即可访问到svn 右键点击Add File即可添加要上传的文件 如下图
  • c++文件输入与输出

    基于流的文件IO 头文件 ofstream 写文件 ifstream 读文件 fstream 读写文件 using namespace std 打开文件 std ifstream fin xxx txt std ifstream fin f
  • 几个更优雅、更高效 Pythonic 代码写法!

    本文分享几个鲜为人知的 Pythonic 技巧 这些技巧非常有用 但并不广为人知 通过学习和使用这些技巧 可以帮你节省时间和精力 并使你的代码更加优雅和高效 1 三元运算符 三元运算符是 if else 语句的简写 语法是value if
  • Flink自定义HBaseSink类

    文章目录 HBaseCell类 HBaseSink类 HBaseCell类 package com vic flink entity import lombok Data import java util HashMap Data publ
  • cookie原理详解及单点登录原理

    cookie一般是用来客户端存储信息的 用它可以进行用户信息的检验 实际案例 单点登录 cookie的原理 第一次访问网站的时候 浏览器发出请求 服务器响应请求后 会将cookie放入到响应请求中 通过Set Cookie字段 在浏览器第二
  • awk脚本

    编写awk脚本 1 从 Hello World 开始 we create a file named test that contains a single line This example shows a script that cont
  • Springboot整合MyBatisPlus框架操作MySQL

    1 MyBatis Plus概述 MyBatis Plus opens new window 简称 MP 是一个 MyBatis opens new window 的增强工具 在 MyBatis 的基础上只做增强不做改变 为简化开发 提高效
  • Synchronized实现原理

    查看带有Synchronized语句块的class文件可以看到在同步代码块的起始位置插入了moniterenter指令 在同步代码块结束的位置插入了monitorexit指令 JVM需要保证每一个monitorenter都有一个monito
  • SQL Server与Java的类型对应,Char用setString设值

    表列出了基本 SQL Server JDBC 和 Java 编程语言数据类型之间的默认映射 SQL Server 类型 JDBC 类型 java sql Types Java 语言类型 bigint BIGINT long timestam
  • Java实现桶排序

    桶排序 使用额外空间 以空间换时间思想 因此时间复杂度为O n m 1 1 基本思想 桶排序是所有排序算法中最快 也是最简单的排序算法 基本思想是在知道所有待排元素的范围后 准备和这个范围同样数量的桶 并将元素放在对应的桶中 如待排元素为
  • java焦点图_基于JavaScript实现焦点图轮播效果

    不管是高校的网站还是电商的页面 焦点图的切换和轮播应该是一项不可或缺的应用 今天把焦点图轮播制作的技术要点做下笔记 以供日后查看 一 结构层 HTML 焦点图的HTML结构很简单 就是一个父容器 id box 包含三个子容器 分别存放图片
  • lua:table转json字符串

    table转字符串 function table2JsonString objTable local jsonString jsonString local t type objTable if t number then jsonStri
  • harbor修改配置文件后重启

    docker compose down prepare docker compose up d 转载于 https www cnblogs com wang lei p 11540792 html
  • 自从AndroidStudio更新到2.2,就有了CMake和传统JNI两种开发NDK的方法,主要就是在目录结构和build.gradle上的区别,下面我们将分别介绍目录区别和build.gr

    http blog csdn net u012527560 article details 51752070 自从AndroidStudio更新到2 2 就有了CMake和传统JNI两种开发NDK的方法 主要就是在目录结构和build gr
  • 使用JSON

    JSON Javascript Object Notion Javascript对象表示法 JSON是Javascript对象表示法的一个子集 它必然使用了Javascrip对象表示法中的所有相同的规则和基础类型 JSON可以表示对象的实例
  • 实战wxPython:044 - 高级控件之HtmlWindow

    本文介绍如何在Python的GUI工具中嵌入HTML页面 wxPython的wx html和wx html2模块支持解析和显示HTML文件内容 wx html HtmlWindow对象是一个通用的HTML浏览器 但不是一个全功能的浏览器 所
  • Go语言基础整理集合

    什么是Go语言 go语言是一门静态强类型语言 什么是动态和静态 可以理解为解释型和编译型 python 动态解释型语言 一边编译一边执行 golang java 静态编译型语言 必须先将文件编译成可执行文件后才能运行 什么是强类型语言 强制