`

go语言一——基础

 
阅读更多

参考《Go_web_编程.pdf》

See Also:

Go 语言简介(上)— 语法

Go 语言简介(下)— 特性

首先编写一个简单的脚本hello.go

/*
* 定义包名
*  main    表示可独立运行
*  [other] 编译生成.a文件
*/
package main
/*
* 引入系统级别包 fmt
*/
import "fmt"
// main.main 是每一个可执行程序的入口点
func main() {
        fmt.Printf("Hello, world or 你好,世界 or こんにちは世界\n")
}

运行方式如下:

> go run hello.go #直接运行脚本
Hello World
>
> go build hello.go #编译生成可执行文件或库文件
//generate hello
>
> go clean #删除

变量定义

package main
import "fmt"

// var vname type = value, 一般用var关键字定义全局变量
var g_val1 int32 = 100

//:= 赋值方式只能在函数体内用,不能用来创建全局变量
//g_val2 := 100


// 常量定义
const cint = 1
const cint2 int = 1
const cstr string = "hello"
const cstr2 = `hello` // 字符串用双引号或者反引号表示,不能用单引号

// 声明未使用全局变量编译运行不报错
var bval bool

func main(){
        fmt.Printf("Global g_val1 = %v\n",g_val1)

        // var vname1,vname2 type
        var l_val1, l_val2 float32 = 1.2, 2.3
        fmt.Printf("Local l_val1 = %v , l_val2 = %v\n",l_val1,l_val2)

        // vname1,vname2 := value1,value2
        l_val3, l_val4 := 2.3, 4
        fmt.Printf("Local l_val3 = %v , l_val4 = %v\n",l_val3,l_val4)

        // 声明未使用局部变量在编译阶段会报错
        //var l_val5 int
}

数据类型

package main

//分组声明
import(
        "fmt"
        "errors"
)

const(
        i = 0
        s = "测试"
)

func main(){

        //不同数据类型之间不能直接转换,尽管长度一样
        var(
                a int = 3
                b int32
                c rune = 4
        )
        b = a //error
        b = c //ok
        //cannot use a (type int) as type int32 in assignment

        //字符串拼接用"+"号
        name := "你" + "好"
        name = "世界"

        fmt.Printf("name = %v\n",name)
        //输出"世界"

        err := errors.New("自定义错误信息\n")
        if err != nil {
                fmt.Print(err)
                //输出 "自定义错误信息"
        }
}

Go 之所以会那么简洁,是因为它有一些默认的行为:
•大写字母开头的变量是可导出的,也就是其它包可以读取的,是公用变量;小写字母开头的就是不可导出的,是私有变量。
•大写字母开头的函数也是一样,相当于 class 中的带 public 关键词的公有函数;小写字母开头的就是有 private 关键词的私有函数

数组操作

package main

//分组声明
import(
    "fmt"
    //引用的包未使用时编译会出错
    //"errors"
)

func main(){

    //数组声明
    var arr [10] int
    arr[0] = 3
    fmt.Printf("arr[0] = %v and arr[4] = %v\n",arr[0],arr[4])
    //输出 3 和 0

    arr2 := [10]string{"name","age"}
    arr2[0] = "nickname"
    fmt.Printf("arr2[0] = %v and arr2[4] = %v\n",arr2[0],arr2[4])
    //输出 nickname 和 空

    //多维数组
    doubleArray := [2][4]int{[4]int{1,2,3,4},[4]int{5,6,7,8}}
    fmt.Printf("doubleArray[0][0] = %v\n",doubleArray[0][0])
    easyArray := [2][4]int{{1,2,3,4},{5,6,7,8}}
    fmt.Printf("easyArray[0][1] = %v\n",easyArray[0][1])

    arr3 := [5]int{1,3,5,7,9}
    //动态数组slice,定义时缺少长度
    var sarr1,sarr2 []int
    sarr1 = arr3[2:3] // sarr1 = {5}
    sarr2 = arr3[1:] // sarr2 = {3,5,7,9}
    fmt.Printf("sarr1[0] = %v\n",sarr1[0])
    fmt.Printf("sarr2[0] = %v\n",sarr2[0])
    
    fmt.Printf("len(sarr1) = %v\n",len(sarr1)) // 获取数组长度
    fmt.Printf("cap(sarr1) = %v\n",cap(sarr1)) // 获取数组最大个数

    sarr1 = append(sarr1,6) // 追加数据 sarr1 = {5,6}
    fmt.Printf("sarr1[1] = %v\n",sarr1[1])

    sarr2 = sarr2[:len(sarr2)-1] // 删除末尾元素
}

arr := []string{str1}

slice 有一些简便的操作
• slice 的默认开始位置是 0,ar[:n]等价于 ar[0:n]
• slice 的第二个序列默认是数组的长度,ar[n:]等价于 ar[n:len(ar)]
• 如果从一个数组里面直接获取 slice,可以这样 ar[:],因为默认第一个序列是 0,第二个是数组的长度,即等价于 ar[0:len(ar)]

package main

import(
        "fmt"
)

func main(){

        var (
                m_val1 map[string] string
        )
        //声明字典后需要调用make初始化
        m_val1 = make(map[string] string)
        m_val1["name"] = "ciaos"
        m_val1["hobby"] = "game"
        fmt.Printf("name is %v and hobby is %v\n",m_val1["name"],m_val1["hobby"])

        m_val2 := make(map[string] int)

        m_val2["first"] = 10
        fmt.Println("字典内容为:","first => ", m_val2["first"])
        // 输出 "字典内容为: first => 10"

        // 初始化一个字典
        m_val3 := map[string] int{"A":1,"B":2,"C":3}
        fmt.Println("length of m_val3 is",len(m_val3))

        // 获取指定key对应alue
        num,ok := m_val3["D"]
        if ok {
                fmt.Println("m_val3[\"D\"] is ",num)
        } else {
                fmt.Println("m_val3[\"D\"] is invalid")
        }

        delete(m_val3,"B")
}

使用 map 过程中需要注意的几点:
• map 是无序的,每次打印出来的 map 都会不一样,它不能通过 index 获取,而必须通过 key 获取
• map 的长度是不固定的,也就是和 slice 一样,也是一种引用类型内置的 len 函数同样适用于 map,返回 map 拥有的 key 的数量
• map 的值可以很方便的修改,通过 numbers["one"]=11 可以很容易的把 key 为 one的字典值改为 11
• map 的初始化可以通过 key:val 的方式初始化值,同时 map 内置有判断是否存在 key 的方式
make 用于内建类型(map、slice 和 channel)的内存分配。new 用于各种类型的内存分配

分享到:
评论

相关推荐

    《分布式对象存储——原理 架构及Go语言实现 》_胡世杰.zip

    总的来说,《分布式对象存储——原理 架构及Go语言实现》这本书全面地探讨了分布式对象存储的各个方面,从基础理论到实际开发,再到运维优化,对想深入理解这一领域的读者来说是一份宝贵的资源。

    Go 学习笔记——雨痕

    Go语言,又称Golang,是一种静态类型的编程语言,由Google开发,于2007年首次对外公布,并在2009年进行了开源。Go语言的设计哲学是简洁、快速和安全。它支持垃圾回收,具有类型系统和一些并发控制机制。 变量的定义...

    GO 语言学习辅导共220页.pdf

    然后,通过创建一个简单的Go语言应用程序——FIBONACCI数列,来展示LITEIDE的使用方法。这个示例项目包括了项目结构的建立,以及编写和运行计算斐波那契数列的代码,帮助读者实际操作,更好地理解和掌握Go语言的基本...

    Go语言实战 中文高清完整版本pdf

    Go语言,也被称为Golang,是由Google开发的一种静态类型的、编译型的、并发型的、垃圾回收的、强类型编程语言。它旨在提高开发效率,简化系统编程,并且特别适合构建网络服务和大规模分布式系统。Go语言实战这本书是...

    Golang基础教程:从零开始掌握Go语言.md

    Golang(Go语言)的基础知识,旨在帮助初学者从零开始掌握这门编程语言。内容涵盖了Go语言的背景与主要特点,如简洁性、并发性和高效性。教程从环境搭建开始,指导如何安装Go语言及配置开发环境。接着,介绍了Go语言...

    GaussianBlur for golang go 语言图像处理库——高斯模糊.zip

    对于有一定基础或热衷于研究的人来说,可以在这些基础代码上进行修改和扩展,实现其他功能。 【沟通交流】:有任何使用上的问题,欢迎随时与博主沟通,博主会及时解答。鼓励下载和使用,并欢迎大家互相学习,共同...

    Go语言的第一次亲密接触-Hello, Go!-Markdown文档.zip

    Go语言的第一次亲密接触——Hello, Go! 亲爱的编程爱好者们, 你是否厌倦了日复一日的重复工作,渴望寻找一种更高效、更简洁的编程语言来释放你的创造力?那么,不妨来尝试一下Go语言吧! 在这个飞速发展的互联网...

    Go语言高级编程 (Advanced Go Programming)

    对于刚学习Go语言的读者,建议先从《Go语言圣经》开始系统学习Go语言的基础知识。如果希望深入学习Go语言语法树结构,可以参考《Go语法树入门——开启自制编程语言和编译器之旅》。如果想从头实现一个玩具Go语言可以...

    重磅!《Go Web编程实战派从入门到精通》随书源码开源啦,Go语言-Web-goWebActualCombat.zip

    首先,Go语言,又称为Golang,是由Google开发的一种静态类型、编译型、并发型且具有垃圾回收功能的编程语言。它的设计目标是提高开发者的生产力和程序的运行效率,特别适合于构建高性能的网络服务和微服务架构。 在...

    Go语言教程 :go语言免费教程网站分享

    本文将详细介绍一个免费的Go语言教程网站——“编程网”,帮助读者深入了解Go语言的基础知识和进阶技巧。 #### 二、Go语言简介 Go语言是一种开源的编程语言,由Google公司的Robert Griesemer、Rob Pike及Ken ...

    Go教程小本本——从零单排Golang精编版.pdf

    Go语言,又称Golang,是一种开源的编程语言,由Google推出。其设计目标是实现简单、快速、可靠、高效的编程语言。Go语言具有垃圾回收、语言支持并发以及提供C语言级别的性能等特点。Go语言广泛应用于系统编程、网络...

    《Go语言高级编程》开源图书,主题CGO、Go独立语言、RPC实现、Protobuf插件实现、Web框架实现、遍布系统等高阶主题(完稿).zip

    对于刚学习Go语言的读者,首先建议从《Go语言圣经》开始系统学习Go语言的基础知识。如果想深入学习Go语言语法树结构,可以参考《Go语法树入门——开启自制编程语言和编译器之旅》。如果想深入学习Go语言语法树结构,...

    学习Go语言

    Go语言,也称为Golang,是由Google开发的一种开源编程语言。它旨在提供简洁、高效且易于学习的特性,适用于现代软件开发的需求。《学习Go语言》这本书由Miek Gieben编写,邢星翻译,是一份针对初学者的指南,内容...

    go语言学习笔记.zip

    Go语言,又称Golang,是Google在2009年推出的一种开源编程语言,由Robert Griesemer、Rob Pike及Ken Thompson设计。它的设计目标是简单、高效、可移植,并且具有良好的并发性能,适用于构建大规模的网络服务和分布式...

    Go语言基础教程:环境设置、语法、数据类型与并发编程

    此外,还深入解析了Go语言的独特特性之一——并发编程能力,重点讲述了goroutine与channel的工作原理及用法实例。 适用人群:适合初学者或者对Go语言感兴趣的开发者学习使用。 使用场景及目标:适用于想快速掌握Go...

    Source Insight go语言 解析文件 golang.xclf

    它支持多种编程语言,包括我们的主角——Go语言。Go语言,由Google开发,以其简洁、高效和并发特性而受到开发者们的喜爱。本文将深入探讨如何在Source Insight中配置和使用Go语言解析功能,以及解析文件`golang.xclf...

    go语言 win32 r60版本

    Go语言,也称为Golang,是由Google开发的一种静态类型的、编译式的、并发型且具有垃圾回收功能的编程语言。它的设计目标是提高开发效率,同时保持代码的简洁性和可读性。Go语言的语法部分借鉴了C语言,但在内存管理...

Global site tag (gtag.js) - Google Analytics