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. vue3.0 中文文档(暂时)地址

    https://v3.cn.vuejs.org/ https://vue-docs-next-zh-cn.netlify.app/guide/installation.html#vue-devtool ...

  2. idea引用lombok一直不成功

    idea引用lombok一直不成功 比如想使用lombok的@data注解一直报错,尽管已经声明了import lombok.Data,且在pom里面也增加了lombok依赖,但是就是不成功的时候 建 ...

  3. js 连接数据库 提示:ActiveXObject is not defined

    ActiveXObject is not defined 最近比较闲,上班瞎捣鼓一下,没想到报错了,提示ActiveXObject is not defined 大概是在js连接数据库时new对象使用 ...

  4. 力扣389(java)-找不同(简单)

    题目: 给定两个字符串 s 和 t ,它们只包含小写字母. 字符串 t 由字符串 s 随机重排,然后在随机位置添加一个字母. 请找出在 t 中被添加的字母. 示例 1: 输入:s = "ab ...

  5. 力扣591(java)-标签验证器(困难)

    题目: 给定一个表示代码片段的字符串,你需要实现一个验证器来解析这段代码,并返回它是否合法.合法的代码片段需要遵守以下的所有规则: 代码必须被合法的闭合标签包围.否则,代码是无效的. 闭合标签(不一定 ...

  6. Pandas+ SLS SQL:融合灵活性和高性能的数据透视

    简介: Pandas是一个十分强大的python数据分析工具,也是各种数据建模的标准工具.Pandas擅长处理数字型数据和时间序列数据.Pandas的第一大优势在于,封装了一些复杂的代码实现过程,只需 ...

  7. 【ClickHouse 技术系列】- 在 ClickHouse 中处理实时更新

    ​简介:本文翻译自 Altinity 针对 ClickHouse 的系列技术文章.面向联机分析处理(OLAP)的开源分析引擎 ClickHouse,因其优良的查询性能,PB级的数据规模,简单的架构,被 ...

  8. 运行模型对比 gemma:7b, llama2, mistral, qwen:7b

    [gemma:2b] total duration: 1m5.2381509sload duration: 530.9µsprompt eval duration: 110.304msprompt e ...

  9. [PHP] 浅谈 Laravel Authorization 的 gates 与 policies

    首先要区分 Authentication 与 Authorization,认证和授权,粗细有别. 授权(Authorization) 有两种主要方式,Gates 和 Policies. Gates 和 ...

  10. 2021“MINIEYE杯”中国大学生算法设计超级联赛(1)

    2021"MINIEYE杯"中国大学生算法设计超级联赛(1) 1001 Mod, Or and Everything 题意: 对于每次输入的数字n,求(n%1)|...(n%n)的 ...