今日学习内容

Go语言的字符类型,字符串,strings和strconv包,指针

1.1字符类型:严格来说,这并不是 Go 语言的一个类型,字符只是整数的特殊用例。byte类型是unit8的别名。

var ch byte = 65或 var ch byte ='x41'

x总是紧跟着长度为2或者16的二进制数,还有一种写法是后面紧跟着长度为3的八进制数,Go同样支持Unicode(UTF-8),在书写 Unicode 字符时,需要在 16 进制数之前加上前缀 u 或者 U。因为 Unicode 至少占用 2 个字节,所以我们使用 int16 或者 int 类型来表示。如果需要使用到 4 字节,则会加上 U 前缀;前缀 u 则总是紧跟着长度为 4 的 16 进制数,前缀 U 紧跟着长度为 8 的 16 进制数。

1.2字符串:字符串是一种值类型,且值不可变,即创建某个文本后你无法再次修改这个文本的内容;更深入地讲,字符串是字节的定长数组

Go 支持以下 2 种形式的字面值:

解释字符串:

该类字符串使用双引号括起来,其中的相关的转义字符将被替换,这些转义字符包括:


:换行符
:回车符
:tab 键
uU:Unicode 字符
\:反斜杠自身

非解释字符串:

该类字符串使用反引号括起来,支持换行

1.3strings和strconv包:Go中使用strings包来完成对字符串的主要操作,如:

HasPrefix 判断字符串 s 是否以 prefix 开头
HasSuffix 判断字符串 s 是否以 suffix 结尾
Contains 判断字符串 s 是否包含 substr
Index 返回字符串 str 在字符串 s 中的索引(str 的第一个字符的索引),-1 表示字符串 s 不包含字符串 str
LastIndex 返回字符串 str 在字符串 s 中最后出现位置的索引(str 的第一个字符的索引),-1 表示字符串 s 不包含字符串 str
Replace 用于将字符串 str 中的前 n 个字符串 old 替换为字符串 new,并返回一个新的字符串,如果 n = -1 则替换所有字符串 old 为字符串 new
Count 用于计算字符串 str 在字符串 s 中出现的非重叠次数
Repeat 用于重复 count 次字符串 s 并返回一个新的字符串
ToLower 将字符串中的 Unicode 字符全部转换为相应的小写字符
ToUpper 将字符串中的 Unicode 字符全部转换为相应的大写字符
strings.TrimSpace(s) 来剔除字符串开头和结尾的空白符号;如果你想要剔除指定字符,则可以使用 strings.Trim(s, "cut") 来将开头和结尾的 cut 去除掉。该函数的第二个参数可以包含任何字符,如果你只想剔除开头或者结尾的字符串,则可以使用 TrimLeft 或者 TrimRight 来实现
Join 用于将元素类型为 string 的 slice 使用分割符号来拼接组成一个字符串

1.4指针:Go语言的取地址符是&,放到一个变量前使用就会返回相应变量的内存地址

var i1 = 5
fmt.Printf("An integer: %d, it's location in memory: %p
", i1, &i1)

这个地址可以存储在一个叫做指针的特殊数据类型中,在本例中这是一个指向 int 的指针,即 i1:此处使用 *int 表示。如果我们想调用指针 intP,我们可以这样声明它:

var intP *int

然后使用intP = &i1是合法的,此时intP指向i1。intP 存储了 i1 的内存地址;它指向了 i1 的位置,它引用了变量 i1。当一个指针被定义后没有分配到任何的变量时,它的值为nil

但是你不能得到文字和常量的地址

	const i = 5
	ptr := &i
	ptr2 := &10

虽然Go和C/C++一样都有指针的概念,但是对于pointer+2这样的操作是不允许的

PostgreSQL学习

​ 在官网下载Postgresql和图形化管理工具pgadmin4后一路傻瓜式安装即可

1.1:何为PostgreSQL?

PostgreSQL是以加州大学伯克利分校计算机系开发的POSTGRES, 版本 4.21为基础的对象关系
型数据库管理系统(ORDBMS)。POSTGRES 领先的许多概念在很久以后才出现在一些商业数据
库系统中。
PostgreSQL是最初的伯克利代码的开源继承者。它支持大部分 SQL 标准并且提供了许多现代
特性:
• 复杂查询
• 外键
• 触发器
• 可更新视图
• 事务完整性
• 多版本并发控制
同样,PostgreSQL可以用许多方法扩展,比如, 通过增加新的:
• 数据类型
• 函数
• 操作符
• 聚集函数
• 索引方法
• 过程语言
并且,因为自由宽大的许可证,任何人都可以以任何目的免费使用、修改和分发
PostgreSQL, 不管是私用、商用还是学术研究目的。

1.2创建新表与删除:与常用数据库创建表的命令差不多,用--使用注释

create table weather(
	city varchar(80),
	temp_lo int,
	temo_hi int,
	prcp real,
	date date
);
drop table tablename

1.2在表中增加行:insert语句向表中添加行

insert into weather values ('San Francisco', 46, 50, 0.25, '1994-11-27')
如果你需要,你可以用另外一个顺序列出列或者是忽略某些列, 比如说,我们不知道降水
量
insert into weather (date, city, temo_hi, temp_lo) values ('1994-11-29', 'Hayward', 54, 37);

1.3查询一个表:SQL的select语句为查询用途,该语句分为选择列表(列出要返回的列)、表列表(列出从中检索数据的表)以及可选的条件(指定任意的限制)。

select * from weather

这里*是“所有列”的缩写。 因此相同的结果应该这样获得

SELECT city, temp_lo, temo_hi, prcp, date FROM weather;

你可以在选择列表中写任意表达式,而不仅仅是列的列表

select city,(temo_hi+temp_lo)/2 as temp_avg,date from weather
select * from weather where city ='San Francisco' and prcp>0.0

as句子是如何给输出列重新命名的,where子句包含一个布尔(真值)表达式,只有那些使布尔表达式为真的行才会被返回。在条件中可以使用常用的布尔操作符(and、or和not)

select *from weather order by city
select distinct city from weather

第一条语句是要求返回的查询结果是排好序的,第二条是消除重复的行

1.4在表之间的连接:一个同时访问同一个或者不同表的多个行的查询叫连接查询。

select * from weather,cities where city =name

where所挑选的字段名被数据库自动识别属于哪一个表,当两个表中有重复名的列时,就需要进行限定

select weather.city, weather.temp_lo, weather.temo_hi,
 weather.prcp, weather.date, cities.location
 from weather, cities
 where cities.name = weather.city;

1.5聚集函数:count(计数)、sum(和)、avg(均值)、max(最大值)和min(最小值)的函数。

select city from weather where temp_lo=max(temp_lo)

上面这条语句不能运行,因为聚集函数不允许出现在where句子中(存在这个限制是因
为where子句决定哪些行可以被聚集计算包括;因此显然它必需在聚集函数之前被计
算),解决的办法是使用子查询

select city from weather where temp_lo=(select max(temp_lo) from weather)

1.6更新:用update命令更新现有的行

update weather set temo_hi=temo_hi-2,temp_lo=temp_lo-2 where date>'1994-11-28'

1.7删除:数据行可以用delete删除

delete from weather where city='Hayward'