跟着代码学go 002 -- 控制流

控制流 上一篇我们了解了golang 的变量、函数和基本类型,这一篇将介绍一下控制流 现在我们看一个复杂点的例子: HUGOMORE42 fibonacci(递归版) 01 package main 02 03 import "fmt" 04 05 func main() { 06 result := 0 07 for i := 0; i <= 10; i++ { 08 result = fibonacci(i) 09 fmt.Printf("fibonacci(%d) is: %d\n", i, result) 10 } 11 } 12 13 func fibonacci(n int) (res int) { 14 if n <= 1 { 15 res = 1 16 } else { 17 res = fibonacci(n-1) + fibonacci(n-2) 18 } 19 return 20 } // outputs fibonacci(0) is: 1 fibonacci(1) is: 1 fibonacci(2) is: 2 fibonacci(3) is: 3 fibonacci(4) is: 5 fibonacci(5) is: 8 fibonacci(6) is: 13 fibonacci(7) is: 21 fibonacci(8) is: 34 fibonacci(9) is: 55 fibonacci(10) is: 89 for i := 0; i <= 10; i++ {} 第7行是一个循环结构 这里for 循环是一个控制流 控制流 For Go 只有一种循环接口– for 循环 ...

2016-04-26 · 4 min · 836 words

跟着代码学go 001 -- 变量&函数

变量&函数 最近在学习golang,写下学习笔记提升记忆。 为了看起来不是那么枯燥,本学习笔记采用分析代码的形式。 首先搬出我们最经典的第一段代码: HUGOMORE42 hello world package main // 0 import "fmt" // 1实现格式化的 I/O /* Print something */ // 2 func main() { // 3 fmt.Println("Hello, world; or καλημε ́ρα κóσμε; orこんにちは 世界") // 4 } 首先我们要认识到 每个Go 程序都是由包组成,程序的运行入口是包main 首行这个是必须的。所有的 Go 文件以 package 开头,对于独立运行的执行文件必须是 package main; 这是说需要将fmt加入到main。不是main 的包被称为库 末尾以 // 开头的内容是单行注释 Package fmt包含有格式化I/O函数,类似于C语言的printf和scanf 这也是注释,表示多行注释。 package main 必须首先出现,紧跟着是 import。在 Go 中,package 总是首先出现, 然后是 import,然后是其他所有内容。当 Go 程序在执行的时候,首先调用的函数 是 main.main(),这是从 C 中继承而来。这里定义了这个函数 调用了来自于 fmt 包的函数打印字符串到屏幕。字符串由 " 包裹,并且可以包含非 ASCII 的字符。这里使用了希腊文和日文、中文" 编译和运行代码 构建 Go 程序的最佳途径是使用 go 工具。 构建 helloworld 只需要: ...

2016-04-25 · 5 min · 922 words

golang 介绍

1. Golang 是什么 Go 官方说明: Go 编程语言是一个使得程序员更加有效率的开源项目。Go 是有表达力、简 洁、清晰和有效率的。它的并行机制使其很容易编写多核和网络应用,而新的类型系统允许构建有 性的模块化程序。Go 编译到机器码非常快 速,同时具有便利的垃圾回收和强大的运行时反射。它是快速的、静态类 型编译语言,但是感觉上是动态类型的,解释型语言 HUGOMORE42 2. 为什么要开发这个语言 Go 语言的发展目标 Go 语言的主要目标是将静态语言的安全性和高效性与动态语言的易开发性进行有机结合 Go 语言是一门类型安全和内存安全的编程语言。虽然 Go 语言中仍有指针的存在,但并不允许进行指针运算。 Go 语言的另一个目标是对于网络通信、并发和并行编程的极佳支持,从而更好地利用大量的分布式和多核的计算机 Go 语言中另一个非常重要的特性就是它的构建速度(编译和链接到机器代码的速度),一般情况下构建一个程序的时间只需要数百毫秒到几秒。 Go 语言实现高效快速的垃圾回收(使用了一个简单的标记-清除算法)。 3. 有什么特性&&用途 语言的特性 清晰并且简洁 Go 努力保持小并且优美,你可以在短短几行代码里做许多事情; 并行 Go 语言从本质上(程序和结构方面)来实现并发编程。 Go 让函数很容易成为非常轻量的线程。这些线程在 Go 中被叫做 goroutines Channel 这些 goroutines 之间的通讯由 channel[18, 25] 完成 快速 编译很快,执行也很快。目标是跟 C 一样快。编译时间用秒计算; Go 的可执行文件都比相对应的源代码文件要大很多,这恰恰说明了 Go 的 runtime 嵌入到了每一个可执行文件当中。当然,在部署到数量巨大的集群时,较大的文件体积也是比较头疼的问题。但总得来说,Go 的部署工作还是要比 Java 和 Python 轻松得多。因为 Go 不需要依赖任何其它文件,它只需要一个单独的静态文件,这样你也不会像使用其它语言一样在各种不同版本的依赖文件之间混淆。 安全 当转换一个类型到另一个类型的时候需要显式的转换并遵循严格的规则。Go 有 垃圾收集(使用了一个简单的标记-清除算法),在 Go 中无须 free(),语言会处理这一切; 值得注意的是,因为垃圾回收和自动内存分配的原因,Go 语言不适合用来开发对实时性要求很高的软件。 ...

2016-04-14 · 2 min · 271 words

hugo 使用

Hello Hugo Hugo 常用命令 基本配置 hugo 常用命令 hugo help hugo version hugo new site sitename # 新建一个站点 hugo new post/good-to-great.md # 添加到content/post 目录 hugo server # 启动server hugo server --buildDrafts # 预览草稿 hugo undraft content/post/good-to-great.md # 发布一篇文章 hugo server --theme=hugo_zen # 以zen 主题启动server hugo --theme=hugo_zen 以zen # 主题生成草稿 语法高亮 Syntax Highlighting # print hello world print "hello world" Front Matter Example (in TOML) [front-matter] (https://gohugo.io/content/front-matter/) +++ title = "Hugo: A fast and flexible static site generator" description = "Hugo: A fast and flexible static site generator" tags = [ "Development", "Go", "fast", "Blogging" ] categories = [ "Development" ] date = "2012-04-06" series = [ "Go Web Dev" ] slug = "hugo-可以替代url" project_url = "https://github.com/spf13/hugo" +++ Markdown 语法说明 [Markdown 语法说明 (简体中文版)] (http://wowubuntu.com/markdown/) ...

2016-04-11 · 1 min · 140 words