go基础语法

go基础语法

先下载安装go,然后到vscode下载go插件

1. 基础

输入输出

package main
import "fmt"
func main(){a:=1var b=2 var c int //不给初始值得标出变量类型 c=3var d stringfmt.Scanf("%s",&d) //接收用户输入fmt.Printf("Hello World! %d,%d,%d,%s",a,b,c,d)
}

基本类型

//整数
int int8 int16 int32 int64
uint uint uint8 uint16 uint32 uint64
uintptr 
byte //uint8别名
rune //int32别名
//浮点数
float32 float64
//复数
complex64 complex128
//布尔
bool
//字符串
stringfmt.Printf("hello "+"world")//hello world

标识符

标识符用来命名变量、类型等程序实体。一个标识符实际上就是一个或是多个字母(AZ和az)数字(0~9)、下划线_组成的序列,但是第一个字符必须是字母或下划线而不能是数字。

注意:变量一旦声明必须使用否则编译报错,可以用_来作变量名来解决这个问题。

Go 字符串格式化符号:

格式化符号描述示例
通用格式
%v以默认格式输出变量fmt.Printf("%v", 42)
%+v对结构体加字段名的方式输出fmt.Printf("%+v", struct{A int}{A: 42})
%#v以 Go 语法格式化输出fmt.Printf("%#v", map[string]int{"a": 1})
%T输出值的类型fmt.Printf("%T", 42)
%%输出百分号fmt.Printf("%%")
布尔值
%t输出 truefalsefmt.Printf("%t", true)
整数
%b二进制表示fmt.Printf("%b", 5)
%cUnicode 对应字符fmt.Printf("%c", 65)
%d十进制表示fmt.Printf("%d", 42)
%o八进制表示fmt.Printf("%o", 10)
%x十六进制表示(小写字母)fmt.Printf("%x", 15)
%X十六进制表示(大写字母)fmt.Printf("%X", 15)
%UUnicode 格式输出fmt.Printf("%U", 65)
浮点数
%f十进制浮点数fmt.Printf("%f", 3.14)
%e科学计数法(小写 e)fmt.Printf("%e", 3.14)
%E科学计数法(大写 E)fmt.Printf("%E", 3.14)
%g自动选择 %f%e 的简洁表示fmt.Printf("%g", 3.14)
字符串与字节
%s普通字符串fmt.Printf("%s", "Go")
%q带双引号的字符串或字符fmt.Printf("%q", "Go")
%x每个字节用两字符十六进制表示fmt.Printf("%x", "abc")
%X十六进制(大写)表示fmt.Printf("%X", "abc")
指针
%p指针地址fmt.Printf("%p", &x)

2. 分支,选择,循环

if…else if…else

package main
import "fmt"
func main(){var a int = 100;if a>10{//if语句还可以初始化变量,比如if b:=5;a>10{}fmt.Printf("a>10\n" );} else if a>5{fmt.Printf("a>5\n" );} else {fmt.Printf("a<5\n" );}fmt.Printf("a 的值为 : %d\n", a);
}

switch

var grade string = "B"
var marks int = 90
switch marks {case 90: grade = "A"case 80: grade = "B"case 50,60,70 : grade = "C"default: grade = "D"  
}
switch {case grade == "A" :fmt.Printf("优秀!\n" )    case grade == "B", grade == "C" : //多条件匹配fmt.Printf("良好\n" )      case grade == "D" :fmt.Printf("及格\n" )      case grade == "F":fmt.Printf("不及格\n" )default:fmt.Printf("差\n" );
}

for

for i:=1;i<5;i++{fmt.Println(i)
}
numbers := [6]int{1, 2, 3, 5}
for i,x:= range numbers {fmt.Printf("第 %d 位 x 的值 = %d\n", i,x)
} 

3. 函数

func swap(a,b int)(int ,int){return b,a
}
func sum(a int,b int,hello666 func(int)int) int{//`func(int)int`类型参数为int类型,返回值为int类型return hello666(a)+hello666(b)
}
func main(){a,b:=1,2a,b=swap(a,b)fmt.Println(a,b)//匿名函数赋值给squaresquare:=func(x int)int{return x*x;}fmt.Println(sum(1,2,square))
}

方法:一个方法就是一个包含了接受者的函数

type Point struct{//定义一个结构体X intY int
}
func (p *Point) SetPoint(x int,y int){//该method属于Point类型对象中的方法,注意要指针引用p.X=xp.Y=y
}
func main(){var p Pointp.SetPoint(3,4)//可以通过这种方式调用方法fmt.Println(p)//{3 4}
}

4. 派生类型

派生类型

//数组,长度不可变
a:=[5]int{1,2,3,4,5}//切片Slice,长度可变
a:=make([]int,0)//创建Slice,长度为0
a=append(a,1,2,3,4)//添加元素
b:=[]int{1,2,3,4}//创建Slice并赋值
b[0]=5
fmt.Println(a,b[1:4])//[1 2 3 4] [2 3 4]
//[1,4),区间左闭右开
s[:len(s)/2]//默认下限为 0
s[len(s)/2:]//默认上限为 len(s)//集合(映射)Map
m:=map[string]int{//指定键为string类型,值为int类型"a":1,"b":2, //不要忘了逗号
}
fmt.Println(m)m:=make(map[string]int)
m["a"]=1
m["b"]=2//语言范围range
range 关键字用于 for 循环中迭代数组(array)、切片(slice)、通道(channel)或集合(map)的元素

结构体

type Point struct{X intY int
}
func main(){p:=Point{1,2}q:=pz:=&pp.X=9z.Y=6fmt.Println(p)//{9 6}fmt.Println(q)//{1 2}fmt.Println(*z)//{9 6}
}
type Point struct{X intY int
}
func (p *Point) SetPoint(x int,y int){p.X=xp.Y=y
}
func main(){var p Pointp.SetPoint(3,4)fmt.Println(p)//{3 4}
}

接口

type Shape interface{Print() //无需func关键字
}
type Rectangle struct{}
type Triangle struct{}
func(r Rectangle) Print(){fmt.Println("矩形")
}
func(r Triangle) Print(){fmt.Println("三角形")
}func printShape(s Shape){s.Print()
}
func main(){printShape(Rectangle{})//矩形printShape(Triangle{})//三角形
}

nil可以表示指针,接口,切片,映射,通道,函数的零值。

5. 错误处理

_,err:=fmt.Println("dd")//变量名_可忽略变量未使用导致的编译报错
if err != nil {fmt.Println("错误执行")
}else{fmt.Println("正常执行")
}

6. 并发

Goroutines:

  • Go 中的并发执行单位,类似于轻量级的线程。
  • Goroutine 的调度由 Go 运行时管理,用户无需手动分配线程。
  • 使用 go 关键字启动 Goroutine。
  • Goroutine 是非阻塞的,可以高效地运行成千上万个 Goroutine
package main
import ("fmt""time"
)
func sayHello() {for i := 0; i < 5; i++ {fmt.Println("Hello")time.Sleep(100 * time.Millisecond)}
}
func main() {go sayHello() // 启动 Goroutinefor i := 0; i < 5; i++ {fmt.Println("Main")time.Sleep(100 * time.Millisecond)}
}
/*输出是没有固定先后顺序,因为它们是两个 goroutine 在执行,同一个程序中的所有 goroutine 共享同一个地址空间。
Main
Hello
Main
Hello
Hello
Main
Main
Hello
Hello
Main
*/

Channel:

  • Go 中用于在 Goroutine 之间通信的机制。
  • 支持同步和数据共享,避免了显式的锁机制。
  • 使用 chan 关键字创建,通过 <- 操作符发送和接收数据。
package main
import "fmt"func sum(s []int, c chan int) {sum := 0for _, v := range s {sum += v}c <- sum // 把 sum 发送到通道 c
}
func main() {s := []int{7, 2, 8, -9, 4, 0}c := make(chan int) //声明一个通道go sum(s[:len(s)/2], c)//默认下限为 0go sum(s[len(s)/2:], c)//默认上限为 len(s)x, y := <-c, <-c // 从通道 c 中接收fmt.Println(x, y, x+y)//-5 17 12
}

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

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

相关文章

硬件基础(3):三极管(1):理论基础

目录 一、背景 二、定义 三、分类 四、工作原理 NPN三极管工作原理 基本工作原理 电流放大倍数&#xff08;增益&#xff09; 输入特性 1. 输入特性的基本概念 2. 输入特性曲线的形态 3. 输入特性曲线的具体分析 输出特性 1. 输出特性图的基本概念 2. 输出特性曲…

Git最佳实践指南(Windows/Linux双系统详解)

Git最佳实践指南&#xff1a;从入门到熟练&#xff08;Windows/Linux双系统详解&#xff09; 一、环境搭建与基础配置&#xff08;适用Windows/Linux&#xff09; 1.1 Git安装与验证 # Windows系统安装&#xff08;推荐Chocolatey包管理&#xff09; # 直接下载git二进制文件…

吃一堑长一智

工作中经历&#xff0c;有感触记录下 故事一 以前在一家公司时&#xff0c;自己是一名开发人员&#xff0c;遇到问题请教领导解决方案&#xff0c;当时领导给了建议&#xff0c;后来上线后出问题了&#xff0c;背了锅。心里想的是领导说这样做的呀&#xff0c;为什么出问题还…

联想 SR590 服务器 530-8i RAID 控制器更换损坏的硬盘

坏了的硬盘会自动亮黄灯。用一个空的新盘来替换&#xff0c;新盘最好不要有东西。但是有东西可能也没啥&#xff0c;因为我看 RAID 控制器里有格式化的选项 1. 从 IPMI 把服务器关机&#xff0c;电源键进入绿色闪烁状态 2. 断电&#xff0c;推开塑料滑块拉出支架&#xff0c;…

前端浏览器开发中的浏览器兼容问题【持续更新】

目录 一、什么是浏览器兼容问题 二、JavaScript兼容问题及解决方案 2.1addEventListener与attachEvent的区别 2.2集合类对象问题 2.3自定义属性问题 2.4event.x与event.y问题 2.5window.location.href问题 2.6事件委托方法 三、CSS兼容问题及解决方案 3.1浏览器CSS样式初…

【c语言】字符函数和字符串函数(1)

一、字符分类函数 c语言中有部分函数是专门做字符分类的&#xff0c;也就是一个字符是属于什么类型的字符&#xff0c;这些函 数的使用要包含一个头文件ctype.h中。 其具体如下图所示&#xff1a; 这些函数的使用方式都类似&#xff0c;下面我们通过一个函数来看其…

LeetCodehot 力扣热题100 全排列

这段代码的目的是计算给定整数数组的所有全排列&#xff08;permutations&#xff09;&#xff0c;并返回一个包含所有排列的二维数组。 思路解析 在这段代码中&#xff0c;采用了 深度优先搜索&#xff08;DFS&#xff09; 和 回溯 的方法来生成所有的排列。 关键步骤&#xf…

【Qt源码】窥视信号槽实现机制

为了便于通过调试进源码探究下Qt信号槽实现原理&#xff0c;这里简单写一段代码如下所示。 1.自定义信号槽连接 MainWindow::MainWindow(QWidget *parent): QMainWindow(parent), ui(new Ui::MainWindow) {ui->setupUi(this);QObject::connect(ui->pushButton,&QPu…

六十天前端强化训练之第二天CSS选择器与盒模型深度解析

欢迎来到编程星辰海的博客讲解 目录 一、CSS 核心概念 1. 三种引入方式 2. CSS 注释 3. 常见单位系统 二、CSS选择器核心知识 1. 基础选择器类型 2. 组合选择器 3. 伪类选择器&#xff08;部分示例&#xff09; 4. 优先级计算规则 三、盒模型深度解析 1. 标准盒模型图…

【DeepSeek】-macOS本地终端部署后运行DeepSeek如何分析图片

【DeepSeek】-macOS本地终端部署后运行DeepSeek如何分析图片 根据您的需求&#xff0c;目前需要了解以下几个关键点及分步解决方案&#xff1a; --- 一、现状分析 1. Ollama 的限制&#xff1a; - 目前Ollama主要面向文本大模型&#xff0c;原生不支持直接上传/处理图片 …

【音视频】音视频录制、播放原理

一、音视频录制原理 通常&#xff0c;音视频录制的步骤如下图所示&#xff1a; 我们分别从音频和视频开始采样&#xff0c;通过麦克风和摄像头来接受我们的音频信息和图像信息&#xff0c;这通常是同时进行的&#xff0c;不过&#xff0c;通常视频的采集会比音频的采集慢&…

解锁养生密码,拥抱健康生活

在快节奏的现代生活中&#xff0c;养生不再是一种选择&#xff0c;而是我们保持活力、提升生活质量的关键。它不是什么高深莫测的学问&#xff0c;而是一系列融入日常的简单习惯&#xff0c;每一个习惯都在为我们的健康加分。 早晨&#xff0c;当第一缕阳光洒进窗户&#xff0c…

7种内外网数据交换方案全解析 哪种安全、高效、合规?

内外网数据交换方案主要解决了企业跨网络数据传输中的安全、效率与合规性问题。通过采用先进的加密技术、高效的数据传输协议以及严格的审批和审计机制&#xff0c;该方案确保了数据在内外网之间的安全交换&#xff0c;同时提高了传输效率&#xff0c;并满足了企业对数据合规性…

【WSL2】 Ubuntu20.04 GUI图形化界面 VcXsrv ROS noetic Vscode 主机代理 配置

【WSL2】 Ubuntu20.04 GUI图形化界面 VcXsrv ROS noetic Vscode 主机代理 配置 前言整体思路安装 WSL2Windows 环境升级为 WIN11 专业版启用window子系统及虚拟化 安装WSL2通过 Windows 命令提示符安装 WSL安装所需的 Linux 发行版&#xff08;如 Ubuntu 20.04&#xff09;查看…

监听其他音频播放时暂停正在播放的音频

要实现当有其他音频播放时暂停当前音频&#xff0c;你可以使用全局事件总线或 Vuex 来管理音频播放状态。这里我将展示如何使用一个简单的事件总线来实现这个功能。 首先&#xff0c;你需要创建一个事件总线。你可以在项目的一个公共文件中创建它&#xff0c;例如 eventBus.js…

Android数据库SQLite、Room、Realm、MMKV/DataStore、ObjectBox性能比较

Android主流数据库基础特点核心数据库特性与性能对比维度总结 在 Android 开发中&#xff0c;数据库选型直接影响应用的性能、开发效率和可维护性。不同数据库的存储限制&#xff0c;比如常用的SharedPreferences、SQLite、还有基于SQLite封装的greenDao等&#xff0c;这些似乎…

Solidity study

Solidity 开发环境 Solidity编辑器&#xff1a;Solidity编辑器是一种专门用于编写和编辑Solidity代码的编辑器。常用的Solidity编辑器包括Visual Studio Code、Atom和Sublime Text。以太坊开发环境&#xff1a;以太坊开发环境&#xff08;Ethereum Development Environment&am…

【废物研究生零基础刷算法】DFS与递归(一)典型题型

文章目录 跳台阶递归实现指数级枚举递归实现排列型枚举上面两题总结 递归实现组合型枚举P1036选数 跳台阶 思路&#xff1a; 如果 n 1&#xff0c;只有一种走法&#xff08;走 1 级&#xff09;。如果 n 2&#xff0c;有两种走法&#xff08;11 或 2&#xff09;。对于 n &g…

GCC 和 G++的基本使用

GCC 和 G 命令 GCC 和 G 命令GCC&#xff08;GNU C 编译器&#xff09;基本用法常用选项示例 G&#xff08;GNU C 编译器&#xff09;基本用法常用选项示例 GCC 与 G 的区别选择使用 GCC 还是 G C编译流程1. 预处理&#xff08;Preprocessing&#xff09;2. 编译&#xff08;Co…

HWUI 和 Skia

&#x1f4cc; HWUI 和 Skia 的关系 Skia 是 Android 的底层 2D 图形库&#xff0c;提供 CPU 和 GPU 渲染能力&#xff0c;支持 OpenGL、Vulkan、Metal 等后端。HWUI 是 Android UI 组件的 GPU 渲染引擎&#xff0c;主要用于 加速 View、动画、阴影等 UI 元素的绘制。HWUI 依赖…