四月二十三号日报
今日学习内容
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 种形式的字面值:
-
解释字符串:
该类字符串使用双引号括起来,其中的相关的转义字符将被替换,这些转义字符包括:
\n
:换行符\r
:回车符\t
:tab 键\u
或\U
: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\n", 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'