四月二十三号日报
今日學(xué)習(xí)內(nèi)容
Go語(yǔ)言的字符類(lèi)型,字符串,strings和strconv包,指針
1.1字符類(lèi)型:嚴(yán)格來(lái)說(shuō),這并不是 Go 語(yǔ)言的一個(gè)類(lèi)型,字符只是整數(shù)的特殊用例。byte類(lèi)型是unit8的別名。
var ch byte = 65或 var ch byte ='x41'
x總是緊跟著長(zhǎng)度為2或者16的二進(jìn)制數(shù),還有一種寫(xiě)法是后面緊跟著長(zhǎng)度為3的八進(jìn)制數(shù),Go同樣支持Unicode(UTF-8),在書(shū)寫(xiě) Unicode 字符時(shí),需要在 16 進(jìn)制數(shù)之前加上前綴 u 或者 U。因?yàn)?Unicode 至少占用 2 個(gè)字節(jié),所以我們使用 int16 或者 int 類(lèi)型來(lái)表示。如果需要使用到 4 字節(jié),則會(huì)加上 U 前綴;前綴 u 則總是緊跟著長(zhǎng)度為 4 的 16 進(jìn)制數(shù),前綴 U 緊跟著長(zhǎng)度為 8 的 16 進(jìn)制數(shù)。
1.2字符串:字符串是一種值類(lèi)型,且值不可變,即創(chuàng)建某個(gè)文本后你無(wú)法再次修改這個(gè)文本的內(nèi)容;更深入地講,字符串是字節(jié)的定長(zhǎng)數(shù)組
Go 支持以下 2 種形式的字面值:
解釋字符串:
該類(lèi)字符串使用雙引號(hào)括起來(lái),其中的相關(guān)的轉(zhuǎn)義字符將被替換,這些轉(zhuǎn)義字符包括:
:換行符
:回車(chē)符
:tab 鍵
u 或 U:Unicode 字符
\:反斜杠自身
非解釋字符串:
該類(lèi)字符串使用反引號(hào)括起來(lái),支持換行
1.3strings和strconv包:Go中使用strings包來(lái)完成對(duì)字符串的主要操作,如:
HasPrefix 判斷字符串 s 是否以 prefix 開(kāi)頭
HasSuffix 判斷字符串 s 是否以 suffix 結(jié)尾
Contains 判斷字符串 s 是否包含 substr
Index 返回字符串 str 在字符串 s 中的索引(str 的第一個(gè)字符的索引),-1 表示字符串 s 不包含字符串 str
LastIndex 返回字符串 str 在字符串 s 中最后出現(xiàn)位置的索引(str 的第一個(gè)字符的索引),-1 表示字符串 s 不包含字符串 str
Replace 用于將字符串 str 中的前 n 個(gè)字符串 old 替換為字符串 new,并返回一個(gè)新的字符串,如果 n = -1 則替換所有字符串 old 為字符串 new
Count 用于計(jì)算字符串 str 在字符串 s 中出現(xiàn)的非重疊次數(shù)
Repeat 用于重復(fù) count 次字符串 s 并返回一個(gè)新的字符串
ToLower 將字符串中的 Unicode 字符全部轉(zhuǎn)換為相應(yīng)的小寫(xiě)字符
ToUpper 將字符串中的 Unicode 字符全部轉(zhuǎn)換為相應(yīng)的大寫(xiě)字符
strings.TrimSpace(s) 來(lái)剔除字符串開(kāi)頭和結(jié)尾的空白符號(hào);如果你想要剔除指定字符,則可以使用 strings.Trim(s, "cut") 來(lái)將開(kāi)頭和結(jié)尾的 cut 去除掉。該函數(shù)的第二個(gè)參數(shù)可以包含任何字符,如果你只想剔除開(kāi)頭或者結(jié)尾的字符串,則可以使用 TrimLeft 或者 TrimRight 來(lái)實(shí)現(xiàn)
Join 用于將元素類(lèi)型為 string 的 slice 使用分割符號(hào)來(lái)拼接組成一個(gè)字符串
1.4指針:Go語(yǔ)言的取地址符是&,放到一個(gè)變量前使用就會(huì)返回相應(yīng)變量的內(nèi)存地址
var i1 = 5
fmt.Printf("An integer: %d, it's location in memory: %p
", i1, &i1)
這個(gè)地址可以存儲(chǔ)在一個(gè)叫做指針的特殊數(shù)據(jù)類(lèi)型中,在本例中這是一個(gè)指向 int 的指針,即 i1:此處使用 *int 表示。如果我們想調(diào)用指針 intP,我們可以這樣聲明它:
var intP *int
然后使用intP = &i1是合法的,此時(shí)intP指向i1。intP 存儲(chǔ)了 i1 的內(nèi)存地址;它指向了 i1 的位置,它引用了變量 i1。當(dāng)一個(gè)指針被定義后沒(méi)有分配到任何的變量時(shí),它的值為nil。
但是你不能得到文字和常量的地址
const i = 5
ptr := &i
ptr2 := &10
雖然Go和C/C++一樣都有指針的概念,但是對(duì)于pointer+2這樣的操作是不允許的
PostgreSQL學(xué)習(xí)
? 在官網(wǎng)下載Postgresql和圖形化管理工具pgadmin4后一路傻瓜式安裝即可
1.1:何為PostgreSQL?
PostgreSQL是以加州大學(xué)伯克利分校計(jì)算機(jī)系開(kāi)發(fā)的POSTGRES, 版本 4.21為基礎(chǔ)的對(duì)象關(guān)系
型數(shù)據(jù)庫(kù)管理系統(tǒng)(ORDBMS)。POSTGRES 領(lǐng)先的許多概念在很久以后才出現(xiàn)在一些商業(yè)數(shù)據(jù)
庫(kù)系統(tǒng)中。
PostgreSQL是最初的伯克利代碼的開(kāi)源繼承者。它支持大部分 SQL 標(biāo)準(zhǔn)并且提供了許多現(xiàn)代
特性:
? 復(fù)雜查詢
? 外鍵
? 觸發(fā)器
? 可更新視圖
? 事務(wù)完整性
? 多版本并發(fā)控制
同樣,PostgreSQL可以用許多方法擴(kuò)展,比如, 通過(guò)增加新的:
? 數(shù)據(jù)類(lèi)型
? 函數(shù)
? 操作符
? 聚集函數(shù)
? 索引方法
? 過(guò)程語(yǔ)言
并且,因?yàn)樽杂蓪挻蟮脑S可證,任何人都可以以任何目的免費(fèi)使用、修改和分發(fā)
PostgreSQL, 不管是私用、商用還是學(xué)術(shù)研究目的。
1.2創(chuàng)建新表與刪除:與常用數(shù)據(jù)庫(kù)創(chuàng)建表的命令差不多,用--使用注釋
create table weather(
city varchar(80),
temp_lo int,
temo_hi int,
prcp real,
date date
);
drop table tablename
1.2在表中增加行:insert語(yǔ)句向表中添加行
insert into weather values ('San Francisco', 46, 50, 0.25, '1994-11-27')
如果你需要,你可以用另外一個(gè)順序列出列或者是忽略某些列, 比如說(shuō),我們不知道降水
量
insert into weather (date, city, temo_hi, temp_lo) values ('1994-11-29', 'Hayward', 54, 37);
1.3查詢一個(gè)表:SQL的select語(yǔ)句為查詢用途,該語(yǔ)句分為選擇列表(列出要返回的列)、表列表(列出從中檢索數(shù)據(jù)的表)以及可選的條件(指定任意的限制)。
select * from weather
這里*是“所有列”的縮寫(xiě)。 因此相同的結(jié)果應(yīng)該這樣獲得
SELECT city, temp_lo, temo_hi, prcp, date FROM weather;
你可以在選擇列表中寫(xiě)任意表達(dá)式,而不僅僅是列的列表
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子句包含一個(gè)布爾(真值)表達(dá)式,只有那些使布爾表達(dá)式為真的行才會(huì)被返回。在條件中可以使用常用的布爾操作符(and、or和not)
select *from weather order by city
select distinct city from weather
第一條語(yǔ)句是要求返回的查詢結(jié)果是排好序的,第二條是消除重復(fù)的行
1.4在表之間的連接:一個(gè)同時(shí)訪問(wèn)同一個(gè)或者不同表的多個(gè)行的查詢叫連接查詢。
select * from weather,cities where city =name
where所挑選的字段名被數(shù)據(jù)庫(kù)自動(dòng)識(shí)別屬于哪一個(gè)表,當(dāng)兩個(gè)表中有重復(fù)名的列時(shí),就需要進(jìn)行限定
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聚集函數(shù):count(計(jì)數(shù))、sum(和)、avg(均值)、max(最大值)和min(最小值)的函數(shù)。
select city from weather where temp_lo=max(temp_lo)
上面這條語(yǔ)句不能運(yùn)行,因?yàn)榫奂瘮?shù)不允許出現(xiàn)在where句子中(存在這個(gè)限制是因
為where子句決定哪些行可以被聚集計(jì)算包括;因此顯然它必需在聚集函數(shù)之前被計(jì)
算),解決的辦法是使用子查詢
select city from weather where temp_lo=(select max(temp_lo) from weather)
1.6更新:用update命令更新現(xiàn)有的行
update weather set temo_hi=temo_hi-2,temp_lo=temp_lo-2 where date>'1994-11-28'
1.7刪除:數(shù)據(jù)行可以用delete刪除
delete from weather where city='Hayward'
總結(jié)
- 上一篇: Python PEP8 代码规范常见问题
- 下一篇: 火狐浏览器插件安装及推荐