当前位置: 首页 > news >正文

GO語言基礎教程:數據類型,變量,常量

    GO類似PHP,每行的結尾要加分號來結束,不同點在於GO對此並不強制,這一點又像javascript,另外GO的語句塊是用一對大括號來包裹的,但是go要求左大括號必須要在語句的結尾處,不能在行首出現左大括號,這是一個新的特性,至少在我接觸的編程語言中第一次遇到這種狀況.還有就是GO對大小寫敏感,這一點相信大家不會有什麽爭議.
    GO語言的註釋方法和PHP是相同的,單行註釋用//,而多行註釋用/*註釋內容*/,這一點是沒差別的.

    Go有眾所周知的數據類型int,這個類型很特殊,他會自動根據您的硬件決定適當的長度,在32位的硬件上他的長度是32位,在64位的硬件上,他的長度就是64位,當然了,您也可以強制定義某個變量的長度,例如int8,int16,int32,int64 和 byte,uint8,uint16,uint32,uint64。 注意,這裡的byte是uint8的別稱。
    浮點類型分為float32 和 float64
    布爾類型由預定義的常量true和false來表示,定義方法為: var x bool=true;
    Go原生支持複數,變量類型是complex128;complex64;complex32
    另外還有幾個特殊類型,分別是error和uintptr,這個以後再來詳細討論

    記得千萬不要混用這些類型,混用會導致出錯,看下邊的代碼:
   

package main
    func main() {
        var a int
        var b int32
        a = 15
        b = a + a
        b = b + 5
    }

 
    這段代碼因為混用了數據類型,因此在編譯的時候會出錯,如果想讓他不出錯必須要用顯式數據轉換才行,以後會討論這個部份.

    GO語言變量定義有很多種寫法,其實概括起來應該只有兩種而已,第一種方式是:
    var 變量名 類型 = 初始值
    例如:
    var a int = 123
    也可以省略類型
    var a=123
    這種方法主要是用來定義全局變量,其實有此可以延伸出很多種不同的寫法,例如
  

 var(
        a int
        b bool
        c,d string = "abc","ff"
    )

    對於這些寫法,其實只要會用一種就可以了,其他的不同寫法只要能認識他是做什麽事情就够了,沒必要每個都死記硬背.
    上邊說的是第一種定義方式,其實還有另外一種更為簡潔的定義方式,但是這種定義方式只能用到函數內部,其寫法如下:
    a := 123
    a, b := 20, 16
    _, b := 34, 35
    在Go語言中有一個很特殊的變量,那就是系統預設的_,所有賦值給這個變量的值都會被自動丟棄掉,這是因為go語言不允許定義了變量卻不使用,一旦遇到這種定義了變量卻用不到的情況時,可以賦值給_即可.
    從上一節課我們瞭解到import進來的包如果沒有使用到會出錯,這節課我們又瞭解到定義了的變量如果沒有用到也會出錯,有此可見GO語言的用心了,我覺得這兩個特性是非常棒的.它強制要求程序員寫嚴謹的程序,這一點讓我欣喜不已.

    變量定義就只有這麼多東西,只要把握一點就行了,那就是function之外如果要定義變量就只能用var來定義,不能用 := 這種縮寫形式,因為 := 只能用到function內部.

    常量定義和變量定義幾乎沒差別,只是把var這個關鍵字換成了const罷了,另外多了一個枚舉類型 iota 看下邊的例子:
    const (
        a = iota
        b = iota
    )
    當我第一次給a賦值的時候a的值是0,當我第二次給b複製的時候b的值是1

    在此我特別說明一下string類型,這個類型是GO語言內置的類型,但是他和PHP是很不同的,因為在GO語言里string一旦賦值之後是不能更改的.
    看範例:
    var s string = "hello"
    s[0] = 'c'
    這麼做是不被允許的,另外string類型必須要用雙引號,而不能用單引號,因為單引號表示的是一個字符而非字符串,但是你卻可以給字符串用反引號,也就是我們在寫mysql語句的時候用的那個反引號,例如 SELECT * FROM `user` WHERE ...

    那如果我要修改string怎麼辦呢,看下邊的代碼:
    在 Go 中实现这个,需要下面的方法:
   

    s := "hello"            //給變量s賦值,類型是string
    c := []rune(s)            //把字符串s轉換成字符型的數組,rune是int32的別名
    c[0] = 'c'                //修改數組中的第一個元素的值
    s2 := string(c)            //把數組型的變量c轉換成字符串並重新賦值給s2這個變量
    fmt.Printf("%s\n", s2)    //輸出

     有點麻煩,至少比PHP麻煩得多.
   

    s := "這是" +
        "字符串串接"
    s := `其實
        還可以這樣寫,但是這樣寫會多出一個換行符

     除了上邊說的這些注意事項之外,另外GO有一些保留字是不可以用的,如下:
    break    default        func    interface    select
    case    defer        go        map            struct
    chan    else        goto    package        switch
    const    fallthrough if        range        type
    for        import        return    var            continue

    通過這篇文章不難發現,GO的類型其實不多,但功能卻並不弱,因為GO可以自定義類型,在這裡順便一提,在以後的文章里會有詳細說明.另外GO定義變量或常量的方法比較靈活,有很多種寫法,定義常量的時候要注意枚舉類型,定義變量的時候注意字符串這個很特別的類型即可,這就是所有的要點了.


希望轉載文章的朋友能夠留一個文章出處,http://see7di.cnblogs.com 在此感激不盡!

剛成立了一個QQ群,有興趣討論GO語言的朋友可以加入:195112

相关文章:

  • 写给ITpro同路人的十条建议
  • 在windows中安装Oracle 11g R2 数据库
  • Batch containing 11 record(s) expired due to timeout while requesting metadata
  • Drawable与Bitmap(转)
  • 依旧
  • SpringBoot Druid整合,SpringBoot 集成Druid
  • Exchange 2013 DAG报错“The fully qualified domain name for node “DAG” could notbefound”解决方法...
  • 20165211 2017-2018-2 《Java程序设计》第6周学习总结
  • Cocos2d-JS: 2.编译到安卓和iOS
  • CentOS程序包管理、下
  • Linux-RedHat 9.0 安装-总结
  • 用户登陆
  • 【OCM】Exam Souvenir 20140825
  • ThinkPHP5下自己写日志
  • javascript验证键盘keycode
  • 【159天】尚学堂高琪Java300集视频精华笔记(128)
  • 【391天】每日项目总结系列128(2018.03.03)
  • 【Linux系统编程】快速查找errno错误码信息
  • canvas 绘制双线技巧
  • golang 发送GET和POST示例
  • Markdown 语法简单说明
  • maven工程打包jar以及java jar命令的classpath使用
  • npx命令介绍
  • react-native 安卓真机环境搭建
  • Sequelize 中文文档 v4 - Getting started - 入门
  • SSH 免密登录
  • vue总结
  • 简单实现一个textarea自适应高度
  • 前端每日实战:70# 视频演示如何用纯 CSS 创作一只徘徊的果冻怪兽
  • 前端相关框架总和
  • 突破自己的技术思维
  • 微信如何实现自动跳转到用其他浏览器打开指定页面下载APP
  • 一个JAVA程序员成长之路分享
  • 用mpvue开发微信小程序
  • 用quicker-worker.js轻松跑一个大数据遍历
  • 鱼骨图 - 如何绘制?
  • 阿里云移动端播放器高级功能介绍
  • 大数据全解:定义、价值及挑战
  • 机器人开始自主学习,是人类福祉,还是定时炸弹? ...
  • 移动端高清、多屏适配方案
  • ​【C语言】长篇详解,字符系列篇3-----strstr,strtok,strerror字符串函数的使用【图文详解​】
  • #14vue3生成表单并跳转到外部地址的方式
  • #在 README.md 中生成项目目录结构
  • (12)Linux 常见的三种进程状态
  • (2)关于RabbitMq 的 Topic Exchange 主题交换机
  • (二)丶RabbitMQ的六大核心
  • (亲测有效)解决windows11无法使用1500000波特率的问题
  • (转)Oracle存储过程编写经验和优化措施
  • (转)利用ant在Mac 下自动化打包签名Android程序
  • (转)利用PHP的debug_backtrace函数,实现PHP文件权限管理、动态加载 【反射】...
  • (转载)利用webkit抓取动态网页和链接
  • . ./ bash dash source 这五种执行shell脚本方式 区别
  • .babyk勒索病毒解析:恶意更新如何威胁您的数据安全
  • .helper勒索病毒的最新威胁:如何恢复您的数据?
  • .MSSQLSERVER 导入导出 命令集--堪称经典,值得借鉴!