最近学习了Go语言,记录一下。Go的起源与C和C++相比,Go是一门非常年轻的语言。2007年,Google内部,三个大佬决定开发一门新的语言,因为C++复杂,构建编译速度慢,对并发的支持差,于是他们做了一个基于C语言的Go的增删改查。出生了。2009年10月30日,在GoogleTechtalk上,Go语言最初的三位创始人之一RobParker发表了关于Go语言的演讲,这也是Go语言首次公开亮相。十天后,谷歌正式宣布Go语言项目开源。2012年3月28日,Go1.0版本正式发布。同时,Go官方发布了“Go1Compatibility”承诺:只要源代码符合Go1语言规范,Go编译器就会保证向后兼容(backwardscompatible)。给开发者带来安全感。Go只有25个关键字,是主流编程语言中最少的。内置垃圾回收,堪比C语言(C#和Java也有垃圾回收)。方法或变量的初始大小写决定了可见性,而无需传递额外的访问修饰符,喜欢这个。内置的接口类型为程序的组合带来方便。变量初始为零类型,避免了使用随机值作为初始值的问题。函数或方法中的错误会通过return语句显式返回,调用者不能忽略对返回错误的处理。内置数组边界检查,减少越界访问带来的安全风险。内置的并发支持简化了并发编程,这也是很多人使用Go语言的原因之一。为了提高可读性,Go不支持默认函数参数。每个类型都有自己的方法集,类型定义和方法实现是独立的。相关网址https://golang.org:原Go的官网,现在跳转至go.dev。https://go.dev:Go目前的官网。https://pkg.go.dev/:包管理。https://goproxy.cn/:由奥飞开发的Go模块代理站点,现由七牛云托管。http://goproxy.io/:李宝琨开发的Go模块代理站点。环境准备版本Mac:10.15.7Go:1.19,最新版本VSCode:1.71.0安装1.在https://go.dev/dl页面下载Mac版的pkg安装文件:2.按照向导执行GoInstall,程序会被安装到/usr/local/go目录下。3.重启终端,输入命令goversion。如果能正确显示版本号,则安装成功。4、在VSCode中安装go扩展:5、在VSCode中输入cmd+shift+p,然后输入Go:Install,选择下图红框安装扩展工具;6、选择所有的扩展工具,点击确定,但是这时候一般会出现错误,无法正常安装。使用下面第七步可以解决这个问题:7.在~/.bash_profile文件中添加:exportGO111MODULE=onexportGOPROXY=https://goproxy。cn执行source~/.bash_profile使配置生效,然后重新执行第六步的扩展工具安装。8、至此,环境准备好了,可以开始写代码了。代码示例helloworld1。在go-study目录下创建一个helloworld目录。go-study是我学习Go语言和存放代码的根目录。2、用VSCode打开helloworld目录,在该目录下新建一个main.go文件,内容如下:packagemainimport("fmt")funcmain(){fmt.Println("hellooec2003!")}3.使用gorunmain.go运行程序:一个web服务假设这样一个场景:零代码平台涉及到很多不同的服务和中间件,运维人员需要在客户端服务器端进行各种配置是私下部署的。如果使用go编写web程序,简单的界面配置和shell脚本的结合可以降低部署难度。让我们来看看如何制作这个简单的配置网页程序。1、创建deploy-app目录,在该目录下创建main.go文件,内容如下:packagemainimport("embed""io/fs""log""net""net/http""os")funcmain(){http.Handle("/",http.FileServer(getFileSystem()))ip,err:=getLocalIP()iferr!=nil{return}log.Println("启动成功,通过http://"+ip+":10002Access")server:=http.Server{Addr:":10002",Handler:nil,}server.ListenAndServe()}//go:embedwwwrootvarembededFilesembed.FSfuncgetFileSystem(useOSbool)http.FileSystem{ifuseOS{returnhttp.FS(os.DirFS("wwwroot"))}fsys,err:=fs.Sub(embededFiles,"wwwroot")iferr!=nil{panic(err)}returnhttp.FS(fsys)}funcgetLocalIP()(ipstring,errerror){addrs,err:=net.InterfaceAddrs()iferr!=nil{return}for_,addr:=rangeaddrs{ipAddr,ok:=addr.(*net.IPNet)if!ok{continue}ifipAddr.IP.IsLoopback(){continue}if!ipAddr.IP.IsGlobalUnicast(){continue}returnipAddr.IP.String(),nil}return}包:定义名为main的包,名为main的包是应用程序的入口包。import:导入需要使用的包。go:embed:embed是Go1.16中新增的功能。通过//go:embed指令,可以在编译阶段将静态资源文件打包到编译后的程序中,并提供访问这些文件的能力。getLocalIP:获取IP的函数。server.ListenAndServe():使用此方法启动http服务器侦听。2、在deploy-app目录下创建一个wwwroot目录,在wwwroot下创建一个idnex.html文件:
