for(int a = 0; a<10 ; a++){
// c语言的循环
}
for a := 0 ; a<10 ; a++ {
    // go语言的循环
}
// for二边的括号被去掉,int声明被简化为:=,直接通过编译器右值推导获得a的变量类型并声明
// 同样if语句也是 go语言无需添加表达式的括号
if(表达式){
}
if 表达式 {
}
// go语言中,左括号必须紧接着语句不换行,其他样式的括号被视为代码编译错误,这个特性刚开始会使开发者有一些不习惯,但随着对go语言的不断熟悉,开发者就会发现风格统一让大家在阅读代码时把注意力集中到了解决问题上 而不是代码风格上
// c语言的前置++和后置++
int a, b
a = i++; //执行程序第一次是本身的数 执行第二次加1
b = ++i; //执行程序第一次就开始加1
// 在go语言中,自增操作符不再是一个操作符,而是一个语句。因此,在go语言中自增只有一种写法
i++
// 如果写成前置自增++i ,或者赋值后自增 a=i++ 都将导致编译错误 
/*
目前golang具有二种编译器
一种是建立在GCC基础上的Gccgo
另外一种是分别针对64位和32位计算机的一套编译器(6g和8g)
依赖方面由于go语言大多数第三方开源库都在github上 在代码的import中加上对应的github路径就可以使用了
库会默认下载到工程的pkg目录下 另外,编译时会默认检查代码中所有实体的使用情况 凡是没有使用到的package或变量,都会编译不通过
*/
/*
异常处理
go语言不支持try catch结构化的异常解决方式,因为觉得会增加代码量,而且会被滥用,不管多小的异常都会抛出
3个重要关键字defer,panic,recover
defer是函数结束后执行,呈先进后出
panic是程序出现无法修复的错误时使用,但会让defer执行完;
recover会修复错误,不至于程序终止,当不确定函数不会出粗时使用defer+recover
go语言如果是普通异常查看被调用方返回error对象
如果是严重异常指的是中断性panic(比如除0)使用defer,recover,panic机制来捕获处理
严重异常一般由go语言内部自动抛出 不需要用户主动抛出,避免传统try catch写得到处都是的情况
*/
/*
网络编程
socket用net.Dial(基于tcp/udp,封装了传统的connect,listen,accept等接口)
http用http.Get/Post()
rec用client.Call('class_name.method_name',args,&reply)
因此它天生具备了去中心化,分布式等特性,具体表现之一就是提供了丰富便捷的网路编程接口
在go语言中还有一个重要的能力就是自带高性能HttpServer 通过简单的几行代码就可以得到一个基于协程的高性能web服务
更重要的是,维护成本极低,没有任何依赖
*/
/*
函数多返回值
允许函数返回多个值,在某些场景下,可以有效的简化编程
go语言推荐的编程风格,是函数返回的最后一个参数为error类型(只要逻辑体中可能出现异常),这样,在语言级别支持多返回值,就很有必要了
语言交互性
语言交互性指的是本语言是否能和其他语言交互,比如可以调用其他语言编译的库
go可以和c程序交互
*/
/*
其他一些有趣的特性
类型推导 : 在定义变量的时候是支持var abc = 10这样的语法 让go语言看上去有点像动态类型语言 但go语言实际上是强类型语言
接口interface:一个类型只要实现了某个interface的所有方法,既可实现该interface,无需显示去继承,go编程规范推荐每个interface只提供一到二个的方法,这样使得每个接口的目的非常清晰
defer机制 :在go语言中提供关键字defer可以通过该关键字指定需要延迟执行的逻辑体,也就是说,在函数体return前或出现panic时执行,这种机制非常适合善后逻辑处理,比如可以尽早避免可能出现的资源泄露问题,可以说defer是继goroutine和channel之后,另一个非常重要,实用的语言特性,对defer的引入,在很大程度上可以简化编程
“包”的概念:和python一样,把相同功能的代码放到一个目录,称之为“包”,包可以被其他包引用,main包是用来生成可执行文件,每个程序只有一个main包,包的主要用途是提高代码的可复用性,通过import可以引入其他包
交叉编译:比如说你可以再运行Linux系统的计算机上 开发运行Windows下运行的应用程序,这是第一门完全支持utf-8的编程语言,它不仅可以处理utf-8编码的字符串,就连它的源码格式都是使用的utf-8编码
 
*/
package main //标记当前文件为main包,main包也是go程序的入口包
//导入 net/http包,这个包的作用是HTTP的基础封装和访问
import(
"net/http"
)
// 程序执行的入口函数 main()
func main(){
// 使用http.FileServer 文件服务器将当前目录作为根目录(/目录)的处理器,访问根目录,就会进入当前目录
http.Handle("/", http.FileServer(http.Dir(".")))
// 默认的HTTp服务侦听在本机的8080端口
http.ListenAndServer(":8080",nil)
}
// 把这个源码保存为main.go,安装go语言的开发包(后续我们会讲解如何安装),在命令行输入一下命令 go run main.go
// go语言的源码无需头文件,编译的文件都来自于后缀名为.go的源码文件

初学go语言的更多相关文章

  1. 初学Objective-C语言需要了解的星星点点

             其实大多数开发初学者都有一些相同的特点,可以说是一种“职业病”.Most有其他平台开发基础的初学者,看到Xcode就想摩拳擦掌:看到Interface Builder就想跃跃欲试:而 ...

  2. 初学c语言

    虽然有一点点基础,但是还是从头学吧,这一周也就一些c语言的几个代码代表的意思和一个Hello world的程序. #include是头文件名,<>这是要返回的函数类型,然后是main主函数 ...

  3. 适合初学C语言是练习的代码

    作为一个小白,自己学C的时候就想找些代码练练手,就整理了一些. 1.最大公约数和最小公倍数 # include <stdio.h> int main(void) {     int i, ...

  4. GO语言之channel

    前言: 初识go语言不到半年,我是一次偶然的机会认识了golang这门语言,看到他简洁的语法风格和强大的语言特性,瞬间有了学习他的兴趣.我是很看好go这样的语言的,一方面因为他有谷歌主推,另一方面他确 ...

  5. 转:C语言中的头文件可以自己写吗?

    转自:http://www.eefocus.com/computer00/blog/08-09/155791_9ebdc.html 一些初学C语言的人,不知道头文件(*.h文件)原来还可以自己写的. ...

  6. 《C专家编程》第二章——这不是Bug,而是语言特性

    无论一门语言有多么流行或多么优秀,它总是存在一些问题,C语言也不例外.本章讨论的重点是C语言本身存在的问题,作者煞费苦心的用一个太空任务和软件的故事开头,也用另一个太空任务和软件的故事结尾,引人入胜. ...

  7. python语言switch-case

    初学python语言,竟然很久才发现python没有switch-case语句,查看官方文档说是可以用if-elseif-elseif....代替. 讲真,这都不是问题.不就是一个条件判断吗.用if- ...

  8. C语言杂谈(一)scanf()、scanf_s()与错误 C4996

    错误 C4996 初学C语言时,第一个接触到的I/O函数便是scanf()了.但在高版本的 Visual Studio (包括但不限于2015.2013.2012)编译代码时,却会出现意想不到的错误. ...

  9. R语言书籍的学习路线图

    现在对R感兴趣的人越来越多,很多人都想快速的掌握R语言,然而,由于目前大部分高校都没有开设R语言课程,这就导致很多人不知道如何着手学习R语言. 对于初学R语言的人,最常见的方式是:遇到不会的地方,就跑 ...

  10. (转)如何学好C语言,一个成功人士的心得!

    zidier111发表于 2013-1-26 08:59:05   今 天,我能够自称是一个混IT的人,并能以此谋生,将来大家能一次谋生,都要感谢两个人:克劳德.香农和约翰.冯.诺依曼,是他们发现了所 ...

随机推荐

  1. keycloak~jwt的rs256签名的验证方式

    接口地址 keycloak开放接口地址:/auth/realms/fabao/.well-known/openid-configuration rsa算法相关术语 RSA算法是一种非对称加密算法,其安 ...

  2. MUI-拿到版本名称和版本code

    场景: 一般App发布了新版本之后,都会提示用户去更新.这就需要我们获取App的当前版本号与后台存储的版本号做对比来判断是否需要更新. 获取版本名称和版本code: 打开manifest.json文件 ...

  3. N个技巧,编写更高效 Dockerfile|云效工程师指北

    简介:云原生时代下软件的构建和部署离不开容器技术.提到容器,几乎大家下意识都会联想到 Docker .而 Docker 中有两个非常重要的概念,一个是Image(镜像),一个是Container(容器 ...

  4. 云原生 DevOps,模型化应用交付能力很重要!

    ​简介: DevOps 文化及其支撑其落地实践的自动化工具与平台能力在云原生架构渐为普及的背后,发挥了关键的价值. 撰稿:溪洋 云原生正在成为企业业务创新和解决规模化挑战的加速器. 云原生带来的变革绝 ...

  5. 什么是 ELF 文件(文件格式)

    ELF 是一种用于二进制文件.可执行文件.目标代码.共享库和核心转储格式文件. 是UNIX系统实验室(USL)作为应用程序二进制接口(Application Binary Interface,ABI) ...

  6. [FAQ] ErrorException of l5-swagger:generate, Required @OA\Info() not found

    l5-swagger 除了要添加 @OA\Get() 针对方法的注释之外,每个 Controller 还需要一个概述信息,如下: /** * @OA\Info( * title="Auth ...

  7. WPF 使用 Dispatcher 的 InvokeAsync 和 BeginInvoke 的异常处理差别

    一般认为 WPF 的 Dispatcher 的 InvokeAsync 方法是 BeginInvoke 方法的平替方法和升级版,接近在任何情况下都应该在业务层使用 InvokeAsync 方法代替 B ...

  8. WPF 切换主题使用 luna 复古版本

    本文告诉大家如何在 WPF 里面使用 luna 等复古主题 今天在 lsj 说他准备优化 WPF 的程序集时,准备删除 luna 等程序集时,找到了一段有趣的注释,发现在 WPF 里面可以通过一些有趣 ...

  9. React项目中报错:Parsing error: The keyword 'import' is reservedeslint

    记得更改完配置后,要重启编辑器(如:VSCode)!!! 记得更改完配置后,要重启编辑器(如:VSCode)!!! 记得更改完配置后,要重启编辑器(如:VSCode)!!! 这个错误通常发生在你尝试在 ...

  10. 使用亚马逊AWS云服务器进行深度学习——免环境配置/GPU支持/Keras/TensorFlow/OpenCV

    前言 吐槽:由于科研任务,需要在云端运行一个基于神经网络的目标识别库,需要用到GPU加速.亚马逊有很多自带GPU的机器,但是环境的配置可折腾坏了,尤其是opencv,每次总会出各种各样的问题! 无奈中 ...