go语言string结尾是什么_老王学习go语言——3.Go语言基础 -第一个go程序

惯例上书名《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

8b6fca8620ef49f4cec7bd7ff3dcceed.png

首先到Eclipse ->help找到Eclipse Market

1f6eea11baacf4c540a7dbbd7fda4df9.png

搜索Goclipse

b16908027a3336885ead96dc41febb1f.png

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

c1f4678cba2b01fc2f69b94174bf68a5.png

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

41bc0b3a02503aa201ec93b37edc9dda.png

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

9f39e6fc48d039352e921205554b0ac4.png

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

23b9ff550cd0148c92b3045806df7334.png

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

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

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

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

28ac25ce8a027efae71fb8990ff7f332.png

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

76db8332a6d2b1bca17ed6730a6cdc76.png

通过查看源代码,发现在环境启动时会进行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_261binjavaw.exe

重新启动eclipse,问题解决

b60add50d4655e8b2404d09145fac9da.png

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

040df0d6f717229bb97f819292f33774.png

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

aa5d964dc3c9970da74acc9861f668e8.png
47ea41b9c0fb61c54f34c58ba4945187.png

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

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

3663834ab0dac564c402ed630bdf3a0f.png

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

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

然后build

e74f1e6403bd05e787976667b5dc65d1.png

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

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

0a8433c5829ca02b418d17b72c3382fd.png

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

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

c683f136f3f0acb37603e725441e2bd8.png

package main

import (

"net/http"

"fmt"

)

// Default Request Handler

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

fmt.Fprintf(w, "

Hello %s!

", 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运行。)

16722be7e930a2f382ad4446fc2dc98d.png
ff4ab5c06abb94a8565b11d53e2d6f5b.png

运行成功,自此我们的第一个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一下。

391877536c6280e6823b6004bb328ad8.png

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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值