先自我介绍一下,小编浙江大学毕业,去过华为、字节跳动等大厂,目前阿里P7
深知大多数程序员,想要提升技能,往往是自己摸索成长,但自己不成体系的自学效果低效又漫长,而且极易碰到天花板技术停滞不前!
因此收集整理了一份《2024年最新Golang全套学习资料》,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友。
既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,涵盖了95%以上Go语言开发知识点,真正体系化!
由于文件比较多,这里只是将部分目录截图出来,全套包含大厂面经、学习笔记、源码讲义、实战项目、大纲路线、讲解视频,并且后续会持续更新
如果你需要这些资料,可以添加V获取:vip1024b (备注go)
正文
但是为了实现和窗口系统的交互,一般使用如下代码引用头文件:
#include <GL/glut.h>
GLUT表示OpenGL工具箱,体现了现代窗口系统所共有的功能函数库。GLUT的目的就是隐藏平台的细节,glut.h已经包含了gl.h和glu.h。使用GLUT是因为OpenGL没有包含输入和窗口命令,而输入和窗口命令是由平台所决定的,与平台的相关性较大。但是前面说过,OpenGL是与平台无关的,也就是说OpenGL是跨平台的。这样设计人员就需要专门设计一个需要和窗口系统进行交互的函数库。
三、什么是DirectX?
DirectX是一种应用程序接口(API),它可让以windows为平台的游戏或多媒体程序获得更高的执行效率,加强3d图形和声音效果,并提供设计人员一个共同的硬件驱动标准,让游戏开发者不必为每一品牌的硬件来写不同的驱动程序,也降低用户安装及设置硬件的复杂度。这样说是不是有点不太明白,其实从字面意义上说,Direct就是直接的意思,而后边的X则代表了很多的意思,从这一点上我们就可以看出DirectX的出现就是为了为众多软件提供直接服务的。
DirectX是由很多API组成的,按照性质分类,可以分为四大部分,显示部分、声音部分、输入部分和网络部分。
显示部分担任图形处理的关键,分为DirectDraw(DDraw)和 Direct3D(D3D),前者主要负责2D图像加速。它包括很多方面:我们播放mpg、DVD电影、看图、玩小游戏等等都是用的DDraw,你可以把它理解成所有划线的部分都是用的DDraw。后者则主要负责3D效果的显示,比如CS中的场景和人物、FIFA中的人物等等,都是使用了DirectX的 Direct3D。
四、GDI与OpenGL与DirectX之间的区别
OpenGL、Direct3D、GDI这三个是不同的API, 没有谁属于谁,其次OpenGL和Direct3D主要用于三维渲染, GDI只能用于绘制二维图形图像。前面两个主要用于实时渲染,后者主要用于Win32程序绘图。
五、显卡驱动
1.显卡概述
显卡(Video card,Graphics card)全称显示接口卡,又称显示适配器,是计算机最基本配置、最重要的配件之一。显卡作为电脑主机里的一个重要组成部分,是电脑进行数模信号转换的设备,承担输出显示图形的任务。我们在显示器上看到的图像是由很多个小点组成的,这些小点称为“像素”。在最常用的分辨率设置下,屏幕显示一百多万个像素,电脑必须决定如何处理每个像素,以便生成图像。为此,它需要一位“翻译”,负责从CPU获得二进制数据,然后将这些数据转换成人眼可以看到的图像。除非电脑的主板内置了图形功能,否则这一转换是在显卡上进行的。也就是说,显卡的功能就是将计算机中由1和0表示的二进制数据转换为图像显示出来。
显卡的主要部件是:主板连接设备、监视器连接设备、处理器和内存。主板连接设备,主要用于传输数据和供电;处理器,又称为显示芯片(Video chipset)、图形处理器(GPU)或视觉处理器(VPU),是显卡的主要处理单元,用于决定如何处理屏幕上的每个像素,由于它工作时会产生大量热量,所以它的上方通常安装有散热器或风扇;内存,常被称为“显示存储器”,简称显存,用于存放有关每个像素的信息以及暂时存储已完成的图像;监视器连接设备便于我们查看最终结果。
2.显卡工作原理
数据(data)一旦离开CPU,必须通过4个步骤,最后才会到达显示屏:
1.从总线(Bus)进入GPU(Graphics Processing Unit,图形处理器):将CPU送来的数据送到北桥(主桥)再送到GPU(图形处理器)里面进行处理。
2.从 Video Chipset(显卡芯片组)进入 Video RAM(显存):将芯片处理完的数据送到显存。
3.从显存进入Digital Analog Converter (= RAM DAC,随机读写存储数—模转换器):从显存读取出数据再送到RAM DAC进行数据转换的工作(数字信号转模拟信号)。但是如果是DVI接口类型的显卡,则不需要经过数字信号转模拟信号。而直接输出数字信号。
4.从DAC进入显示器(Monitor):将转换完的模拟信号送到显示屏。
驱动程序:驱动程序是一个软件组件,可让操作系统和设备彼此通信。例如,假设应用程序需要从设备中读取某些数据;应用程序会调用由操作系统实现的函数,操作系统会调用由驱动程序实现的函数。 驱动程序(由设计和制造该设备的同一公司编写)了解如何与设备硬件通信以获取数据。 当驱动程序从设备获取数据后,它会将数据返回到操作系统,操作系统会将数据返回至应用程序。
显卡驱动是由生产硬件的硬件厂商写的,它是为某个系列的显卡所开发的OpenGL的实现;而我们开发一个OpenGL的应用程序时所使用的OpenGL仅仅是一套接口,它是公共的,独立于硬件平台和操作系统的,我们根据OpenGL规范所是实现的这个程序描述的只是我们想要做什么,至于具体怎么做、实现结果是什么效果,它是由显卡驱动和硬件决定的;
OpenGL所提供的只是接口,我们所调用的也只是接口;具体的实现由显卡生产商实现,也就是他们所提供的显卡驱动;我们使用OpenGL可以调用API(这个api仅仅是函数名,仅仅是接口而已)去绘制一个三角形,但是硬件如何知道这个函数是用来绘制三角形的,这一部分就是由显卡驱动来完成,显卡驱动里会提供这个接口的具体实现,也就是说如果没有安装显卡驱动或者显卡驱动里并没有提供绘制三角形的实现,那么OpenGL里的api是毫无意义的;
由于OpenGL的大多数实现都是由显卡厂商编写的,当产生一个bug时通常可以通过升级显卡驱动来解决。这些驱动会包括你的显卡能支持的最新版本的OpenGL,这也是为什么总是建议你偶尔更新一下显卡驱动。
开发者通过图像编程接口发出渲染命令,这些渲染命令也就是DrawCall,只有显卡驱动知道如何和GPU通信,;正是因为显卡驱动的存在,显卡驱动会将接收到的渲染命令翻译成GPU能够理解的语言,也负责将纹理等数据转换成GPU所支持的格式,之后GPU才能懂OpenGL和DirectX,显卡驱动就像是一个中介,介于图形编程接口(OpenGL和DirectX)和GPU之间。
可以将显卡驱动比喻是显卡的操作系统,是显卡的灵魂;
六、C++图形化GUI开发框架
这边主要就介绍两个比较常见的框架:MFC和QT。
1.MFC介绍
微软基础类库(英语:Microsoft Foundation Classes,简称MFC)是微软公司提供的一个类库(class libraries),以C++类的形式封装了Windows API,并且包含一个应用程序框架,以减少应用程序开发人员的工作量。其中包含大量Windows句柄封装类和很多Windows的内建控件和组件的封装类。
图形设备接口(Graphics Device Interface,GDI),把应用程序的函数调用传递给图形设备驱动程序,由设备驱动程序来执行与硬件相关的函数。GDI向应用程序提供了一个设备无关的编程,同时以设备相关的格式和具体的硬件设备交互。
在MFC中使用GDI进行绘图操作一般会涉及两个对象,一是设备上下文对象,包括CDC及其派生类;二是GDI对象,包括CFont、CBrush、CPen等。
介绍MFC之前,需要先介绍几个MFC的概念。
1) API
Windows操作系统提供了各种各样的函数,以方便我们开发Windows应用程序。这些程序是Windows操作系统提供给应用程序编程的接口(Application Programming Interface),简称为API函数。我们在编写Windows程序时所说的API函数,就是指系统提供的函数,所有主要的Windows函数都在Windows头文件中进行了声明。
举个例子,Windows中播放声音的API函数,函数原型如下:
BOOL PlaySound(LPCSTR pszSound, HMODULE hmod,DWORD fdwSound);
pszSound就是你要播放的文件路径,fdwSound就是你要选择的播放模式。具体的用法可以查阅相关的资料。
在使用API时,注意头文件和库文件对API的支持,否则程序编译或链接会提示错误。API PlaySound需要头文件mmsystem.h和库文件WINMM.LIB的支持。
#include <mmsystem.h>#pragma comment(lib, “WINMM.LIB”)
2) SDK
SDK(Software Development Kit, 即软件开发工具包 )一般是一些被软件工程师用于为特定的软件包、软件框架、硬件平台、操作系统等建立应用软件的开发工具的集合。举个例子,假如我们要开发无线信号发射器,在购买芯片或主板的同时,厂商同时会提供主板的SDK开发包,以方便我们对主板的编程操作。这个开发包通常会包含主板的API函数、帮助文档、使用手册、辅助工具等资源,也就是定义里面说的,SDK实际上一个开发所需资源的一个集合。
3) 控制台程序
所谓的控制台应用程序,就是能够运行在MS-DOS环境中的程序。控制台应用程序通常没有可视化的界面,只是通过字符串来显示或者监控程序。控制台程序常常被应用在测试、监控等用途,用户往往只关心数据,不在乎界面。一个典型的应用就是ping网络,如图1-1所示:
图1-1 控制台程序示例
DOS 的这种界面叫CUI (Command line User Interface ) 命令行模式的人机接口。
4) GUI程序
GUI 是 Graphical User Interface 的简称,即图形用户界面,如Windows是以图形界面方式操作的,因为你可以用鼠标来点击按钮来进行操作,很直观。而DOS就不具备GUI,所以他只能输入命令。另外,GUI 还是一种结合计算机科学、美学、心理学、行为学,及各商业领域需求分析的人机系统工程,强调人—机—环境三者作为一个系统进行总体设计。这种面向客户的系统工程设计其目的是优化产品的性能,使操作更人性化,减轻使用者的认知负担,使其更适合用户的操作需求,直接提升产品的市场竞争力。
5) MFC程序
MFC是微软基础类库的简称,是微软公司实现的一个c++类库,主要封装了大部分的windows API函数,所以在MFC中,你可以直接调用 windows API,同时需要引用对应的头文件或库文件;另外,MFC除了是一个类库以外,还是一个框架,在vc++里新建一个MFC的工程,开发环境会自动帮你产生许多文件,同时它使用了mfcxx.dll。xx是版本,它封装了mfc内核,所以你在你的代码看不到原本的SDK编程中的消息循环等等东西,因为MFC框架帮你封装好了,这样你就可以专心的考虑你程序的逻辑,而不是这些每次编程都要重复的东西。但是由于是通用框架,没有最好的针对性,当然也就丧失了一些灵活性和效率,但是MFC的封装很浅,所以在灵活性以及效率上损失不大,可以忽略不计。
MFC程序就是基于MFC编译出来的可执行程序,是一种GUI程序。
6) 字符编码:Unicode和多字节
字符编码是一个复杂的过程。简单地讲,就是将机器语言(0和1组成的字符串)转换成我们能识别的信息的一个过程。我们不必在这里深究这个过程是怎么完成的,暂时没有必要。这里我们知道的是,MFC有两种编码方式,Unicode和多字节并且可以设置切换。切换方法是打开项目属性页,常规项对应的字符集中可切换编码方式。Visual C++6.0用的是多字节编码;Virtual Studio 2010 默认使用的是Unicode编码,所以在代码移植的时候经常会提示很多编码方式相关的错误,解决方法是将Unicode编码改为多字节编码即可。这里提示一点,使用 _T 宏有条件地编写字符串的代码,使之可移植到 Unicode。这一招可以解决大多数编码方式不匹配引发的问题。
可以用visual studio 2019创建一个默认的MFC项目。
执行之后,生成了一个图形界面程序:
2.Qt是什么?Qt简介
Qt(官方发音 [kju:t],音同 cute)是一个跨平台的 C++ 开发库,主要用来开发图形用户界面(Graphical User Interface,GUI)程序,当然也可以开发不带界面的命令行(Command User Interface,CUI)程序。
Qt 是纯 C++ 开发的,所以学好 C++ 非常有必要。
Qt 还存在 Python、Ruby、Perl 等脚本语言的绑定, 也就是说可以使用脚本语言开发基于 Qt 的程序。开源社区就是这样,好东西就会被派生扩展,到处使用, 越来越壮大。
Qt 支持的操作系统有很多,例如通用操作系统 Windows、Linux、Unix,智能手机系统 Android、iOS、WinPhone, 嵌入式系统 QNX、VxWorks 等等。
Qt 可以做什么?
Qt 虽然经常被当做一个 GUI 库,用来开发图形界面应用程序,但这并不是 Qt 的全部;Qt 除了可以绘制漂亮的界面(包括控件、布局、交互),还包含很多其它功能,比如多线程、访问数据库、图像处理、音频视频处理、网络通信、文件操作等,这些 Qt 都已经内置了。
Qt 是应用程序开发的一站式解决方案,有了 Qt,你就可以高枕无忧了!Qt 本身包含的模块也日益丰富, 一直有新模块和第三方模块加入进来。
大部分应用程序都可以使用 Qt 实现,除了与计算机底层结合特别紧密的,例如驱动开发,它直接使用硬件提供的编程接口,而不能使用操作系统自带的函数库。
1997年,Qt 被用来开发 Linux 桌面环境 KDE,大获成功,使 Qt 成为 Linux 环境下开发 C++ GUI 程序的事实标准。
下面的程序都使用 Qt 开发:WPS、YY语音、Skype、豆瓣电台、虾米音乐、淘宝助理、千牛、暴雪的战网客户端、VirtualBox、Opera、咪咕音乐、Google地图、Adobe Photoshop Album 等。
Linux 也是嵌入式的主力军,广泛应用于消费类电子、工业控制、军工电子、电信/网络/通讯、航空航天、汽车电子、医疗设备、仪器仪表等相关行业。
Qt 虽然也支持手机操作系统,但是由于 Android 本身已经有 Java 和 Kotlin,iOS 本身已经有 Objective-C 和 Swift,所以 Qt 在移动端的市场份额几乎可以忽略。
总起来说,Qt 主要用于桌面程序开发和嵌入式开发。
网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。
需要这份系统化的资料的朋友,可以添加V获取:vip1024b (备注Go)
一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!
网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。
需要这份系统化的资料的朋友,可以添加V获取:vip1024b (备注Go)
[外链图片转存中…(img-CDW8Zsv2-1713135343389)]
一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!