go学习笔记(2)基本类型和声明(1)
这一节讲 go 的基本类型和声明,go 的基本类型大体上和其他的语言相差不多,但go语言的基本类型也有自己的一些特点。
内置类型
零值
go会对所有定义了但没有被赋值的变量赋一个零值,每一个类型都有它自己的零值。
这一节讲 go 的基本类型和声明,go 的基本类型大体上和其他的语言相差不多,但go语言的基本类型也有自己的一些特点。
go会对所有定义了但没有被赋值的变量赋一个零值,每一个类型都有它自己的零值。
时间真快,已经学了4个多月的go语言了。从刚接触这门语言起我就喜欢上了它,go有很多语言的影子,学起来快写起来舒服。让我最爽的一点就是用go写的程序可以把所有依赖都打包到一个文件中,部署起来非常方便。
虽然用go写了不少代码了,但还没有很系统的学习梳理。总是用到什么功能了去网上搜搜。接下来我想每天花一点时间系统地学习go语言,把自己学习和使用的一些心得想法记录下来,加深对go的理解。
如果只是想试试go语言的话,go语言官方提供了在线的编程环境 https://go.dev/play/ 直接在网页上就能在线编程了。
写好后点击 Run 就可以直接运行了,点 Format 会对当前的代码进行格式化,如果使用 VS Code 或 GoLand 每次保存代码或编译的时候都会自动对代码格式化。
上一篇讲了如何使用电脑的网卡唤醒功能来实现远程开机,这一篇介绍Windows家庭版如何开启远程桌面。
远程桌面这个功能只有在Windows专业版及以上版本才提供,如果不是对应的版本,在远程桌面的设置页面中会提示当前版本不支持。
除了微软自己的远程桌面方案,还有TeamViewer、VNC等解决方案,但相比之下微软自己的远程桌面是最流畅体验最好的。
除了购买Windows专业版外,还可以借助第三方补丁开启远程桌面的功能。
这一期聊电脑的网卡唤醒功能,网卡唤醒指的是在电脑关机的状态下通过网络启动电脑。
以往如果我们想让家里的电脑可以被远程访问,需要提前开机,甚至24小时不关机。而开启网卡唤醒后可以在需要用到电脑的时候再开机,而不需要让电脑一直开着,这样按需使用可以节省不少电费。
该功能需要电脑主板及网卡的支持,开启远程唤醒后,在关机状态下网卡还是在工作的,此时网卡会监听网络中是否有魔术封包发给它,如果收到魔术封包则会启动电脑。目前无线网卡还无法实现唤醒功能,该功能需要有线连接。
不同的电脑设置不同。下面以我的电脑,神州战神A7000为例说明如何在BIOS中开启远程唤醒:
首先开机时狂按F2进入BIOS,点击 Setup Utility
前面的文章聊了使用Nextcloud创建自己的网盘。通常在自己机器上搭的网盘只能在家里的内网用。这一期就来讲一讲,用nps实现内网穿透,让我们在公网上也可以访问家里的网盘。
最直接的内网穿透方式就是DDNS。如果有公网IP的话,采用这个方式是成本最低效果最好的。但由于现在监管严格,基本上家用宽带无法申请到公网IP了。
与DDNS效果差不多,但稍微麻烦一点的是P2P内网穿透,比较知名的P2P内网穿透软件有zerotier、n2n等。这种方式对网络的NAT类型要求比较严格。只有锥形NAT可以被穿透。而国内的宽带大部分都是对称型NAT,虽然网上有人说可以打电话申请改变自家宽带的NAT类型但成功的很少。
那剩下最后一条路就是用一个服务器作为反向代理,实现内网穿透。这个方案是最简单的,只要能连上网就能够穿透,缺点就是这个方案的成本很高。虽说国内的it行业发达,基础设施完善,但带宽却贵得离谱。阿里云最便宜的机器一年也要600多,带宽只有1M,相比之下国外的服务器就便宜多了带宽通常都有1G。
但国外的服务器往往很不稳定,而且延时太高,实际使用体验很差。那有没有既便宜,又稳定,带宽大,延时小的服务器呢?我搜了一圈还真的有,其实云服务器除了标准的VPS外还有NAT VPS。NAT VPS共享ip,共享带宽,通常内存及硬盘的配置会差一些能用的端口数量有限,所以费用能便宜不少,国内提供NAT VPS的云服务商规模都不大,服务器通常只有几个地区可以选择。
在日常生活中我通常使用Windows,很少用Ubuntu,即便是用到,也常常通过虚拟机或者云服务器来使用,但有些对性能有一定要求的程序还是得上真机跑。
以往我都是在电脑上开辟一块空闲的空间安装Ubuntu,这次我想试试在优盘上安装Ubuntu。
这样做的好处是,可以在需要用到Ubuntu的时候插上优盘,然后开机按F12或者其他的按键选择优盘启动即可,不需要时,不用每次开机都看着GRUB2的启动界面切换Windows。
经过我的一番折腾。 我发现只有部分U盘适合装系统,虽然现在USB3.0的U盘读写速度都很快。 但他们都有一个致命的缺点: 4k读写性能很差,在读写大量的小文件的时候,会非常非常的慢。 而系统在运行的时候,大多数情况下读写的都是小文件。
下面是使用Ubuntu自带的磁盘性能测试工具分别对5种不同的存储介质的性能检测结果:
前段时间帮一个朋友指导了一下RoboMaster青少年挑战赛,青少年挑战赛的赛场和前几年RoboMaster的赛场差不多,规则上来说要简单一些。小朋友们使用的战车主要是大疆的RoboMaster S1和RoboMaster EP。
我主要帮忙做了下能量机关的自动打击、小车巡线、抓取弹药瓶等。我是使用大疆机器人模拟器进行模拟调试的。这个模拟器很好用,通过scratch搭积木编程。程序写好后也可以导出,提供给S1或EP使用。
下面给大家看一下,使用模拟器跑出来的效果:
我心目中完美的网盘应该是这样的:大容量不限速、费用低廉、安全可靠、使用场景无限制。
能够同时满足以上几条的都是一些洋网盘,如Dropbox、Google Drive、Microsoft OneDrive、MEGA等。由于美国对中国科技的打压封锁,这几个网盘都不太容易正常使用。而国产网盘又不好用,限制颇多,因此想要有一个良好的网盘体验,就需要自己动手了。
今天这篇主要讲如何安装Nextcloud,在局域网内搭建个人网盘。之后的几篇将介绍Nextcloud的一些配置问题。
Nextcloud是一款开源网盘程序,它的官网地址是: https://nextcloud.com/
官方提供了服务器端(网页端)、桌面端和手机端。
Ipopt这个库在linux下编译是很容易的,但是在windows下想用它就很麻烦了。
官方只提供了较旧版本的Ipopt的编译版本,只能用在较旧版本的vs上。如果想用新版本或支持新的vs则只能自行编译。而Ipopt官网的windows编译教程写的不清不楚,按照官网的教程根本无法成功编译。
官网教程地址: https://coin-or.github.io/Ipopt/INSTALL.html
Ipopt 3.12官方的说明文档: https://projects.coin-or.org/Ipopt/browser/stable/3.12/Ipopt/doc/documentation.pdf?format=raw
本文编译环境部分主要参考官网的教程,后面编译Ipopt 3.12的部分参考Ipopt 3.12的文档,这文档也是找了半天才找到的。本文只适用于Ipopt 3.12。
把系统从 Ubuntu 16.04 换到了最新 Ubuntu 19.10 后运行编写的 OpenGL 程序发生了闪退,但是把程序放在 16.04 上跑就跑得好好的。
找 BUG 时发现可能是没有获取到正确的版本号,使得程序认为找不到相应的 OpenGL
版本。
百思不得其解,不应该啊,换了新系统程序就不能用了?在两个系统间来回切换对比后发现了问题的原因。
原来是我在 19.10
上没有安装独显的驱动,系统只运行了自带的集显驱动,虽然集显的驱动支持OpenGL4.5,但可能是为了兼容性的原因,默认只允许使用3.0及以下的版本。
程序在运行时在加载 OpenGL 时首先会查看 OpenGL version string
,如果该字符串中所表示的版本号小于所需的版本则会直接报错退出。