阿振sc

Results 101 issues of 阿振sc

# 解决 css in js 中遇到的找不到 css 类型的问题 当我们使用 `create-react-app` 创建项目时,脚手架默认使用 `css` 的方式是直接导入 `css` 文件,像这样: ```js import "./App.css"; ``` 当我们需要使用 css in js 的时候,会报错: ![](../images/202105091419.png) 根据提示,我们需要使用 `*.d.ts` 的文件来声明其文件类型,文件名任意,我们在根目录下创建 `typing.d.ts` 文件,并写入声明...

## 将字符串写入文件 最常见的写文件就是将字符串写入文件。这个写起来非常的简单。这个包含以下几个阶段。 - 创建文件 - 将字符串写入文件 我们将得到如下代码。 ```go package main import ( "fmt" "os" ) func main() { f, err := os.Create("test.txt") if err != nil { fmt.Println(err) return...

文件读取是所有编程语言中最常见的操作之一。本教程我们会学习如何使用 `Go` 读取文件。 本教程分为如下小节。 - 将整个文件读取到内存 - 使用绝对文件路径 - 使用命令行标记来传递文件路径 - 将文件绑定在二进制文件中 - 分块读取文件 - 逐行读取文件 ## 将整个文件读取到内存 将整个文件读取到内存是最基本的文件操作之一。这需要使用 `ioutil` 包中的 `ReadFile` 函数。 让我们在 `Go` 程序所在的目录中,读取一个文件。我已经在 `GOPATH` 中创建了文件夹,在该文件夹内部,有一个文本文件 `test.txt`,我们会使用 `Go`...

反射是 `Go` 语言的高级主题之一。我会尽可能让它变得简单易懂。 本教程分为如下小节。 - 什么是反射? - 为何需要检查变量,确定变量的类型? - reflect 包 - reflect.Type 和 reflect.Value - reflect.Kind - NumField() 和 Field() 方法 - Int() 和 String() 方法 - 完整的程序 -...

## 什么是头等函数? 支持头等函数(`First Class Function`)的编程语言,可以把函数赋值给变量,也可以把函数作为其它函数的参数或者返回值。`Go` 语言支持头等函数的机制。 ## 匿名函数 我们来编写一个简单的示例,把函数赋值给一个变量。 ```go package main import ( "fmt" ) func main() { a := func() { fmt.Println("hello world first class function") } a()...

## 什么是 panic? 在 `Go` 语言中,程序中一般是使用错误来处理异常情况。对于程序中出现的大部分异常情况,错误就已经够用了。 但在有些情况,当程序发生异常时,无法继续运行。在这种情况下,我们会使用 `panic` 来终止程序。当函数发生 `panic` 时,它会终止运行,在执行完所有的延迟函数后,程序控制返回到该函数的调用方。这样的过程会一直持续下去,直到当前协程的所有函数都返回退出,然后程序会打印出 `panic` 信息,接着打印出堆栈跟踪(`Stack Trace`),最后程序终止。在编写一个示例程序后,我们就能很好地理解这个概念了。 在本教程里,我们还会接着讨论,当程序发生 `panic` 时,使用 `recover` 可以重新获得对该程序的控制。 可以认为 `panic` 和 `recover` 与其他语言中的 `try-catch-finally` 语句类似,只不过一般我们很少使用 `panic` 和 `recover`。而当我们使用了 `panic`...

前面我们学习了 `Go` 中的错误是如何表示的,并学习了如何处理标准库里的错误。我们还学习了从标准库的错误中提取更多的信息。 在本教程中,我们会学习如何创建我们自己的自定义错误,并在我们创建的函数和包中使用它。我们会使用与标准库中相同的技术,来提供自定义错误的更多细节信息。 ## 使用 New 函数创建自定义错误 创建自定义错误最简单的方法是使用 `errors` 包中的 `New` 函数。 在使用 `New` 函数创建自定义错误之前,我们先来看看 `New` 是如何实现的。如下所示,是 `errors` 包中的 `New` 函数的实现。 ```go // Package errors implements functions to manipulate...

# Go 经典入门 29:错误处理 ## 什么是错误? 错误表示程序中出现了异常情况。比如当我们试图打开一个文件时,文件系统里却并没有这个文件。这就是异常情况,它用一个错误来表示。 在 `Go` 中,错误一直是很常见的。错误用内建的 `error` 类型来表示。 就像其他的内建类型(如 `int`、`float64` 等),错误值可以存储在变量里、作为函数的返回值等等。 ## 示例 现在我们开始编写一个示例,该程序试图打开一个并不存在的文件。 ```go package main import ( "fmt" "os" ) func main() { f,...

# Go经典入门28:Defer ## 什么是 defer? `defer` 语句的用途是:含有 `defer` 语句的函数,会在该函数将要返回之前,调用另一个函数。这个定义可能看起来很复杂,我们通过一个示例就很容易明白了。 示例 ```go package main import ( "fmt" ) func finished() { fmt.Println("Finished finding largest") } func largest(nums []int) { defer finished()...

# Go经典入门27:多态 `Go` 通过接口来实现多态。我们已经讨论过,在 `Go` 语言中,我们是隐式地实现接口。一个类型如果定义了接口所声明的全部方法,那它就实现了该接口。现在我们来看看,利用接口,`Go` 是如何实现多态的。 ## 使用接口实现多态 一个类型如果定义了接口的所有方法,那它就隐式地实现了该接口。 所有实现了接口的类型,都可以把它的值保存在一个接口类型的变量中。在 `Go` 中,我们使用接口的这种特性来实现多态。 通过一个程序我们来理解 `Go` 语言的多态,它会计算一个组织机构的净收益。为了简单起见,我们假设这个虚构的组织所获得的收入来源于两个项目:`fixed billing` 和 `time and material`。该组织的净收益等于这两个项目的收入总和。同样为了简单起见,我们假设货币单位是美元,而无需处理美分。因此货币只需简单地用 `int` 来表示。 我们首先定义一个接口 `Income`。 ```go type Income interface {...