《极客时间TonyBai go语言第一课》学习笔记

news2024/11/28 16:32:31

文章目录

  • 前置篇
    • 显式
    • 组合
    • 并发
  • 入门篇
    • Go 包的初始化次序![在这里插入图片描述](https://img-blog.csdnimg.cn/direct/1388d0d1bddd4a37b98eba5fcb41fc4d.png)
    • 初始化一个项目
  • 大纲

前置篇

显式

在 C 语言中,下面这段代码可以正常编译并输出正确结果:

#include <stdio.h>
int main() {
short int a = 5;
int b = 8;
long c = 0;
c = a + b;
printf("%ld\n", c);
}

我们看到在上面这段代码中,变量 a、b 和 c 的类型均不相同,C 语言编译器在编译c =
a + b这一行时,会自动将短整型变量 a 和整型变量 b,先转换为 long 类型然后相加,
并将所得结果存储在 long 类型变量 c 中。那如果换成 Go 来实现这个计算会怎么样呢?我
们先把上面的 C 程序转化成等价的 Go 代码:

package main
import "fmt"
func main() {
var a int16 = 5
var b int = 8
var c int64
c = a + b
fmt.Printf("%d\n", c)
}

如果我们编译这段程序,将得到类似这样的编译器错误:“invalid operation: a + b
(mismatched types int16 and int)”。我们能看到 Go 与 C 语言的隐式自动类型转换不
同,Go 不允许不同类型的整型变量进行混合计算,它同样也不会对其进行隐式的自动转
换。
因此,如果要使这段代码通过编译,我们就需要对变量 a 和 b 进行显式转型,就像下面代
码段中这样:

c = int64(a) + int64(b)
fmt.Printf("%d\n", c)

在 Go 语言中,不同类型变量是不能在一起进行混合计算的,这是因为 Go 希望开发人员
明确知道自己在做什么,这与 C 语言的“信任程序员”原则完全不同,因此你需要以显式
的方式通过转型统一参与计算各个变量的类型。
除此之外,Go 设计者所崇尚的显式哲学还直接决定了 Go 语言错误处理的形态:Go 语言
采用了显式的基于值比较的错误处理方案,函数 / 方法中的错误都会通过 return 语句显式
地返回,并且通常调用者不能忽略对返回的错误的处理

组合

Go 语言为支撑组合的设计提供了类型嵌入(Type Embedding)。通过类型嵌入,我们可
以将已经实现的功能嵌入到新类型中,以快速满足新类型的功能需求,这种方式有些类似
经典面向对象语言中的“继承”机制,但在原理上却与面向对象中的继承完全不同,这是
一种 Go 设计者们精心设计的“语法糖”。

// $GOROOT/src/sync/pool.go
type poolLocal struct {
private interface{}
shared []interface{}
Mutex
pad [128]byte
}

在代码段中,我们在 poolLocal 这个结构体类型中嵌入了类型 Mutex,这就使得
poolLocal 这个类型具有了互斥同步的能力,我们可以通过 poolLocal 类型的变量,直接
调用 Mutex 类型的方法 Lock 或 Unlock。

注意:
go中type struct{}和type interface{}区别 todo.待补充type interface的详情

并发

并发”这个设计哲学的出现有它的背景,你也知道 CPU 都是靠提高主频来改进性能的,
但是现在这个做法已经遇到了瓶颈。主频提高导致 CPU 的功耗和发热量剧增,反过来制约
了 CPU 性能的进一步提高。2007 年开始,处理器厂商的竞争焦点从主频转向了多核。

在这种大背景下,Go 的设计者在决定去创建一门新语言的时候,果断将面向多核、原生支
持并发作为了新语言的设计原则之一。并且,Go 放弃了传统的基于操作系统线程的并发模
型,而采用了用户层轻量级线程,Go 将之称为 goroutine。

goroutine 占用的资源非常小,Go 运行时默认为每个 goroutine 分配的栈空间仅 2KB。
goroutine 调度的切换也不用陷入(trap)操作系统内核层完成,代价很低。因此,一个
Go 程序中可以创建成千上万个并发的 goroutine。而且,所有的 Go 代码都在 goroutine
中执行,哪怕是 go 运行时的代码也不例外。

在提供了开销较低的 goroutine 的同时,Go 还在语言层面内置了辅助并发设计的原语:
channel 和 select。开发者可以通过语言内置的 channel 传递消息或实现同步,并通过
select 实现多路 channel 的并发控制。相较于传统复杂的线程并发模型,Go 对并发的原
生支持将大大降低开发人员在开发并发程序时的心智负担。

入门篇

Go 包的初始化次序在这里插入图片描述

参考图书管理项目:https://github.com/bigwhite/publication/tree/master/column/timegeek/go-first-course/09/bookstore
镜像链接:https://bgithub.xyz/bigwhite/publication/tree/master/column/timegeek/go-first-course
github镜像网站:https://blog.csdn.net/wtt234/article/details/135815704

初始化一个项目

$mkdir simple-http-server
$cd simple-http-server
$go mod init simple-http-server

大纲

在这里插入图片描述

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

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

相关文章

C#.net8创建webapi,使用SqlSugar,仓储模式,DTO,服务层,控制层的综合应用(企业级)

本文源码地址: https://download.csdn.net/download/u012563853/89036104 源码中,也有详细的注释说明。 代码总览: 这是一个综合性比较强的文章,需要有一定的基础,没有基础的人,看了后,会全面的了解一下,有基础的人,看了后会加强认识,更加的巩固,直接在项目中去应…

人工智能时代:如何运用Excel函数与公式结合AI应用办公

前言 本文将结合人工智能的概念和Excel的高级功能&#xff0c;通过具体、详细的示例&#xff0c;展示如何利用Excel的函数与公式提升数据处理和分析的效率。博客内容涵盖基础函数的使用、高级公式的构建、以及如何通过编程接口与Excel进行交互&#xff0c;实现自动化和智能化的…

Python爬虫快速上手,知识介绍与实战demo

目录 前言 一、爬虫是什么&#xff1f; 二、爬虫的基本流程&#xff1a; 三、http协议 请求与响应 四、 request 五、 响应Response 六、总结 七、简单实战demo 前言 简单来说互联网是由一个个站点和网络设备组成的大网&#xff0c;我们通过浏览器访问站点&#xff0c;站点把HT…

混合现实(MR)开发工具

混合现实&#xff08;MR&#xff09;开发工具是一系列软件和框架&#xff0c;它们使得开发者能够创建和优化能够在虚拟与现实世界之间无缝交互的应用程序。以下是一些在MR领域内广泛使用的开发工具。 1.Microsoft Mixed Reality Toolkit (MRTK) MRTK是一个跨平台的工具包&…

Yarn与Zookeeper的介绍

Yarn--三大调度策略 FIFO(先进先出): 目前几乎已经没有人使用了. 类似于: 单行道. 好处: 每个计算任务能独享集群100%的资源. 弊端: 不能并行执行, 如果大任务过多, 会导致小任务执行时间过长. Capacity(容量调度): 我们用…

idea Springboot 电影推荐系统LayUI框架开发协同过滤算法web结构java编程计算机网页

一、源码特点 springboot 电影推荐系统是一套完善的完整信息系统&#xff0c;结合mvc框架和LayUI框架完成本系统springboot dao bean 采用协同过滤算法进行推荐 &#xff0c;对理解JSP java编程开发语言有帮助系统采用springboot框架&#xff08;MVC模式开发&#xff09;&…

亮数据,可视化数据采集强大利器

前言 随着信息技术的飞速发展&#xff0c;我们已经进入了一个以数据为中心的世纪。在这个时代&#xff0c;数据不仅仅是信息的载体&#xff0c;它已经成为了推动社会进步、创新科技、增强决策和驱动经济增长的关键资源。 在这个数据世纪中&#xff0c;掌握数据的能力等同于掌…

计算机网络—VLAN 间路由配置

目录 1.拓扑图 2.实验环境准备 3.为 R3 配置 IP 地址 4.创建 VLAN 5.配置 R2 上的子接口实现 VLAN 间路由 6.配置文件 1.拓扑图 2.实验环境准备 配置R1、R3和S1的设备名称&#xff0c;并按照拓扑图配置R1的G0/0/1接口的IP地址。 [Huawei]sysname R1 [R1]interface Giga…

希亦、洁盟、大宇超声波清洗机好用吗?比拼谁是性价比之王

在追求高效生活品质的今天&#xff0c;超声波清洗机以其独特的清洁技术和便捷的操作方式&#xff0c;成为了家用和商用清洁领域的新宠。尤其对于眼镜用户而言&#xff0c;一台高效的超声波清洗机不仅能够轻松去除镜片上的污渍和细菌&#xff0c;更能保护镜片不受损伤&#xff0…

提升Web开发安全性:分析JScrambler、JShaman等五款在线JavaScript加密混淆工具

摘要 本篇技术博客将介绍五款常用且好用的在线JavaScript加密混淆工具&#xff0c;包括 jscrambler、JShaman、jsfack、freejsobfuscator 和 jjencode。通过对这些工具的功能及使用方法进行详细解析&#xff0c;帮助开发人员更好地保护和加密其 JavaScript 代码&#xff0c;提…

学浪视频如何下载或者录屏

很多同学购买了学浪视频&#xff0c;可是不知道如何下载下来&#xff0c;用录屏&#xff0c;发现学浪PC学生版客户端有防止录屏&#xff0c;为了解决这个问题&#xff0c;我开发了学浪视频下载的客户端 大家有需要自己取一下&#xff0c;截止到4月1号&#xff0c;最新版本是2.…

《自动机理论、语言和计算导论》阅读笔记:p115-p138

《自动机理论、语言和计算导论》学习第 6 天&#xff0c;p115-p138 总结&#xff0c;总计 24 页。 一、技术总结 1.associativity and comutativity (1)commutativity(交换性): Commutativity is the property of an operator that says we can switch the order of its ope…

【TB作品】MSP430G2553,超声波倒车雷达PCB,单片机,超声波SR04,键盘,oled

题目 硬件&#xff1a;MSP430G2553、 SR04超声波传感器 、3*4键盘、 无源蜂鸣器、oled显示屏 软件 1 、实时显示测量得到的距离 2、按键设置一个报警门限数值&#xff0c;直接输入数值后确认 3、低于报警门限数值就开始报警&#xff0c;而且距离越近蜂鸣器的鸣叫频率越高 程序…

ctf题目

目录 1.文件包含的一道题目&#xff0c;没什么难度&#xff0c; 2.一道sql注入的题目&#xff0c;伪静态 3.限制只能本地访问。 1.文件包含的一道题目&#xff0c;没什么难度&#xff0c; 但是一个点就是它这里去包含的那个文件名就是flag&#xff0c;而不是flag.php也不是f…

基于BEV的自动驾驶会颠覆现有的自动驾驶架构吗

基于BEV的自动驾驶会颠覆现有的自动驾驶架构吗 引言 很多人都有这样的疑问–基于BEV(Birds Eye View)的自动驾驶方案是什么&#xff1f;这个问题&#xff0c;目前学术界还没有统一的定义&#xff0c;但从我的开发经验上&#xff0c;尝试做一个解释&#xff1a;以鸟瞰视角为基础…

BIONIOAIO

通信技术整体解决的问题 1.局域网内的通信要求 2.多系统间的底层消息传递机制 3.高并发下&#xff0c;大数据量的通信场景需要 4.游戏行业。无论是手游服务端、还是大型网络游戏&#xff0c;java的应用越来越广 IO模型基本说明 就是用什么样的通道或者说是通信模式和架构…

Netty学习——源码篇9 Handler其他处理与异步处理

1 ChannelHandlerContext 每个ChannelHandler被添加到ChannelPipeline后&#xff0c;都会创建一个ChannelHandlerContext&#xff0c;并与ChannelHandler关联绑定。ChannelHandlerContext允许ChannelHandler与其他的ChannelHandler进行交互。ChannelHandlerContext不会改变添加…

14-项目管理:如何编写高质量的Makefile?

下面给你举个例子&#xff0c;你就会理解低质量的Makefile文件是什么样的了。 build: clean vetmkdir -p ./Roleexport GOOSlinux && go build -v .vet:go vet ./...fmt:go fmt ./...clean:rm -rf dashboard上面这个Makefile存在不少问题。例如&#xff1a;功能简单&a…

基于springboot实现企业客户管理系统项目【项目源码+论文说明】

基于springboot实现企业客户管理系统演示 摘要 本论文主要论述了如何使用JAVA语言开发一个企业客户管理系统&#xff0c;本系统将严格按照软件开发流程进行各个阶段的工作&#xff0c;采用B/S架构&#xff0c;面向对象编程思想进行项目开发。在引言中&#xff0c;作者将论述企…

信息化项目数据质量管理

数据质量管理定义&#xff1a; 对数据从计划、获取、存储、共享、维护、应用、消亡生命周期的每个阶段里可能引发的各类数据质量问题&#xff0c;进行识别、监控、预警、处理等一系列管理活动&#xff0c;并通过改善和提高管理水平使得数据质量获 得进一步提高。 2术语和定义 2…