
Go语言
文章平均质量分 90
魔芋红茶
这个作者很懒,什么都没留下…
展开
-
《Go Web 编程》书评
《Go Web 编程》书评本书的豆瓣连接:Go Web 编程 (豆瓣) (douban.com)先说整体观感,总的来说这是本不错的书,在短短200多页的内容里,塞下了Web开发的主要内容,包含HTTP报文、路由、数据库连接、Json和XML,甚至还包含了软件测试和应用部署。当然,因为国内环境的问题,最后一章的部署比较鸡肋,没有什么参考价值。这本书的优点在于全面,基本上将Web开放的方方面面都介绍了,缺点在于太过浅显,很多部分都是稍稍提点。但对于这本书的受众而言这或许是优点,一本太过厚重深入的书原创 2022-01-06 11:56:33 · 195 阅读 · 0 评论 -
Go语言编程笔记18:软件测试
Go语言编程笔记18:软件测试图源:wallpapercave.com软件测试也是软件开发的重要组成部分,本篇文章将探讨如何使用Go的标准库和第三方库对程序进行测试。testingGo的标准库提供一个简单的包testing用于构建测试用例,这里来看一个简单的程序:package mainimport "fmt"func Add(a int, b int) int { return a + b}func main() { fmt.Printf("%d+%d=%d\n", 1, 2原创 2022-01-02 19:50:26 · 577 阅读 · 0 评论 -
Go语言编程笔记17:Web Service
Go语言编程笔记17:Web Service图源:wallpapercave.com通过一系列文章,我介绍了如何用Go语言构建一个Web应用,准确的说是一个网站。事实上并非所有的Web应用都是以网站的形式存在,其中相当一部分是Web Service,相比前者,后者的应用范围更广泛,它的前端可能是纯Js编写的网站前端,也可能是移动APP,甚至是另一个Web应用。所以这篇文章将介绍如何构建一个Web Service。这里的Web Service概念和Apache之类的有所不同,它指那些通过API方式原创 2022-01-01 16:46:05 · 2126 阅读 · 0 评论 -
Go语言编程笔记16:存储数据
Go语言编程笔记16:存储数据图源:wallpapercave.com几乎任何程序都绕不开读写数据,只不过具体的数据存储介质和方式有所不同。本篇文章将从多种数据存储方式进行探讨各种存储方式如何实现以及优劣。内存最简单也是最容易想到的方式大概就是用内存存储数据,事实上这也是大多数初学者不经意间最先学到的。乍一听用内存存储数据显得很高级,其实所有程序运行时申请的变量都是在使用内存来存储数据。不过作为Web应用,使用内存存储数据必须考虑并发,所以应当使用通道或者互斥锁来实现并发的数据读写。这里给出一原创 2021-12-30 16:23:54 · 858 阅读 · 0 评论 -
Go语言编程笔记15:模版引擎
Go语言编程笔记15:模版引擎图源:wallpapercave.com除去一些作为API使用或者其他特殊用途的Web应用,大多数Web应用都是以网站的形式对外提供服务,所以自然的,返回的HTTP响应内容也都是以HTML页面为主。在[Go语言编程笔记12:web基础](Go语言编程笔记12:web基础 - 魔芋红茶’s blog (icexmoon.xyz))中我提到过,在Web技术发展的过程中,因为对交互的需要,Web诞生了一种SSI技术,即在服务端通过编程语言来“动态”生成HTML页面并返回给客户端原创 2021-12-27 17:46:51 · 1047 阅读 · 0 评论 -
Go语言编程笔记14:处理请求
Go语言编程笔记14:处理请求图源:wallpapercave.com上一篇Go语言编程笔记13:处理器中我们讨论了如何创建一个Web应用并接收请求,本篇文章探讨如何来处理请求。Request在Go语言编程笔记12:web基础中我们说过了,一个HTTP请求实际上就是一个HTTP请求报文,内容主要由首行、报文头、空行、报文体四个部分组成。在http库中,请求报文被抽象为http.Request这个结构体:type Request struct { Method string URL *url原创 2021-12-25 15:17:54 · 584 阅读 · 0 评论 -
Go语言编程笔记13:处理器
Go语言编程笔记13:处理器图源:wallpapercave.com一个完整的Web应用,其功能可以主要划分为:接收请求、处理请求、生成返回数据、返回数据这几个部分。今天来讨论如何使用Go的标准库http来接收http请求。处理器和Server如在上一篇笔记Go语言编程笔记12:web基础中展示的那样,一个最简单的Go编写的Web应用可能是这样的:package mainimport "net/http"func main() { http.ListenAndServe(":8080"原创 2021-12-22 16:13:07 · 393 阅读 · 0 评论 -
Go语言编程笔记12:web基础
Go语言编程笔记12:web基础图源:wallpapercave.com开一个新坑,用Go来做web开发。虽然已经从事多年基于LAMP的web开发,但最近学习了Go编程,所以打算借着学习《Go Web 编程》一书的同时撰写笔记,算是对web开发的复习和回顾。《Go Web 编程》作者为新加坡人,从事编程相关教学工作,此书主要内容为使用Go的标准库实现一个web应用,并借此阐述HTTP和web开发的相关理念和技能。本篇笔记的大纲是我用幕布编写的思维导图,可以在这里查看。Go开发web的优势虽原创 2021-12-18 18:12:15 · 820 阅读 · 0 评论 -
Go语言编程笔记11:使用包组织代码
Go语言编程笔记11:使用包组织代码图源:wallpapercave.comGo语言的代码是以包的形式组织的,本篇笔记将阐述包相关的一些内容。基本概念创建环境变量Go有两个和包相关的系统环境变量:GOROOT和GOPATH。前者是Go语言本身的安装目录,后者是用户的“Work Space”,也就是一般的编写代码的目录。这两个目录都主要由以下三个字目录构成:bin:二进制可执行文件。pkg:编译后的包组件。src:源码。对于GOROOT的目录来说,子目录所对应的内容都是Go语言本身原创 2021-11-28 14:22:26 · 253 阅读 · 0 评论 -
Go语言编程笔记10:使用共享变量实现并发(续)
Go语言编程笔记10:使用共享变量实现并发(续)图源:wallpapercave.com本篇笔记是Go语言编程笔记9:使用共享变量实现并发的补充,将以一个《Go程序设计语言》中列举的一个函数缓存示例为基础进一步阐述如何使用并发来解决实际问题,以及说明goroutine和操作系统线程的区别。函数缓存所谓的函数缓存,就是对某些极其耗费时间或计算资源的函数调用进行缓存,如果系统中需要再次进行相同调用,直接返回缓存的结果,以达到节省时间或者计算资源的目的。以下的代码为参考《Go程序设计语言》中的示例后编原创 2021-11-26 17:17:05 · 472 阅读 · 0 评论 -
Go语言编程笔记9:使用共享变量实现并发
Go语言编程笔记9:使用共享变量实现并发图源:wallpapercave.com数据竞态在多线程编程中,遇到的最大麻烦就是当多个线程对同一个数据进行操作时,因为代码交错执行引发的一些问题:package mainimport ( "fmt" "sync")type bank struct { amount int}func (b *bank) SaveMoney(amount int) { b.amount += amount}func (b *bank) GetAm原创 2021-11-25 20:55:01 · 1214 阅读 · 0 评论 -
Go语言编程笔记8:goroutine续
Go语言编程笔记8:goroutine续图源:wallpapercave.com本篇笔记会讲解Go语言编程笔记7:goroutine和通道中剩余的内容。文件统计程序Linux上有一个程序du,可以很方便地计算指定目录的真实大小,《Go程序设计语言》一书中也有一个类似的示例:package mainimport ( "flag" "fmt" "io/ioutil" "log" "path" "time")var paramHuman = flag.Bool("h", fals原创 2021-11-24 17:26:40 · 314 阅读 · 0 评论 -
Go语言编程笔记7:goroutine和通道
Go语言编程笔记7:goroutine和通道图源:wallpapercave.comgoroutinePython中并发的核心概念是协程,Go语言中类似的概念叫做goroutine。虽然两者在原理和使用方式等方面都有很大不同,但都是用于解决并发问题的核心概念。协程(coroutine)与goroutine从名称上看就很相似。我们知道,Python因为有全局线程锁的缘故,除了发生I/O的部分以外,大部分使用协程实现并发的时候实际上都是单线程在执行,事实上并不能挖掘多线程的全部性能,对于I/O密原创 2021-11-23 20:56:30 · 650 阅读 · 0 评论 -
Go语言编程笔记6:接口
Go语言编程笔记6:接口图源:wallpapercave.com虽然Go语言没有传统编程语言的类与继承,但通过结构、方法和接口,Go语言依然可以实现OOP式的编程。所以接口对于Go语言来说相当重要,这里我们就讨论一下Go语言中的接口。概念在介绍Go语言中的接口之前我要先阐述一下其概念的不同,与传统的编程语言比,Go语言的接口是一种隐性实现。即接口只会定义一组方法,所有实现了该方法的类型都满足该接口。在概念上,这与Python中的协议更类似,不过后者并不会真实定义在代码中,仅仅是文档中的一种约定。原创 2021-11-21 20:26:57 · 369 阅读 · 0 评论 -
Go语言编程笔记5:函数
Go语言编程笔记5:函数图源:wallpapercave.com虽然整体上Go语言的函数和其它语言颇为相似,但实际上有很多其它语言中鲜见的特性,在这篇笔记中我会一一进行介绍。定义Go语言中的函数定义与传统语言类似,其函数签名同样由函数名、参数列表、返回值构成,只不过写法稍有区别:package mainimport "fmt"func myFunc(message string) bool { fmt.Println(message) // hello return true}原创 2021-11-17 19:37:50 · 358 阅读 · 0 评论 -
Go语言编程笔记4:结构体和切片
Go语言编程笔记4:结构体和切片图源:wallpapercave.com结构体Go语言最主要使用的复合结构是结构体,我记得C和C++也是有结构体的,不过在C++中并不常用。事实上从语言继承的关系来说,Go语言与C语言是一脉相承的,所以又被称为类C语言。定义定义一个结构体就像是定义一个新的类型,只不过结构体一般会在结构体内部定义一些额外字段:package maintype Pointer struct { x int y int}这里需要注意的是,虽然Go语言里的结构体可以类比为原创 2021-11-08 21:06:16 · 3264 阅读 · 1 评论 -
Go语言编程笔记番外1:猜数游戏
Go语言编程笔记番外1:猜数游戏图源:wallpapercave.com这是一个常见的用于练习编程基础的一个小游戏:生成一个100以内的随机数,用户在一定的次数内猜测数字是多少,每次提示猜测结果是高了还是低了,直到最终猜到结果获胜或者失败。本篇笔记的思路和动机都来自《Head First Go》。package mainimport ( "bufio" "fmt" "log" "math/rand" "os" "strconv" "strings" "time")va原创 2021-11-08 15:39:04 · 169 阅读 · 0 评论 -
Go语言编程笔记3:控制流
Go语言编程笔记3:控制流图源:2zyyyyy.github.io一般来说,不同的编程语言之间控制流语句的差别应该是很小的,但Go语言的控制流语句有很多不同之处,值得单独进行讨论。if除了和其它语言类似的写法以外,Go语言可以在if语句的条件中添加赋值语句:package mainimport "fmt"func main() { if a := 6; a < 10 { fmt.Println("a<10") }}当然上边这段示例的写法是没必要的,更常见的是通过原创 2021-11-07 16:50:05 · 163 阅读 · 0 评论 -
Go语言编程笔记2:基础
Go语言编程笔记2:基础图源:php.cn语言风格Go语言是从C语言衍生而来,所以语言风格上是和C语言很相似的,不同的是Go在语言格式化上做的相当激进。最显著的是在缩进和换行上,Go语言都有严格要求。此外在变量使用和包导入上,同样非常严格。在Python中,如果引用了没有使用的包或者是有变量没有使用,是不会影响到程序的执行的,比如:from typing import NamedTuplemessage = 'How are you!'print('hello world')# he原创 2021-11-06 19:43:11 · 204 阅读 · 0 评论 -
Go Gin 快速上手指南
Go Gin 快速上手指南图源:Golang Gin-GithubGin是Go语言的一个Web框架,可以用于开发Web程序或者Web API。使用Gin的前提当然是要安装Go语言本体,并进行相关设置,这方面内容可以阅读Go语言编程笔记1:Hello World。下载Gin框架本体很简单:go get -u -v github.com/gin-gonic/gin但该应用会引用一些官方组件,所以在下载过程中会尝试下载其它引用的官方组件,而这可能因为Go的官方网站不能访问而失败,解决的方法有两种:原创 2021-11-04 18:07:47 · 1481 阅读 · 2 评论 -
Go语言编程笔记4:数组、切片和映射
Go语言编程笔记4:数组、切片和映射数组Go语言中的数组与C或C++中的几乎没有区别——固定大小且无法进行扩容:package mainimport "fmt"func main() { numbers := [10]int{} for i := 0; i < 10; i++ { numbers[i] = i + 1 } fmt.Println(numbers)}// [1 2 3 4 5 6 7 8 9 10]除此之外还可以在声明的同时初始化:package原创 2021-10-30 17:56:08 · 234 阅读 · 0 评论 -
Go语言编程笔记3:结构体
Go语言编程笔记3:结构体Go语言的另一大特色是没有类,因此也不会有继承或者多态之类的面向对象特性。这倒是让我相当诧异,因为我接触过的几乎所有的编程语言,如C++\Java\PHP\Python等都是支持面向对象的,一门09年诞生的语言却不支持面向对象,的确相当奇怪。当然Go语言中并不是没有类似的东西——结构体,只不过在使用上和类有一些差别。声明和初始化结构体的声明和初始化并不难:package mainimport "fmt"type Student struct { name st原创 2021-10-30 16:29:18 · 168 阅读 · 0 评论 -
Go语言编程笔记2:基础
Go语言编程笔记2:基础图源:php.cn语言风格Go语言是从C语言衍生而来,所以语言风格上是和C语言很相似的,不同的是Go在语言格式化上做的相当激进。最显著的是在缩进和换行上,Go语言都有严格要求。此外在变量使用和包导入上,同样非常严格。在Python中,如果引用了没有使用的包或者是有变量没有使用,是不会影响到程序的执行的,比如:from typing import NamedTuplemessage = 'How are you!'print('hello world')# he原创 2021-10-29 17:33:45 · 295 阅读 · 0 评论 -
Go语言编程笔记1:Hello World
Go语言编程笔记1:Hello World图源:golang.google.cn环境安装Go语言的官网是https://golang.org/,遗憾的是因为某些不可抗力,是没法正常访问的。幸运的是Google提供了一个大陆地区特供版官网,提供一些下载等基本功能,其地址是https://golang.google.cn/dl/。这里选择对应的版本即可。具体的安装过程没啥可说的,相当的朴实无华,连个选项都没有,我几乎没有见过类似的程序语言环境安装包。安装完后同样需要将安装目录加入环境变量Path原创 2021-10-28 16:45:59 · 1163 阅读 · 0 评论