ソースを参照

学习笔记备份提交

master
SisMaker 4年前
コミット
f2ac42ee0b
4個のファイルの変更116行の追加2行の削除
  1. +1
    -1
      src/go.mod
  2. +23
    -0
      src/go101/go常量与变量.md
  3. +91
    -0
      src/go101/go程序源码基本元素.md
  4. +1
    -1
      src/learn/calcQ.go

+ 1
- 1
src/go.mod ファイルの表示

@ -1,6 +1,6 @@
module goUtils
go 1.12
go 1.14
require (
github.com/BurntSushi/toml v0.3.1 // indirect

+ 23
- 0
src/go101/go常量与变量.md ファイルの表示

@ -0,0 +1,23 @@
# 常量
基本类型的字面量表示(除了false和true 他们是预声明的有名常量) 都属于无名常量或者叫字面常量
在Go中有些值的类型是不确定的, 这些值称为不确定值,对于大多数不确定值来说, 他们各自有一个默认类型, 除了声明的nil, nil是没有默认的类型的
与不确定类型相对应的就是类型确定值
一个字面(常)量的默认类型取决于它的它为何种字面量形式:
一个字符串字面量的默认类型是预声明的 string 类型。
一个布尔字面量的默认类型是预声明的 bool 类型。
一个整数型字面量的默认类型是预声明的 int 类型。
一个rune字面量的默认类型是预声明的 rune (亦即 int32 )类型。
一个浮点数字面量的默认类型是预声明的 float64 类型。
如果一个字面量含有虚部字面量,则此字面量的默认类型是预声明的 complex128 类型。
## 类型转换
对于一个类型不确定常量值 v ,有两种情形显式转换 T(v) 是合法的:
1.v 可以表示为(第6章) T 类型的一个值。 转换结果为一个类型为 T 的类型确定常量值。
2.v 的默认类型是一个整数类型( int 或者 rune ) 并且 T 是一个字符串类型。 转换 T(v) 将 v 看作
是一个Unicode码点。 转换结果为一个类型为 T 的字符串常量。 此字符串常量只包含一个Unicode
码点,并且可以看作是此Unicode码点的UTF-8表示形式。 对于不在合法的Unicode码点取值范围
内的整数 v , 转换结果等同于字符串字面量 "\uFFFD" (亦即 "\xef\xbf\xbd" )。 0xFFFD 是
Unicode标准中的(非法码点的)替换字符值。 (但是请注意,今后的Go版本可能只允许rune或
者byte整数被转换为字符串 ? 。 从Go官方工具链1.15版本开始, go vet 命令会对从非rune和非
byte整数到字符串的转换做出警告。)

+ 91
- 0
src/go101/go程序源码基本元素.md ファイルの表示

@ -86,6 +86,97 @@
二进制形式(binary) 0b 0B 开头
## 浮点数类型值的字面量形式
一个浮点数的完整字面量形式包含一个十进制整数部分, 一个小数点 一个十进制小数部分和一个整数指数部分,部分可以省略
xEn 表示x乘以10的n次方 xE-n 表示x除以10的n次方
go也支持另外啊一种浮点数字面量形式 称为 十六进制浮点数文字表示 在一个十六进制浮点数文字表示中
1.和整数的十六进制文字表示一样,浮点数的十六进制文字表示也必须使用0x或0X开头
2.和整数的十六进制表示不同的是,字母p或者P必须出现在浮点数的十六进制表示中,其后跟随一个幂指数(底数为2)
浮点类型的零值标准字面量形式为0.0 当然其他的形式表示也是合法的 比如 0. .0 0e0 和 0x0p0
## 虚部字面形式
一个虚部值的字面量形式由一个浮点数字面量或者一个整数字面量和其后跟随一个小写的字母i组成
复数零值的标准字面表示为 0.0+0.0i 。 当然 0i 、 .0i 、 0+0i 等表示也是合法的。
数值字面表示中使用下划线分段来增强可读性
下划线 _ 可以出现在整数、浮点数和虚部数字面量中,以用做分段符以增强可读性。
但是要注意,在一个数值字面表示中,一个下划线 _ 不能出现在此字面表示的首尾,并且其两侧的字符
必须为(相应进制的)数字字符或者进制表示头。
## rune值的字面量形式
上面已经提到, rune 类型是 int32 类型的别名。 因此,rune类型(泛指)是特殊的整数类型。 一个
rune值可以用上面已经介绍的整数类型的字面量形式表示。 另一方面,很多各种整数类型的值也可以
用本小节介绍的rune字面量形式来表示。
在Go中,一个rune值表示一个Unicode码点。 一般说来,我们可以将一个Unicode码点看作是一个
Unicode字符。 但是,我们也应该知道,有些Unicode字符由多个Unicode码点组成。 每个英文或中文
Unicode字符值含有一个Unicode码点。
一个rune字面量由若干包在一对单引号中的字符组成。 包在单引号中的字符序列表示一个Unicode码点
值。 rune字面量形式有几个变种,其中最常用的一种变种是将一个rune值对应的Unicode字符直接包在
一对单引号中。比如:
'a' // 一个英文字符
'π'
'众' // 一个中文字符
下面这些rune字面量形式的变种和 'a' 是等价的 (字符 a 的Unicode值是97)。
'\141' // 141是97的八进制表示
'\x61' // 61是97的十六进制表示
'\u0061'
'\U00000061'
注意: \ 之后必须跟随三个八进制数字字符(0-7)表示一个byte值, \x 之后必须跟随两个十六进制数
字字符(0-9,a-f和A-F)表示一个byte值, \u 之后必须跟随四个十六进制数字字符表示一个rune值
(此rune值的高四位都为0), \U 之后必须跟随八个十六进制数字字符表示一个rune值。 这些八进制
和十六进制的数字字符序列表示的整数必须是一个合法的Unicode码点值,否则编译将失败。
事实上,在日常编程中,这四种rune字面量形式的变种很少用来表示rune值。 它们多用做字符串的双
引号字面量形式中的转义字符
如果一个rune字面量中被单引号包起来的部分含有两个字符, 并且第一个字符是 \ ,第二个字符不
是 x 、 u 和 U ,那么这两个字符将被转义为一个特殊字符。 目前支持的转义组合为:
\a (rune值:0x07) 铃声字符
\b (rune值:0x08) 退格字符(backspace)
\f (rune值:0x0C) 换页符(form feed)
\n (rune值:0x0A) 换行符(line feed or newline)
\r (rune值:0x0D) 回车符(carriage return)
\t (rune值:0x09) 水平制表符(horizontal tab)
\v (rune值:0x0b) 竖直制表符(vertical tab)
\\ (rune值:0x5c) 一个反斜杠(backslash)
\' (rune值:0x27) 一个单引号(single quote)
rune类型的零值常用 '\000' 、 '\x00' 或 '\u0000' 等来表示。
## 字符串的字面量形式
在Go中,字符串值是UTF-8编码,甚至所有的Go源码都必须是UTF-8编码
Go字符串字面量形式有两种, 一种是解释型字面表示 双引号格式 另外一种是直白字面表示 反引号格式
在上面的解释形式(双引号风格)的字符串字面量中,每个 \n 将被转义为一个换行符,每个 \" 将被转
义为一个双引号字符。 双引号风格的字符串字面量中支持的转义字符和rune字面量基本一致,除了一
个例外:双引号风格的字符串字面量中支持 \" 转义,但不支持 \' 转义;而rune字面量则刚好相反。
以 \ 、 \x 、 \u 和 \U 开头的rune字面量(不包括两个单引号)也可以出现在双引号风格的字符串字面量
直白反引号风格的字面表示中是不支持转义字符的。 除了首尾两个反引号,直白反引号风格的字面表
示中不能包含反引号。 为了跨平台兼容性,直白反引号风格的字面表示中的回车符(Unicode码点
为 0x0D ) 将被忽略掉。
字符串类型的零值在代码里用 "" 或 `` 表示。
# 基本数值类型字面量的使用范围
当一个数值型的字面量用来表示一个整数基本类型的时候,舍入是不允许的 比如1.0可以表示任何基本整数类型的值
但是1.01 却不可以 当一个数值型的字面量用来表示一个非整数的基本类型的值时,舍入是允许的
注意几个溢出的例子:
字面量 0x10000000000000000 需要65个比特才能表示, 所以在运行时刻,任何基本整数类型都
不能精确表示此字面量。
在IEEE-754标准中,最大的可以精确表示的float32类型数值
为 3.40282346638528859811704183484516925440e+38 ,所以 3.5e38 不能表示任何float32
和complex64类型的值。
在IEEE-754标准中,最大的可以精确表示的float64类型数值
为 1.797693134862315708145274237317043567981e+308 ,因此 2e+308 不能表示任何基本数
值类型的值。
尽管 0x10000000000000000 可以用来表示float32类型的值,但是它不能被任何float32类型的值
所精确表示。上面已经提到了,当使用字面量来表示非整数基本数值类型的时候,精度丢失是允
许的(但溢出是不允许的)。

+ 1
- 1
src/learn/calcQ.go ファイルの表示

@ -77,5 +77,5 @@ func main() {
nonInitSlice = append(nonInitSlice, 111)
nonInitSlice = append(nonInitSlice, 2222)
fmt.Printf("IMY************** %v", nonInitSlice)
fmt.Printf("IMY**************float %v", 0x.Fp0)
}

読み込み中…
キャンセル
保存