對(duì)比學(xué)習(xí):Golang VS Python3

Golang和Python都是目前在各自領(lǐng)域最流行的開(kāi)發(fā)語(yǔ)言之一。

Golang其高效而又友好的語(yǔ)法,贏得了很多后端開(kāi)發(fā)人員的青睞侣滩,最適用于高并發(fā)網(wǎng)絡(luò)編程的語(yǔ)言之一摊册。

Python不用說(shuō)罢缸,TIOBE排行榜的前十常駐居民篙贸,現(xiàn)在已經(jīng)穩(wěn)定在前五了。在機(jī)器學(xué)習(xí)枫疆、AI爵川、數(shù)據(jù)分析領(lǐng)域成為必學(xué)語(yǔ)言。

兩門編程語(yǔ)言在語(yǔ)法上都有各自的特點(diǎn)息楔,而且都易學(xué)易用寝贡。

本文對(duì)比這兩門語(yǔ)言目的不是爭(zhēng)誰(shuí)優(yōu)誰(shuí)略,只是為了對(duì)比學(xué)習(xí)值依,適合掌握Python想學(xué)Go或者掌握Go想學(xué)Python的同學(xué)們參考圃泡。

Go和Python,一個(gè)是靜態(tài)語(yǔ)言一個(gè)是動(dòng)態(tài)語(yǔ)言愿险,從各個(gè)方面來(lái)看颇蜡,都有根本性的差異,所以辆亏,文中很多內(nèi)容不進(jìn)行深入的比較了风秤,我們只從程序員最直觀的語(yǔ)法面做對(duì)比。

為了便于閱讀扮叨,文中涉及代碼都采用盡量簡(jiǎn)單的語(yǔ)句呈現(xiàn)

字符編碼

Python

Python2中默認(rèn)的編碼格式是 ASCII 格式缤弦,程序文件中如果包含中文字符(包括注釋部分)需要在文件開(kāi)頭加上 # -*- coding: UTF-8 -*- 或者 #coding=utf-8 就行了

Python3默認(rèn)支持Unicode

Golang

原生支持Unicode

保留字(關(guān)鍵字)

Python

30個(gè)關(guān)鍵字

and exec    not
assert  finally or
break   for pass
class   from    print
continue global raise
def if  return
del import  try
elif    in  while
else    is  with
except  lambda  yield

Golang

25個(gè)關(guān)鍵字

break   default func    interface   select
case    defer   go  map struct
chan    else    goto    package switch
const   fallthrough if  range   type
continue    for import  return  var

注釋

Python

# 單行注釋

'''
多行注釋
多行注釋
'''

"""
多行注釋
多行注釋
"""

Golang

//單行注釋

/*
多行注釋
多行注釋
*/

變量賦值

Python

Python是動(dòng)態(tài)語(yǔ)言,所以在定義變量的時(shí)候不需要申明類型甫匹,直接使用即可甸鸟。
Python會(huì)根據(jù)值判斷類型惦费。

name = "Zeta" # 字符串變量
age = 38 # 整數(shù)
income = 1.23 # 浮點(diǎn)數(shù)

多變量賦值

a,b = 1,2 # a=1; b=2
c = d = 3 # c=3; d=3

Golang

Go是靜態(tài)語(yǔ)言兵迅,是強(qiáng)類型的,但是Go語(yǔ)言也允許在賦值變量時(shí)確定類型薪贫。

因此Go有多種申明變量的方式

// 1. 完整的申明并賦值
var a int
a = 1

// 2. 聲明變量類型同時(shí)賦值
var a int = 1

// 3. 不聲明類型恍箭,賦值時(shí)確定
var a = 1

// 4. 不用 var 關(guān)鍵字申明變量并賦值后確定類型
a := 1

注意,Go中的new關(guān)鍵字并不是聲明變量瞧省,而是返回該類型的指針

a := new(int) //這時(shí)候a是一個(gè)*int指針變量

標(biāo)準(zhǔn)數(shù)據(jù)類型

Python 的標(biāo)準(zhǔn)數(shù)據(jù)類型有:

  • Boolean(布爾值)
  • Number(數(shù)字)
  • String(字符串)
  • List(列表)
  • Tuple(元組)
  • Set(集合)
  • Dictionary(字典)

Golang

  • boolean(布爾值)
  • numeric(數(shù)字)
  • string(字符串)
  • 數(shù)組(數(shù)組)
  • slice(切片:不定長(zhǎng)數(shù)組)
  • map(字典)
  • struct(結(jié)構(gòu)體)
  • pointer(指針)
  • function(函數(shù))
  • interface(接口)
  • channel(通道)

總結(jié)

Python中的List列表對(duì)應(yīng)Go語(yǔ)言中的Slice切片

Python中的Dictionary字典對(duì)應(yīng)Go語(yǔ)言中的map

有一些值得注意的地方:

  • Go是支持函數(shù)編程的語(yǔ)言扯夭,所以在Go語(yǔ)言中函數(shù)是一個(gè)類型
  • Go語(yǔ)言不是面向?qū)ο蟮恼Z(yǔ)言,沒(méi)有定義類的關(guān)鍵字Class鞍匾,要實(shí)現(xiàn)OOP風(fēng)格編程交洗,是通過(guò)struct、interface類型實(shí)現(xiàn)的
  • Python中的元組和集合在Go中都沒(méi)有
  • channel是Go里獨(dú)有的類型橡淑,多線程之間的通信就靠它

數(shù)據(jù)類型轉(zhuǎn)換

Python

Python類型轉(zhuǎn)換非常簡(jiǎn)單构拳,用類型名作為函數(shù)名即可。

int(n)            # 將數(shù)字n轉(zhuǎn)換為一個(gè)整數(shù)
float(n)          # 將數(shù)字n轉(zhuǎn)換到一個(gè)浮點(diǎn)數(shù)
str(o)            # 將對(duì)象 obj 轉(zhuǎn)換為字符串
tuple(s)          # 將序列 s 轉(zhuǎn)換為一個(gè)元組
list(s)           # 將序列 s 轉(zhuǎn)換為一個(gè)列表
set(s)            # 將序列 s 轉(zhuǎn)換為一個(gè)集合

Golang

Go語(yǔ)言的基礎(chǔ)類型轉(zhuǎn)換和Python差不多,也是用類型名作為函數(shù)名

i := 1024
f := float32(i)
i = float32(f)

另外置森,Python中可以直接轉(zhuǎn)換數(shù)字字符串和數(shù)字:

s = "123"
i = 456
print(int(s), str(i))

但是Go是不可以的斗埂。

Go語(yǔ)言的字符串處理很不同,string()只能用于[]byte類型轉(zhuǎn)換成字符串凫海,其他基礎(chǔ)類型的轉(zhuǎn)換需要用strconv包呛凶,另外,其他類型轉(zhuǎn)換成為string類型除了用strconv包行贪,還可以用fmt.Sprintf函數(shù):

package main

import (
    "fmt"
    "strconv"
)

func main() {
    s := "123"
    i, _ := strconv.Atoi(s)
    println(i)

    s2 := fmt.Sprintf("%d", 456)
    println(s2)
}

Go中的interface類型是不能直接轉(zhuǎn)換成其他類型的漾稀,需要使用到斷言

package main

func main() {
var itf interface{} = 1
i, ok := itf.(string)
println("值:", i, "; 斷言結(jié)果", ok)

j, ok := itf.(int)
println("值:", j, "; 斷言結(jié)果", ok)
}

輸出為:

值:  ; 斷言結(jié)果 false
值: 1 ; 斷言結(jié)果 true

條件語(yǔ)句

Python

Python傳統(tǒng)的判斷語(yǔ)句如下

if name == 'zeta':          # 判斷變量是否為 zeta 
    print('Welcome boss')   # 并輸出歡迎信息
else:
    print('Hi, ' + name)  

Python不支持三元表達(dá)式,但是可以用一種類似的替代辦法

title = "boss"
name = "zeta" if title == "boss" else "chow"
print(name)

邏輯與用 and 瓮顽,邏輯或用 or

Golang

Go的if的語(yǔ)法類似Java县好,但是表達(dá)式不需要使用()

if a > b{
    println("a > b")
} else {
    println("a <= b")
}

Go同樣沒(méi)有三元表達(dá)式,并且也沒(méi)有什么替代方法暖混。

另外缕贡,Go允許在if的表達(dá)式里定義變量,定義并賦值的表達(dá)式與判斷的表達(dá)式用;隔開(kāi)拣播,常見(jiàn)的情況是獲取函數(shù)返回error晾咪,然后判斷error是否為空:

if err := foo(); err != nil {
    println("發(fā)生一些錯(cuò)誤")
} 

與Python不同,邏輯與用 &&贮配, 邏輯或用||

循環(huán)語(yǔ)句

Python

Python中有whilefor兩種循環(huán)谍倦,都可以使用break跳出循環(huán)和continue立即進(jìn)入下一輪循環(huán),另外泪勒,Python的循環(huán)語(yǔ)句還可以用else執(zhí)行循環(huán)全部完畢后的代碼昼蛀,break跳出后不會(huì)執(zhí)行else的代碼

while 條件循環(huán),

count = 0
while (count < 9):
    print('The count is:', count)
    count = count + 1
    if count == 5:
        break   # 可以比較以下break和不break的區(qū)別
        pass
else:
    print('loop over')

for 遍歷循環(huán)圆存,循環(huán)遍歷所有序列對(duì)象的子項(xiàng)

names = ['zeta', 'chow',  'world']
for n in names:
    print('Hello, ' + n)
    if n == 'world':
        break
        pass
else:
    print('Good night!')

for循環(huán)中也可以用else叼旋,(注釋掉代碼中的break試試看。)

Golang

Go語(yǔ)言只有一個(gè)循環(huán)語(yǔ)句for沦辙,但是根據(jù)不同的表達(dá)式夫植,for有不同的表現(xiàn)

for 前置表達(dá)式; 條件表達(dá)式; 后置表達(dá)式 {
    //...
}

前置表達(dá)式 在每輪循環(huán)前運(yùn)行,可以用于聲明變量或調(diào)用函數(shù)返回油讯;
條件表達(dá)式 滿足該表達(dá)式則執(zhí)行下一輪循環(huán)详民,否則退出循環(huán);
后置表達(dá)式 在循環(huán)完成后執(zhí)行

經(jīng)典的用法:

for i := 0; i < 10; i++ {
    println(i)
}

我們可以忽略掉前置和后置表達(dá)式

sum := 1
for sum < 10 {
    sum += sum
}

設(shè)置可以忽略掉全部表達(dá)式,也就是無(wú)限循環(huán)

for {
    print(".")
}

Go的for循環(huán)同樣可以使用 break退出循環(huán)和continue立即進(jìn)行下一輪循環(huán)陌兑。

for除了配合表達(dá)式循環(huán)沈跨,同樣也可以用于遍歷循環(huán),需要用到range關(guān)鍵字

names := []string{"zeta", "chow", "world"}
for i, n := range names {
    println(i,"Hello, " + n)
}

函數(shù)

Python

def關(guān)鍵字定義函數(shù)兔综,并且在Python中饿凛,作為腳本語(yǔ)言隅俘,調(diào)用函數(shù)必須在定義函數(shù)之后。

def foo(name):
    print("hello, "+name)
    pass

foo("zeta")

默認(rèn)參數(shù) Python定義函數(shù)參數(shù)時(shí)笤喳,可以設(shè)置默認(rèn)值为居,調(diào)用時(shí)如果沒(méi)有傳遞該參數(shù),函數(shù)內(nèi)將使用默認(rèn)值杀狡,默認(rèn)值參數(shù)必須放在無(wú)默認(rèn)值參數(shù)后面蒙畴。

def foo(name="zeta"):
    print("hello, "+name)
    pass

foo()

關(guān)鍵字參數(shù) 一般函數(shù)傳遞參數(shù)時(shí),必須按照參數(shù)定于的順序傳遞呜象,但是Python中膳凝,允許使用關(guān)鍵字參數(shù),這樣通過(guò)指定參數(shù)明恭陡,可以不按照函數(shù)定義參數(shù)的順序傳遞參數(shù)蹬音。

def foo(age, name="zeta"):
    print("hello, "+name+"; age="+str(age))
    pass

foo(name="chow", age=18)

不定長(zhǎng)參數(shù),Python支持不定長(zhǎng)參數(shù)休玩,用*定義參數(shù)名著淆,調(diào)用時(shí)多個(gè)參數(shù)將作為一個(gè)元祖?zhèn)鬟f到函數(shù)內(nèi)

def foo(*names):
    for n in names:
        print("hello, "+n)
    pass

foo("zeta", "chow", "world")

return 返回函數(shù)結(jié)果。

Golang

Go用func定義函數(shù)拴疤,沒(méi)有默認(rèn)值參數(shù)永部、沒(méi)有關(guān)鍵字參數(shù),但是有很多其他特征呐矾。

func main() {
    println(foo(18, "zeta"))
}

func foo(age int, name string) (r string) {
    r = fmt.Sprintf("myname is %s , age %d", name, age)
    return 
}

函數(shù)的定義和調(diào)用沒(méi)有順序的限制苔埋。

Go的函數(shù)不僅可以定義函數(shù)返回值類型,還可以申明返回值變量蜒犯,當(dāng)定義了返回值變量時(shí)组橄,函數(shù)內(nèi)的return語(yǔ)句可以不需要帶返回值,函數(shù)會(huì)默認(rèn)使用返回值變量返回罚随。

可變參數(shù)

使用…類型定義可變參數(shù)玉工,函數(shù)內(nèi)獲得的參數(shù)實(shí)際是該類型slice對(duì)象

func main() {
    println(foo(18, “zeta”, “chow”, “world”))
}

func foo(age int, names …string) (r string) {
    for _, n := range names {
        r += fmt.Sprintf(“myname is %s , age %d \n”, n, age)
    }

    return
}

defer句

defer語(yǔ)句后面指定一個(gè)函數(shù),該函數(shù)會(huì)延遲到本函數(shù)return后再執(zhí)行毫炉。

defer語(yǔ)句在Go語(yǔ)言中非常有用瓮栗,詳細(xì)可以查閱本專欄的另一篇文章《Golang研學(xué):如何掌握并用好defer(延遲執(zhí)行)

func foo() {
    defer fmt.Println("defer run")
    fmt.Println("Hello world")
    return
}

運(yùn)行結(jié)果:

Hello world
defer run

另外削罩,在Go語(yǔ)言中函數(shù)也是類型瞄勾,可以作為參數(shù)傳遞給別的函數(shù)

func main() {
    n := foo(func(i int, j int) int {
        return i + j
    })
    println(n)
}

func foo(af func(int, int) int) int {
    return af(1, 2)
}

上面這個(gè)例子直接在參數(shù)定義時(shí)使用函數(shù)類型,看上去有點(diǎn)混亂

再看來(lái)看一個(gè)清晰并完整的例子弥激,說(shuō)明全在注釋里进陡。

package main

type math func(int, int) int //定義一個(gè)函數(shù)類型,兩個(gè)int參數(shù)微服,一個(gè)int返回值

//定義一個(gè)函數(shù)add趾疚,這個(gè)函數(shù)兩個(gè)int參數(shù)一個(gè)int返回值,與math類型相符
func add(i int, j int) int {
    return i + j
}

//再定義一個(gè)multiply,這個(gè)函數(shù)同樣符合math類型
func multiply(i, j int) int {
    return i * j
}

//foo函數(shù)糙麦,需要一個(gè)math類型的參數(shù)辛孵,用math類型的函數(shù)計(jì)算第2和第3個(gè)參數(shù)數(shù)字,并返回計(jì)算結(jié)果
//稍后在main中我們將add函數(shù)和multiply分別作為參數(shù)傳遞給它
func foo(m math, n1, n2 int) int {
    return m(1, 2)
}

func main() {
    //傳遞add函數(shù)和兩個(gè)數(shù)字赡磅,計(jì)算相加結(jié)果
    n := foo(add, 1, 2)
    println(n)

    //傳遞multply和兩個(gè)數(shù)字魄缚,計(jì)算相乘結(jié)果
    n = foo(multiply, 1, 2)
    println(n)
}

結(jié)果

3
2

模塊

Python

  • 模塊是一個(gè).py文件
  • 模塊在第一次被導(dǎo)入時(shí)執(zhí)行
  • 一個(gè)下劃線定義保護(hù)級(jí)變量和函數(shù),兩個(gè)下劃線定義私有變量和函數(shù)
  • 導(dǎo)入模塊習(xí)慣性在腳本頂部焚廊,但是不強(qiáng)制

Golang

  • 與文件和文件名無(wú)關(guān)冶匹,每一個(gè)文件第一行用package定義包名,相同包名為一個(gè)包
  • 包中的變量第一次引用時(shí)初始化咆瘟,如果包中包含init函數(shù)嚼隘,也會(huì)在第一次引用時(shí)執(zhí)行(變量初始化后)
  • 保重首寫字母大寫的函數(shù)和變量為共有,小寫字母為私有袒餐,Golang不是面向?qū)ο蟮姆捎迹圆淮嬖诒Wo(hù)級(jí)。
  • 導(dǎo)入模塊必須寫在package之后灸眼,其他代碼之前桩皿。

導(dǎo)入包

Python

在Python中,使用import導(dǎo)入模塊幢炸。

#!/usr/bin/python
# -*- coding: UTF-8 -*-
 
# 導(dǎo)入模塊
import support
 
support.print_func(“Runoob”)

還可以使用from import導(dǎo)入模塊指定部分

from modname import name1[, name2[, ... nameN]]

為導(dǎo)入的包設(shè)置別名用 as關(guān)鍵字

import datetime as dt

Golang

也是使用import導(dǎo)入包泄隔,導(dǎo)入包指定的是包的路徑,包名默認(rèn)為路徑中的最后部分

import "net/url" //導(dǎo)入url包

多個(gè)包可以用()組合導(dǎo)入

import (
    "fmt"
    "net/url"
)

為導(dǎo)入的包設(shè)置別名, 直接在導(dǎo)入包時(shí)宛徊,直接在報(bào)名前面添加別名佛嬉,用空格隔開(kāi)

import (
    f "fmt"
  u "net/url"
)

錯(cuò)誤和異常

Python

Python中用經(jīng)典的 try/except 捕獲異常

try:
<語(yǔ)句>        #運(yùn)行別的代碼
except <異常名稱>:
<語(yǔ)句>        #
except <異常名稱>,<數(shù)據(jù)>:
<語(yǔ)句>        #如果引發(fā)了指定名稱的異常闸天,獲得附加的數(shù)據(jù)

還提供了 elsefinally

如果沒(méi)發(fā)生異常的執(zhí)行else語(yǔ)句塊暖呕,finally塊的代碼無(wú)論是否捕獲異常都會(huì)執(zhí)行

Python內(nèi)建了很全面的異常類型名稱,同時(shí)能自定義異常類型

Golang

Golang里沒(méi)有用經(jīng)典的 try/except捕獲異常苞氮。

Golang提供兩種錯(cuò)誤處理方式

  1. 函數(shù)返回error類型對(duì)象判斷錯(cuò)誤
  2. panic異常

一般情況下在Go里只使用error類型判斷錯(cuò)誤湾揽,Go官方希望開(kāi)發(fā)者能夠很清楚的掌控所有的異常,在每一個(gè)可能出現(xiàn)異常的地方都返回或判斷error是否存在笼吟。

error是一個(gè)內(nèi)置的接口類型

type error interface {
    Error() string
}

通常库物,使用error異常處理類似這樣:

package main

import "fmt"

func foo(i int, j int) (r int, err error) {
    if j == 0 {
        err = fmt.Errorf("參數(shù)2不能為 %d", j) //給err變量賦值一個(gè)error對(duì)象
        return //返回r和err,因?yàn)槎x了返回值變量名贷帮,所以不需要在這里寫返回變量
    }

    return i / j, err //如果沒(méi)有賦值error給err變量戚揭,err是nil
}

func main() {
    //傳遞add函數(shù)和兩個(gè)數(shù)字,計(jì)算相加結(jié)果
    n, err := foo(100, 0)
    if err != nil { //判斷返回的err變量是否為nil撵枢,如果不是民晒,說(shuō)明函數(shù)調(diào)用出錯(cuò)精居,打印錯(cuò)誤內(nèi)容
        println(err.Error())
    } else {
        println(n)
    }
}

panic可以手工調(diào)用,但是Golang官方建議盡量不要使用panic潜必,每一個(gè)異常都應(yīng)該用error對(duì)象捕獲靴姿。

Go語(yǔ)言在一些情況下會(huì)觸發(fā)內(nèi)建的panic,例如 0 除磁滚、數(shù)組越界等空猜,修改一下上面的例子,我們讓函數(shù)引起0除panic

package main

func foo(i int, j int) (r int) {
    return i / j
}

func main() {
    //傳遞add函數(shù)和兩個(gè)數(shù)字恨旱,計(jì)算相加結(jié)果
    n := foo(100, 0)
    println(n)
}

運(yùn)行后會(huì)出現(xiàn)

panic: runtime error: integer divide by zero
goroutine 1 [running]:
main.foo(...)
        /lang.go:4
main.main()
        /lang.go:9 +0x12
exit status 2

手工panic可以這樣:

func foo(i int, j int) (r int) {
    if j == 0 {
        panic("panic說(shuō)明: j為0")
    }
    return i / j
}

運(yùn)行后辈毯,可以看到,錯(cuò)誤消息的第一句:

panic: panic說(shuō)明: j為0

面向?qū)ο?/h2>

Python

Python完全支持面向?qū)ο蟮摹?/p>

Golang

盡管Go語(yǔ)言允許面向?qū)ο蟮娘L(fēng)格編程搜贤,但是本身并不是面向?qū)ο蟮?/p>

官方FAQ原文

Is Go an object-oriented language?

Yes and no. Although Go has types and methods and allows an object-oriented style of programming, there is no type hierarchy. The concept of “interface” in Go provides a different approach that we believe is easy to use and in some ways more general. There are also ways to embed types in other types to provide something analogous—but not identical—to subclassing. Moreover, methods in Go are more general than in C++ or Java: they can be defined for any sort of data, even built-in types such as plain, “unboxed” integers. They are not restricted to structs (classes).

多線程

Python

  1. 使用thread模塊中的start_new_thread()函數(shù)
  2. 使用threading模塊創(chuàng)建線程

Golang

用關(guān)鍵 go創(chuàng)建協(xié)程goroutine

go關(guān)鍵字后指定函數(shù)谆沃,將會(huì)開(kāi)啟一個(gè)協(xié)程運(yùn)行該函數(shù)。

package main

import (
    "fmt"
    "time"
)

func foo() {
    for i := 0; i < 5; i++ {
        fmt.Println("loop in foo:", i)
        time.Sleep(1 * time.Second)
    }
}

func main() {
    go foo()

    for i := 0; i < 5; i++ {
        fmt.Println("loop in main:", i)
        time.Sleep(1 * time.Second)
    }
    time.Sleep(6 * time.Second)
}

Go語(yǔ)言中仪芒,協(xié)程之間的通信是通過(guò)channel實(shí)現(xiàn)的:

package main

import (
    "fmt"
    "time"
)

//接受一個(gè)chan類型的參數(shù)c
func foo(c chan int) { 
    time.Sleep(1 * time.Second) //等待1秒
    c <- 1024                   //向c中寫入數(shù)字
}

func main() {
    c := make(chan int) //創(chuàng)建chan變量c
    go foo(c)           //在子寫成中運(yùn)行函數(shù)foo唁影,并傳遞變量c
    fmt.Println("wait chan 'c' for 1 second")
    fmt.Println(<-c) //取出chan 'c'的值(取值時(shí),如果c中無(wú)值掂名,主縣城會(huì)阻塞等待)
}

總結(jié)

Python和Go分別在動(dòng)態(tài)語(yǔ)言和靜態(tài)語(yǔ)言中都是最易學(xué)易用的編程語(yǔ)言之一据沈。

它們并不存在取代關(guān)系,而是各自在其領(lǐng)域發(fā)揮自己的作用饺蔑。

Python的語(yǔ)法簡(jiǎn)單直觀锌介,除了程序員愛(ài)不釋手外也非常適合于其他領(lǐng)域從業(yè)者使用。

Go兼具語(yǔ)法簡(jiǎn)單和運(yùn)行高效的有點(diǎn)猾警,在多線程處理方面很優(yōu)秀孔祸,非常適合已經(jīng)掌握一定編程基礎(chǔ)和一門主流語(yǔ)言的同學(xué)學(xué)習(xí),不過(guò)发皿,Go是不支持面向?qū)ο蟮拇藁郏瑢?duì)于大多數(shù)支持面向?qū)ο笳Z(yǔ)言的使用者在學(xué)習(xí)Go語(yǔ)言的時(shí)候,需要謹(jǐn)記并且轉(zhuǎn)換編程思路穴墅。

后記

文中還有許多應(yīng)該涉及的知識(shí)卻沒(méi)有能夠詳細(xì)說(shuō)明惶室,它是不完整的,甚至難免會(huì)有一些失誤玄货。

如果皇钞,您覺(jué)得本文對(duì)您有所幫助,希望能夠得到您的點(diǎn)贊支持誉结,如果文中有錯(cuò)誤的地方鹅士,也希望不吝賜教券躁,通過(guò)評(píng)論或者公眾號(hào)和大家一起交流學(xué)習(xí)惩坑。

曉代碼
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末掉盅,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子以舒,更是在濱河造成了極大的恐慌趾痘,老刑警劉巖,帶你破解...
    沈念sama閱讀 217,509評(píng)論 6 504
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件蔓钟,死亡現(xiàn)場(chǎng)離奇詭異永票,居然都是意外死亡,警方通過(guò)查閱死者的電腦和手機(jī)滥沫,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,806評(píng)論 3 394
  • 文/潘曉璐 我一進(jìn)店門侣集,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái),“玉大人兰绣,你說(shuō)我怎么就攤上這事世分。” “怎么了缀辩?”我有些...
    開(kāi)封第一講書(shū)人閱讀 163,875評(píng)論 0 354
  • 文/不壞的土叔 我叫張陵臭埋,是天一觀的道長(zhǎng)。 經(jīng)常有香客問(wèn)我臀玄,道長(zhǎng)瓢阴,這世上最難降的妖魔是什么? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 58,441評(píng)論 1 293
  • 正文 為了忘掉前任健无,我火速辦了婚禮荣恐,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘累贤。我一直安慰自己募胃,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,488評(píng)論 6 392
  • 文/花漫 我一把揭開(kāi)白布畦浓。 她就那樣靜靜地躺著痹束,像睡著了一般。 火紅的嫁衣襯著肌膚如雪讶请。 梳的紋絲不亂的頭發(fā)上祷嘶,一...
    開(kāi)封第一講書(shū)人閱讀 51,365評(píng)論 1 302
  • 那天,我揣著相機(jī)與錄音夺溢,去河邊找鬼论巍。 笑死,一個(gè)胖子當(dāng)著我的面吹牛风响,可吹牛的內(nèi)容都是我干的嘉汰。 我是一名探鬼主播,決...
    沈念sama閱讀 40,190評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼状勤,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼鞋怀!你這毒婦竟也來(lái)了双泪?” 一聲冷哼從身側(cè)響起,我...
    開(kāi)封第一講書(shū)人閱讀 39,062評(píng)論 0 276
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤密似,失蹤者是張志新(化名)和其女友劉穎焙矛,沒(méi)想到半個(gè)月后,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體残腌,經(jīng)...
    沈念sama閱讀 45,500評(píng)論 1 314
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡村斟,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,706評(píng)論 3 335
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了抛猫。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片蟆盹。...
    茶點(diǎn)故事閱讀 39,834評(píng)論 1 347
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖闺金,靈堂內(nèi)的尸體忽然破棺而出日缨,到底是詐尸還是另有隱情,我是刑警寧澤掖看,帶...
    沈念sama閱讀 35,559評(píng)論 5 345
  • 正文 年R本政府宣布匣距,位于F島的核電站,受9級(jí)特大地震影響哎壳,放射性物質(zhì)發(fā)生泄漏毅待。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,167評(píng)論 3 328
  • 文/蒙蒙 一归榕、第九天 我趴在偏房一處隱蔽的房頂上張望尸红。 院中可真熱鬧,春花似錦刹泄、人聲如沸外里。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 31,779評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)盅蝗。三九已至,卻和暖如春姆蘸,著一層夾襖步出監(jiān)牢的瞬間墩莫,已是汗流浹背。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 32,912評(píng)論 1 269
  • 我被黑心中介騙來(lái)泰國(guó)打工逞敷, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留狂秦,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 47,958評(píng)論 2 370
  • 正文 我出身青樓推捐,卻偏偏與公主長(zhǎng)得像裂问,于是被迫代替她去往敵國(guó)和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,779評(píng)論 2 354