• 学习Golang基础


    安装

    https://golang.google.cn/dl/

    测试安装成功go version, 查看当前安装的版本

    (base) ➜  Golang go version
    go version go1.15.6 darwin/amd64
    

    Hello World

    vi hello.go创建一个后缀为go的文件, 内容如下

    package main  //包名 
    
    import "fmt"  // go常见的一个包,实现了格式化IO, 输入和输出函数
    
    func main() { // {不能换行
      fmt.Println("hello, world!") //打印一条hello world!
    }
    

    注意:

    • 源文件中非注释的第一行指明这个文件属于哪个包
    • main 函数是每一个可执行程序所必须包含的
    • 注释和Java类似, /*...*/ 和 //
    • 当标识符(包括常量、变量、类型、函数名、结构字段等等)以一个大写字母开头可以被外部代码所用, 如果是小写是对外不可见,但是内部可用。
    • { 不能单独放在一行

    运行go run hello.go

    hello, world!
    
    

    编译成二进制文件go build hello.go

    基础语法

    标识符: 和python类似。用来命名变量、类型等程序实体。一个标识符实际上就是一个或是多个字母(AZ和az)数字(0~9)、下划线_组成的序列,但是第一个字符必须是字母或下划线而不能是数字

    数据类型

    • 布尔类型 true 和false
    • 数字类型 int float32 float64
    • 字符串 Go 的字符串是由单个字节连接起来的。Go 语言的字符串的字节使用 UTF-8 编码标识 Unicode 文本。
    • 派生类型:
      (a) 指针类型(Pointer)
      (b) 数组类型
      (c) 结构化类型(struct)
      (d) Channel 类型
      (e) 函数类型
      (f) 切片类型
      (g) 接口类型(interface)
      (h) Map 类型

    变量

    声明的用法是
    var variable type.

    • 如果没有指定, 默认值为0, var zero_1 int, 这里的zero_1就是0
    • 第二种,根据值自行判定变量类型。var string_1 = "this is string", 这里的string_1就是string类型
    • 第三种,省略 var, 注意 := 左侧如果没有声明新的变量,就产生编译错误,格式:v_name := value

    多个变量声明和单个类似。一般用于声明全局变量

    var (
      a int
      b bool
    )
    

    交互值: a, b = b, a,两个变量的类型必须是相同。

    空白标识符 _ 也被用于抛弃值,如值 5 在:_, b = 5, 7 中被抛弃。

    常量

    常量中的数据类型只可以是布尔型、数字型(整数型、浮点型和复数)和字符串型。定义格式
    const identifier [type] = value

    • 显式类型定义: const b string = "abc"
    • 隐式类型定义: const b = "abc"

    常量可以用len(), cap(), unsafe.Sizeof()函数计算表达式的值。

    iota,特殊常量,可以认为是一个可以被编译器修改的常量。

    const (
        a = iota
        b //1
        c //2
    )
    

    运算符

    运算符用于在程序运行时执行数学或逻辑运算。

    • 算术运算符 + - * / % ++ --
    • 关系运算符 == != > < <= >=
    • 逻辑运算符 && || !
    • 位运算符 & | ^ << >>
    • 赋值运算符 = += -= *= /= %= <<= >>= &= ^= |=
    • 其他运算符 & 返回地址 * 指针变量

    条件语句

    • if else (else if)
    • switch
    • select select 语句类似于 switch 语句,但是select会随机执行一个可运行的case。

    注意:Go 没有三目运算符,所以不支持 ?: 形式的条件判断。

    环循

    for 循环

    • break 语句 经常用于中断当前 for 循环或跳出 switch 语句
    • continue 语句 跳过当前循环的剩余语句,然后继续进行下一轮循环。
    • goto 语句 将控制转移到被标记的语句。

    函数

    Go 语言最少有个 main() 函数。函数声明告诉了编译器函数的名称,返回类型,和参数。

    如何定义

    func function_name( [parameter list] ) [return_types] {
       函数体
    }
    

    调用方式和Python的一致。

    数组和指针

    数组如何定义和声明,
    var variable_name [SIZE] variable_type
    。初始化一个数组,var list_1 = [4]int{1,23,4,5}

    有不指定大小来初始化一个list,var list_1 = [...]int{1,23,4,5}

    Go 语言中使用指针可以更简单的执行一些任务。变量是一种使用方便的占位符,用于引用计算机内存地址. 声明方式
    var var_name *var-type,在指针类型前面加上 * 号(前缀)来获取指针所指向的内容

    package main
    
    import "fmt"
    
    func main() {
    	var a int = 10 //声明实际变量
    	var ip *int // 声明指针变量
    	ip = &a // 指针变量的存储地址
    	fmt.Println(&a)
    	fmt.Println(ip)
    	fmt.Println(*ip) // 用指针访问值
    }
    

    结构体

    如何定义个结构体,

    type struct_variable_type struct {
       member definition
       member definition
       ...
       member definition
    }
    

    一旦定义了结构体类型,它就能用于变量的声明,语法格式如下:

    variable_name := structure_variable_type {value1, value2...valuen}
    或
    variable_name := structure_variable_type { key1: value1, key2: value2..., keyn: valuen}
    

    比如下面的列子

    package main
    
    import "fmt"
    
    func main() {
    	type books struct {
    	title 	string
    	author 	string
    	price 	float32
    	id	int
    	}
    	fmt.Println(books{"title", "author", 12.22, 1})
    	fmt.Println(books{title: "书名", price:12.44})
    }
    

    readmore

    https://play-with-go.dev/guides.html

    https://www.runoob.com/go/go-basic-syntax.html

    github博客
    微信公众号:chasays, 欢迎关注一起吹牛逼,也可以加微信号「xxd_0225」互吹。


    作者:叉叉敌
    博客:https://chasays.github.io/
    微信公众号:Chasays, 欢迎关注一起吹牛逼,也可以加个人微信号「xxd_0225」互吹。
    本博客大多为学习笔记或读书笔记,本文如对您有帮助,还请多推荐下此文,如有错误欢迎指正,相互学习,共同进步。

  • 相关阅读:
    Equivalent Sets HDU
    Chemical table CFR500 div2D(并查集)
    How do I create an installation log?
    Error 1937.An error occurred during the installation of assembly...
    InstallShield 版本转换
    Convert CString to TCHAR
    InstallShield : 如何查找编译后的 Merge Module存放路径
    Msi.h causes compilation error in vs2010
    区间调度(贪心)
    硬币问题(贪心)
  • 原文地址:https://www.cnblogs.com/ievjai/p/14381895.html
Copyright © 2020-2023  润新知