golang编程语言,是google推出的一门语言. 主要应用在系统编程和高性能服务器编程,有广大的市场前景,目前整个生态也越来越强大,未来可能在企业应用和人工智能等领域占有越来越重要的地位. 本文章是[易学易懂系列|编程语言入门]第一篇幅,希望可以帮助对编程感兴趣的同学更好地入门. 本系列主要的核心思想是:实践实践再实践!每天编程至少一小时! 好吧,我们开始吧!let's Go! 安装 Golang 支持三个平台:Mac,Windows 和 Linux(译注:不只是这三个,也支持其他主流平台)…
今天开始,我们来写代码. 学习一门语言,最快的方式就是写代码,做项目. 别的学习教程,都是hello world. 我们就来点不一样的吧.我们不一样!不一样!不一样! 首先,打开VSCODE.( 关于VSCODE配置,见:https://www.jianshu.com/p/83beca927c9e,https://zhuanlan.zhihu.com/p/59879132) 写代码: package main var x, y int var (  // 这种因式分解关键字的写法一般用于声明全局…
接下来,我们主要讲讲package. 先列举下go的package的一些核心特性: 1.go的package不局限于一个文件,组成一个package的多个文件,编译后实际上和一个文件类似,组成包的不同文件相互之间可以直接引用变量和函数,不论是否导出:文件名可以和该包名不一致,但文件中使用的包名必须要和该包名一致 2.go不要求package的名称和所在目录名相同,但是你最好保持相同,否则容易引起歧义.因为引入包的时候,go会使用子目录名作为包的路径,而你在代码中真正使用时,却要使用你packag…
现在我们来写代码,首先我们要新建一个项目. 新建项目: 点击:File>>New>>Project...如下图: 在New Project窗口,Location:输入:“goPrject”,如下图: 这时我们在这个新项目里,新建一个go的文件,右击:"goProject">>New>>Go File,如下图: 在一个新窗口,输入go文件的文件名:hello,点击:“OK”如下图: 然后,我们来到一个新的窗口,在这里写入我们要写的代码,这里…
[易学易懂系列|rustlang语言|零基础|快速入门|(19)|多线程] 实用知识 多线程 我们今天来讲讲Rust中的多线程. 我直接来看看代码: use std::thread; use std::time::Duration; fn main() { thread::spawn(|| { for i in 1..10 { println!("hi number {} from the spawned thread!", i); thread::sleep(Duration::fr…
[易学易懂系列|rustlang语言|零基础|快速入门|(4)] Borrowing 继续讲讲另一个重要的概念:借用(borrowing), 什么是借用? 我们先来看前一文章([易学易懂系列|rustlang语言|零基础|快速入门|(3)])的代码 : let a = [1, 2, 3];​ let b = a;​ println!("{:?} {:?}", a, b); *// [1, 2, 3] [1, 2, 3]*​ let a = vec![1, 2, 3];​ let b =…
[易学易懂系列|rustlang语言|零基础|快速入门|(28)|实战5:实现BTC价格转换工具] 项目实战 实战5:实现BTC价格转换工具 今天我们来开发一个简单的BTC实时价格转换工具. 我们首先创建一个目录: cargo new btc_converter 我们用TDD方式来开发. 然后 我们先写一些测试代码. 在src/main.rs下面,增加代码如下: #[cfg(test)] mod tests { use super::*; #[test] fn test_convert_succ…
[易学易懂系列|rustlang语言|零基础|快速入门|(27)|实战4:从零实现BTC区块链] 项目实战 实战4:从零实现BTC区块链 我们今天来开发我们的BTC区块链系统. 简单来说,从数据结构的角度上来说,区块链,就是区块组成的链. 以下就是BTC区块链典型的结构: 那最小单元就是区块:block. 这个block包含两部分:区块头,区块体. 我们先忽略Merkle树,先简化所有数据结构,只保留最基本的数据结构. 那区块头,就包含:区块高度,时间截:前一个区块地址:工作证明; 区块体,就包…
[易学易懂系列|rustlang语言|零基础|快速入门|(26)|实战3:Http服务器(多线程版本)] 项目实战 实战3:Http服务器 我们今天来进一步开发我们的Http服务器,用多线程实现. 我们在原来工程h_server更新代码如下: src/main.rs: use h_server::*; use std::fs; use std::io::prelude::*; use std::net::TcpListener; use std::net::TcpStream; fn main(…
[易学易懂系列|rustlang语言|零基础|快速入门|(25)|实战2:命令行工具minigrep(2)] 项目实战 实战2:命令行工具minigrep 我们继续开发我们的minigrep. 我们现在以TDD测试驱动开发的模式,来开发新的功能search函数. 开始吧,我们先在src/lib.rs文件中,增加测试代码: #[cfg(test)] mod tests { use super::*; #[test] fn one_result() { let query = "duct"…