龙空技术网

老王学习go语言——3.Go语言基础 -第一个go程序

开飞机的老王 49

前言:

现在咱们对“eclipse编写程序首先先创造什么”都比较关切,小伙伴们都需要学习一些“eclipse编写程序首先先创造什么”的相关知识。那么小编同时在网络上网罗了一些有关“eclipse编写程序首先先创造什么””的相关文章,希望各位老铁们能喜欢,咱们快快来学习一下吧!

惯例上书名《Go语言高并发与微服务实战》

第一部分 Go语言生平

Go出身名门,是鼎鼎大名的google的亲儿子,至于是不是唯一语言方面的儿子,这个我查了一下,Baidu没告诉我,姑且认为他是google的独生子吧,如果还有其他的,请各位提示孤陋寡闻的我。

Go出生于2007年,09年由于表现优异,就开源了。

Go出生的年代互联网已经有了长足的发展,所以Go从出生起就面对的是海量,高并发的互联网大潮,所以从胎教开始,Go语言就练就了一身本领,到2009年开源,2012年正式稳定版本发布,Go语言就已经在处理多核并发以及开发效率,挖掘计算机CPU资源,网络编程和并发编程等方面体现出了很强的实力。对了Go还是一个政治上过硬的好小伙,在垃圾分类在各大城市进行的如火如荼的情况下,Go能够自动进行垃圾回收,而且开放包容,不计较函数有多个返回值。

这当然得益于,Go从底层支持协程并发以及静态类型安全。

接着,Go用自己的优势,又孵化了Docker,Kubernetes和Etcd等现在纵横江湖的开源项目。

一段生平介绍完,不能免俗还得先安装个环境,输出个helloWorld,因为本文不是教人安环境的教程。而且这个未免太基础,不适合在这么“...”的文章里讲。请各位自行学习吧。无非是下载安装包,设置环境变量,(这里书里有一点我补充一下,windows下,根据安装包不停的下一步之后,GoPATH必须重新设置,设置成一个自定义路径,用来存放程序包,设置完成以后就算安装成功了,其他环境变量安装包会自动设置)通过命令查看version证明安装成功一类。我就不赘述了。

但IDE这个方面要多啰嗦两句,老王从事软件开发也算小20年了,一直以来坚持的是所有付费的咱都不用,而且付费的IDE注定会。。。,Go 都是开源的,你搞个IDE还收费,别怪老王不研究你,看在你提供30天免费试用期的情面上,也不研究你。

另外呢,Eclipse作为伴随我事件最长的IDE,前段时间学PHP我用的就是他,所以自然我会考虑有没有Go语言的插件,我回头问了一下百度,果然不负众望,插件名字叫GoClipse。于是动手安装。安装过程截图如下,首先到Eclipse ->help找到Eclipse Market

首先到Eclipse ->help找到Eclipse Market

搜索Goclipse

不管是啥,点同意,你没得选择,你不同意那就没有然后了

这个同上,你trust也得trust,不trust也得trust

一步步安装结束,重启Eclipse,我勒个去,Could Not Start

虽然could not start,还是看到了Welcome页面,你跟我闹呢

这是后新建个工程已经能看到go Project了

其实安装GoClipse插件前,我都没下载Go语言包,不知道上面那个错误是不是因为这个,也懒得管他了,我就当安装成功了,稍后再来解决你。

睡了几个小时,好吧,准备来解决这个问题吧。

既然是java version的问题,我先看一下本地的java 环境

我的java版本是11.0.7,怀疑是java版本过高了。既然eclipse是开源的,打算去看看goclipse源码,看看版本依赖的原因是什么,不要像我这样,每个东西都想抓住线索,问题会一直扩散,先找百度,把问题解决了,后边有空,腾出手再来找原因是可取的,不会再不相干的路径上浪费太多时间。

通过查看源代码,发现在环境启动时会进行JVM的参数检查。

public interface JvmCheckConstants_Actual {

String FEATURE_NAME = "Goclipse";

int REQUIRED_JAVA_VERSION = 8;

}

if(javaVersion >= REQUIRED_JAVA_VERSION)

return;

而原则上我的javaVersion是大于8的,那问题就变成了为什么javaVersion取到的是0,

public static String getJavaVersionProperty() {

return System.getProperty("java.version");

}

public static int getJavaVersion() {

String versionProperty = getJavaVersionProperty();

String[] versionSegments = versionProperty.split("\\.");

if(versionSegments.length < 2) {

return -1;

}

String javaVersionStr = versionSegments[1];

try {

return Integer.parseInt(javaVersionStr);

} catch(NumberFormatException e) {

return -1;

}

}

分析上面的代码也就不难发现由于是取得是数组第二个元素,所以11.0.7取到0也就不意外了。

那怎么解决呢,没有打算降低JDK或者JRE版本,所以打算外挂一个JDK1.8,单独给他使用。不知道效果如何。JDK的安装过程就不在这里展现了。

我直接下载了JRE1.8,解压缩到自定义的目录(我直接解压到C盘根目录了),然后在eclipse.ini里添加(如果有兴趣-vm参数的语法和作用请自行百度。)

-vm

C:\jre1.8.0_261\bin\javaw.exe

重新启动eclipse,问题解决

这时候尝试去new一个新项目,发现还有些配置要做。

修改完成以后,新建go Project,顺利创建,创建成功后的试图和目录结构如下:

每一个新建工程都会按照几个结构自动生成bin,pkg和src文件夹。而这三个目录分别用来存放编译后的可执行文件,编译时生成的中间文件和源代码。

而随后我就迫不及待的想尝试下能不能运行,于是我就新建了一个go file,

这里有三种文件类型分别是 Package Source File,Command Source File和Test Source File

随便选个类型在SRC目录下新建hello.go

然后build

系统提示,SRC文件夹下允许存放.go文件,需要新建个子目录来存放。

新建子目录hello,新建文件类型选择package Source file或者testSource File,然后直接运行。直接build,系统报错

这是因为Go语言规定可执行程序必须具备main包,具备可以执行函数main的go文件必须位于该包下。

为了尽快看到我们的hello World,省略中间的验证过程,咱们直接选择文件类型为Command Source File,下拉类别中选择 Simple Web Server

package main

import (

"net/http"

"fmt"

)

// Default Request Handler

func defaultHandler(w http.ResponseWriter, r *http.Request) {

fmt.Fprintf(w, "<h1>Hello %s!</h1>", r.URL.Path[1:])

}

func main() {

http.HandleFunc("/", defaultHandler)

http.ListenAndServe(":8080", nil)

}

框架自动生成代码如上,其实无论是什么语言,有一定编程和英文基础就能看懂上面的代码:

package main,上面也说过每个可执行goc程序,必须具备main包,而且main函数要在main包里,package main其实就是指定了包名,这个有点儿类似于其他编程语言的namespace,但感官上还是存在区别,namespace和package应该还是有区别的。有兴趣的同学可以去研究一下。

import 引入net下的http包和fmt包,这个就更容易理解了。

下面生面一个方法 defaultHander,关键字func用来声明方法,可以看到main方法前面也是func,

这种风格其实在很多语言里都有,但C和java省略的函数关键字,直接通过public,static,返回值类型等来标识和修饰函数,

而go当前看起来就是 func yourFuncname(参数)来声明一个函数,由于语言本身支持多返回值,所以函数声明当中没有返回值类型的声明

而defaultHandler函数功能其实也很简单,就是打印hello以及后面的参数,这种占位输出方式,做过编程的应该都能看懂。

main函数指定由defaultHandler来处理8080端口的请求。其实看完基本也就明白了,这个程序监听8080端口的http请求,输出hello 和Url.path

咱们先编译,把程序运行起来。

编译完成之后我们看到bin目录底下新生成了hello.exe文件。(可以通过eclipse run这个程序,也可以直接双击这个文件来运行exe,双击运行的结果是如果你要停止运行,需要手动在任务管理器结束这个进程。建议还是在eclipse运行。)

运行成功,自此我们的第一个Go程序成功运行。

大概总结一下本章:

1)go系出名门,出身显赫,同时战功卓著,又创造了k8s,Docker这些生命显赫的工具。

2)开发之前需要具备go语言开发包,这个直接官网下载就可以,下载安装完成以后,需要设计环境变量,这里有一个GoPATH需要特别关注,这是用来存放源文件的文件夹。工程也需要建在这个文件夹下。还有一个GoRoot是go语言包的安装目录。

3)go的开发可以完全命令行,或者采用商用或者其他IDE,我由于比较熟悉eclipse,沿用了eclipse,但是需要安装goclipse插件。插件要求jdk版本至少是8或者更高,但由于java在version命名上风格有变化,导致java最新版本取到的版本号为0,可以重新下载个java1.8的jre,并修改eclipse.ini文件。有兴趣的同学也可以修改goclipse源代码的版本检查方式,探索下最新版本的java版本,goclipse是否能正常运行。

4)eclipse成功运行后还要指定和配置Go语言包的安装路径。之后我们就可以愉快的进入Go的开发了

5)Go语言有几个规定

a.源文件不能直接放在src目录下,必须新建子目录,这跟go的打包方式有关。

b.Go程序必须包含main包,main方法必须位于main包下。

c.Go行尾不需要使用;号进行分割

d.func关键字用来声明方法,不需要指定返回值类型。

我们看到浏览器显示Hello,但是没有Url.path,我们来debug一下。

好吧,gdb--version,又是个新的知识点,为防止篇幅过长,咱们下一篇继续。

标签: #eclipse编写程序首先先创造什么