Go指南练习3-映射Map

这个是A Tour of Go这个教程里面的第三个练习,原题如下:

实现 WordCount。它应当返回一个映射,其中包含字符串 s 中每个“单词”的个数。函数 wc.Test 会对此函数执行一系列测试用例,并输出成功还是失败。

你会发现 strings.Fields 很有帮助。

打开上面对应的链接,可以看到strings.Fields的作用是将一段话中的单词提取出来,并返回一个切片[]string。我们只需要用循环统计一下这个切片里面单词出现的次数就好了。实现如下:

package main

import (
	"golang.org/x/tour/wc"
	"strings"
)

func WordCount(s string) map[string]int {
	m := make(map[string]int)
	
	for _, w := range strings.Fields(s)
Tags:

Go指南练习2-切片

这个是A Tour of Go这个教程里面的第二个练习,原题如下:

实现 Pic。它应当返回一个长度为 dy 的切片,其中每个元素是一个长度为 dx,元素类型为 uint8 的切片。当你运行此程序时,它会将每个整数解释为灰度值(好吧,其实是蓝度值)并显示它所对应的图像。

图像的选择由你来定。几个有趣的函数包括 (x+y)/2x*yx^yx*log(y) 和 x%(y+1)

(提示:需要使用循环来分配 [][]uint8 中的每个 []uint8;请使用 uint8(intValue) 在类型之间转换;你可能会用到 math 包中的函数。)

这个题比较简单,就是要利用循环,创建一个二维切片(数组),然后给每个元素赋一个值,这个值可以根据二维数组的坐标xy来计算,题目中提供了几个函数。我们用…

Tags:

Go指南练习1-循环与函数

A Tour of Go这个教程(中文版)真是做的太好了,学习和练习Go的基础还是很不错的。把上面的练习都做了,来做个记录。这个练习是控制与循环里面的,原题如下:

为了练习函数与循环,我们来实现一个平方根函数:用牛顿法实现平方根函数。

计算机通常使用循环来计算 x 的平方根。从某个猜测的值 z 开始,我们可以根据 z² 与 x 的近似度来调整 z,产生一个更好的猜测:

z -= (z*z - x) / (2*z)

重复调整的过程,猜测的结果会越来越精确,得到的答案也会尽可能接近实际的平方根。

在提供的 func Sqrt 中实现它。无论输入是什么,对 z 的一个恰当的猜测为 1。 要开始,请重复计算 10 次并随之打印每次的 z 值。观察对于不同的值 x(1、2、3 …), 你得到的答案是如何逼近结果的,猜测提升的速度有多快。

提示:用类型转换或浮点数语法来声明并初始化一个浮点数值:

z := 1.0
z := float64(1)

然后,修改循环条件,使得当值停止改变(或改变非常小)的时候退出循环。观察迭代次数大于还是小于

Tags:

看到一个刁钻问题: (a==1 && a==2 && a==3) 可以为true吗?

一看到这个刁钻问题,我竟然有点懵: (a==1 && a==2 && a==3) 是否可以为true?既然能提出这个问题,说明那肯定是可以为true的,那么怎么样实现呢?

在js里面,比较运算符对于不同类型的值会做类型转换,所以这里应该有可以操作的可能。我们先看一下非严格相等在js里面的类型转换关系:

被比较值 B
Undefined Null Number String Boolean Object
被比较值 A Undefined true true false false false IsFalsy(B)
Null true true false false false IsFalsy(B)
Number false false A === B A === ToNumber(B) A=== ToNumber(B) A== ToPrimitive(B)
String false false ToNumber(A) === B A ===

心血来潮,重整blog

最近又突然心血来潮,重新整理了一下blog,从主题到插件,折腾了一番。勉强把pagespeed的性能测试分数拉到了100分。

先是在vps上安装了个redis服务,然后测试了一堆缓存及优化插件,最终选择了Redis Object CacheWP-Optimize这两个插件。开启缓存并合并了主题里面的css和js文件,去掉了所有的外部链接,速度确实比之前提升了不少。

至少下图里面的数据看起来还不错了,无障碍的问题就先这样吧,对视力不太好的用户不太友好-_-

Page Speed Test Result

为什么parseInt(0.0000007)结果为7?

一个看似奇怪的问题,正常我们预期这个结果应该是0才对,结果却是7,令人意外。参考ECMAScript标准里面的描述

The parseInt function produces an integral Number dictated by interpretation of the contents of the string argument according to the specified radix. Leading white space in string is ignored. If radix is undefined or 0, it is assumed to be 10 except when the number begins with the code unit pairs 0x or 0X, in which case a radix of 16 is assumed. If radix is 16, the number may also optionally begin with

[翻译]为什么我们放弃了使用CSS-in-JS

我是Sam,Spot的一位软件工程师,也是Emotion库第二活跃的维护者。Emotion是一个在React项目中被广泛使用的CSS-in-JS库。这篇文章将深入探究最初吸引我使用CSS-in-JS的原因,以及为什么我(及Spot团队的其他成员)又决定放弃它。

我们将从CSS-in-JS的概述开始,并简要介绍一下它的优缺点。然后,我们再深入探究在CSS-in-JS在Spot上引发的性能问题,以及如何避免它。

什么是CSS-in-JS?

顾名思义,CSS-in-JS允许你直接在JavaScript或TypeScript中写入CSS来设置你的React组件样式:

// @emotion/react (css prop), with object styles
function ErrorMessage({ children }) {
  return (
    <div
      css={{
        color: 'red',
        fontWeight: 'bold',

Electron打包React应用空白的问题

Electron的真的是够折腾的,用React写个APP,dev的时候看起来挺正常的,打包出来一片空白。

打开调试工具看了一下,发现是加载不到页面。于是把asar包拖出来解压看了一下,发现页面加载路径似乎不太对,在main.js里面调整一下:

mainWindow.loadURL(isDev ? 'http://localhost:3000' : `file://${__dirname}/../build/index.html`);

顺便调整一下打包目录,目前Electron Forge是把整个项目目录都打包进去了,在forge.config.js里面:

packagerConfig: {
  ...
  "dir": "./build",
  ...
},

好了,页面倒是可以加载出来了,发现js路径不对,遗漏了一个很重要的地方。React默认使用了绝对路径,所有的引用都是相对于根目录的,所以还要改下package.json里面的配置,在根下指定:…

Electron在macOS上打包windows exe文件

试着玩一下Electron,在macOS 12/13上打包exe文件时,踩了好几个坑,做个记录。

打包工具使用的是Electron快速入门教程里面推荐的 Electron Forge,在macOS上打包exe文件,需要依赖几个工具:wine、mono、xquartz,分别安装。然后执行打包命令,发现会卡在这个地方:

We need to package your application before we can make it
√ Preparing to Package Application for arch: x64
√ Compiling Application
√ Preparing native dependencies
√ Packaging Application
Making for the following targets:
× Making for target: squirrel - On platform: win32 - For arch: x64

日趋严厉的境内互联网

国内两大云产商阿里云和腾讯云在这个十月份都在大促,我终究是没有忍住腾讯云低价的诱惑,分别买了一个位于上海的轻量应用服务器,以及一个位于香港的 CVM;并于今日把 blog 从美国的 VPS 迁移到了刚买的位于香港的腾讯云 CVM。这对于我来说是件挺高兴的事情,因为国内访问快了非常多。

我的 blog 独立建站始于 2005 年,也正是那年刚刚开始实施《非经营性互联网信息服务备案管理办法》。起初是找了个 PC 当服务器,只要能联网有固定IP就能当服务器。后来开始用一些免费的空间,再后来到付费虚拟主机,当然这个时候就需要备案了,不过这时备案倒也简单,有个身份信息就能办下来。那个时候还是太天真,以为备案了就是合法网站了,就可以自由敲打键盘了。殊不知,逢大会居然会莫名断网,无通知无解释。你还会在什么也不知道的情况下受到 ISP 先关站后通知删帖的待遇,即使你只是提到了某个敏感词。可以想象,你以为有了合法的身份就可以收到保护,而实际上你提供了所有的真实信息和联系方式,你再想想这是保护吗?享受了几年非常待遇之后,终于加入迁站大军,迁往了大洋彼岸,再也不用备案了。…