当前位置: 首页 > news >正文

Go语言与数据库开发:01-01

一、前言

Google的三位大牛,为了解决在21世纪多核和网络化环境下越来越复杂的编程问题而发明了go语言,
从2007年9月开始设计和实现,于2009年的11月对外正式发布。从版本的发布历史来看,go语言是从
Ken Thompson发明的B语言、Dennis M. Ritchie发明的C语言逐步演化过来的,是C语言家族的成员,
因此很多人将Go语言称为21世纪的C语言。

纵观这几年来的发展趋势,Go语言已经成为云计算、云存储时代最重要的基础编程语言。

Go语言有着和C语言类似的语法,但是它不仅仅是一个更新的C语言。它还从其他语言借鉴了很多好的
想法,同时避免引入过度的复杂性。 Go语言中和并发编程相关的特性是全新的也是有效的,
同时对数据抽象和面向对象编程的支持也很灵活。 Go语言同时还集成了自动垃圾收集技术用
于更好地管理内存。

Go语言尤其适合编写网络服务相关基础设施,同时也适合开发一些工具软件和系统软件。

目前Go语言已经成为受欢迎的作为无类型的脚本语言的替代者: 因为Go编写的程序通常比脚本语言运
行的更快也更安全,而且很少会发生意外的类型错误。

Go语言还是一个开源的项目,可以免费获编译器、库、配套工具的源代码。

Go语言编写的程序无需修改就可以在不同的系统环境下运行。

二、 Go语言的设计哲学

Go语言的编程哲学是简洁。

正如Rob Pike所说,“软件的复杂性是乘法级相关的”,通过增加一个部分的复杂性来修复问题
通常将慢慢地增加其他部分的复杂性。通过增加功能和选项和配置是修复问题的最快的途
径,但是这很容易让人忘记简洁的内涵,即使从长远来看,简洁依然是好软件的关键因素。

简洁的设计需要在工作开始的时候舍弃不必要的想法,并且在软件的生命周期内严格区别好
的改变或坏的改变。通过足够的努力,一个好的改变可以在不破坏原有完整概念的前提下保
持自适应,正如Fred Brooks所说的“概念完整性”;而一个坏的改变则不能达到这个效果,它
们仅仅是通过肤浅的和简单的妥协来破坏原有设计的一致性。只有通过简洁的设计,才能让
一个系统保持稳定、安全和持续的进化。

Go语言有足够的类型系统以避免动态语言中那些粗心的类型错误,但是Go语言的类型系统相
比传统的强类型语言又要简洁很多。。在实践中Go语言简洁的类型系统给了程序员带来了更
多的安全性和更好的运行时性能。

Go语言鼓励当代计算机系统设计的原则,特别是局部的重要性。它的内置数据类型和大多数
的准库数据结构都经过精心设计而避免显式的初始化或隐式的构造函数,因为很少的内存分
配和内存初始化代码被隐藏在库代码中了。比如,Go语言的动态栈使得轻量级线程goroutine
的初始栈可以很小,因此创建一个goroutine的代价很小,创建百万级的goroutine完全是可行的。

Go程序也很容易学习。

使用Go语言自带工具构建Go语言项目只需要使用文件名和标识符名称, 一个偶尔的特殊注释来确定所有的
库、可执行文件、测试、基准测试、例子、以及特定于平台的变量、项目的文档等;Go语言
源代码本身就包含了构建规范。

三、Go语言入门

运行环境:
root@ubuntu:~# go version
go version go1.6.2 linux/amd64

设置GOPATH:
root@ubuntu:/home/go# export GOPATH=/home/go
root@ubuntu:/home/go# echo $GOPATH
/home/go

学习一门新语言时,一种仪式性的开场程序就是从那个经典的helloWorld开始:

package main

import "fmt"

func main() {

    fmt.Println("Hello, World!")

}

root@ubuntu:/home/go/ch01# go run helloworld.go
Hello, World!

root@ubuntu:/home/go/ch01# go build helloworld.go
root@ubuntu:/home/go/ch01# ls -l
total 2240
-rwxr-xr-x 1 root root 2288216 Jun 30 03:13 helloworld
-rw-r--r-- 1 root root 74 Jun 30 03:10 helloworld.go
root@ubuntu:/home/go/ch01# ./helloworld
Hello, World!

相关文章:

  • 网络爱情-搞笑版
  • Vue上传文件或图片摘要
  • execvp
  • Java 读写文件大全
  • Selenium-Grid2 配置RemoteWebDriver
  • 错误备忘_ArcGIS_MatLab_ArcGIS 和 MatLab 集成时权限问题造成 MatLab 做图抛出系统内存错误...
  • 计算IMEI号的校验位
  • 删除所有的用户表,存储过程,游标的应用,动态SQL的使用
  • 简单的回顾
  • Memcached的线程模型及状态机
  • pre标签内文本自动换行
  • 最大熵工具包的使用
  • iptables开启,通过nginx无法访问php程序
  • 在linux系统(CentOS)上安装中文支持包
  • Android -- Glide框架详解(一)
  • JS 中的深拷贝与浅拷贝
  • 【407天】跃迁之路——程序员高效学习方法论探索系列(实验阶段164-2018.03.19)...
  • docker容器内的网络抓包
  • Java 网络编程(2):UDP 的使用
  • java中具有继承关系的类及其对象初始化顺序
  • JS创建对象模式及其对象原型链探究(一):Object模式
  • SpringBoot 实战 (三) | 配置文件详解
  • TypeScript迭代器
  • 分享一份非常强势的Android面试题
  • 给自己的博客网站加上酷炫的初音未来音乐游戏?
  • 后端_ThinkPHP5
  • 将回调地狱按在地上摩擦的Promise
  • 那些被忽略的 JavaScript 数组方法细节
  • 使用iElevator.js模拟segmentfault的文章标题导航
  • 使用putty远程连接linux
  • 推荐一个React的管理后台框架
  • 小试R空间处理新库sf
  • 一个JAVA程序员成长之路分享
  • 阿里云移动端播放器高级功能介绍
  • 翻译 | The Principles of OOD 面向对象设计原则
  • ​软考-高级-系统架构设计师教程(清华第2版)【第1章-绪论-思维导图】​
  • ​软考-高级-信息系统项目管理师教程 第四版【第19章-配置与变更管理-思维导图】​
  • #if和#ifdef区别
  • #include到底该写在哪
  • #我与Java虚拟机的故事#连载18:JAVA成长之路
  • (9)YOLO-Pose:使用对象关键点相似性损失增强多人姿态估计的增强版YOLO
  • (C语言)输入一个序列,判断是否为奇偶交叉数
  • (k8s中)docker netty OOM问题记录
  • (MIT博士)林达华老师-概率模型与计算机视觉”
  • (第9篇)大数据的的超级应用——数据挖掘-推荐系统
  • (二)学习JVM —— 垃圾回收机制
  • (理论篇)httpmoudle和httphandler一览
  • (牛客腾讯思维编程题)编码编码分组打印下标(java 版本+ C版本)
  • (十七)devops持续集成开发——使用jenkins流水线pipeline方式发布一个微服务项目
  • (未解决)macOS matplotlib 中文是方框
  • (五)MySQL的备份及恢复
  • .bat批处理(六):替换字符串中匹配的子串
  • .NET Core、DNX、DNU、DNVM、MVC6学习资料
  • .net websocket 获取http登录的用户_如何解密浏览器的登录密码?获取浏览器内用户信息?...
  • .NET 设计模式—简单工厂(Simple Factory Pattern)