贺胖娇的编程之旅......

(2)go基础学习-基本使用

2021.08.27

参考文档:
go文档
Go 语言教程

简单的go语言程序

package main

import "fmt"

func main() {
    var age, name string = "18", "Joe"
    var res = fmt.Sprintf("my name is %s, and my age is %s", name, age)
    fmt.Println(res)
}

func init() {
    fmt.Println("test init")
}

func varTest() {
    var funcName, funcTime string = "varTest", "now"
    fmt.Println(funcName + funcTime)
}

使用go run来执行
使用go build 来生成二进制文件

go语言结构

go语言的基础组成部分如下:

包声明

示例

package main

解释

第一行代码 package main 定义了包名。 必须在源文件中非注释的第一行指明这个文件属于哪个包,如:package main。 package main表示一个可独立执行的程序,每个 Go 应用程序都包含一个名为 main 的包

引入包

import "fmt"

import “fmt” 告诉 Go 编译器这个程序需要使用 fmt 包(的函数,或其他元素),fmt 包实现了格式化 IO(输入/输出)的函数。

函数

func main() {
  fmt.Println("")
}

”{“不能单独放在一行
func main() 是程序开始执行的函数。 main 函数是每一个可执行程序所必须包含的,一般来说都是在启动后第一个执行的函数(如果有 init() 函数则会先执行该函数)

变量

var name = 'Test Name'

语句 & 表达式

%d 表示整型数字,%s 表示字符串

var target_url=fmt.Sprintf(url,stockcode,enddate)
fmt.Println(target_url)

注释

// 是注释,在程序执行时将被忽略。 单行注释是最常见的注释形式,你可以在任何地方使用以 // 开头的单行注释。 多行注释也叫块注释,均已以 /* 开头,并以 */ 结尾,且不可以嵌套使用,多行注释一般用于包的文档描述或注释成块的代码片段

标识符

当标识符(包括常量、变量、类型、函数名、结构字段等等)以一个大写字母开头,如:Group1, 那么使用这种形式的标识符的对象就可以被外部包的代码所使用(客户端程序需要先导入这个包), 这被称为导出(像面向对象语言中的 public);标识符如果以小写字母开头,则对包外是不可见的,但是他们在整个包的内部是可见并且可用的(像面向对象语言中的 protected )

数据类型

布尔型

布尔型的值只可以是常量 true 或者 false

数字类型

整型 int 和浮点型 float32、float64,Go 语言支持整型和浮点型数字,并且支持复数,其中位的运算采用补码。

类型 描述
uint8 无符号 8 位整型 (0 到 255)
uint16 无符号 16 位整型 (0 到 65535)
uint32 无符号 32 位整型 (0 到 4294967295)
uint64 无符号 64 位整型 (0 到 18446744073709551615)
int8 有符号 8 位整型 (-128 到 127)
int16 有符号 16 位整型 (-32768 到 32767)
int32 有符号 32 位整型 (-2147483648 到 2147483647)
int64 有符号 64 位整型 (-9223372036854775808 到 9223372036854775807)

浮点型

类型 描述
float32 IEEE-754 32位浮点型数
float64 IEEE-754 64位浮点型数
complex64 32 位实数和虚数
complex128 64 位实数和虚数

其他数字类型

类型 描述
byte 类似 uint8
rune 类似 int32
uint 32 或 64 位
int 与 uint 一样大小
uintptr 无符号整型,用于存放一个指针

字符串类型

字符串就是一串固定长度的字符连接起来的字符序列。 Go 的字符串是由单个字节连接起来的。Go 语言的字符串的字节使用 UTF-8 编码标识 Unicode 文本。

派生类型

(a) 指针类型(Pointer)
(b) 数组类型
(c) 结构化类型(struct)
(d) Channel 类型
(e) 函数类型
(f) 切片类型
(g) 接口类型(interface)
(h) Map 类型

go语言变量

一般使用var关键字声明变量:

var identifier type

可以同时声明多个变量:

var identifier1, identifier2 type

变量声明时如果没有设置默认值,那么默认值为0,string类型的默认值为空 如果一个局部变量声明了但是没有使用,会报编译错误
全局变量允许声明但不使用
同一类型的多个变量可以声明在同一行
如果你想要交换两个变量的值,则可以简单地使用 a, b = b, a,两个变量的类型必须是相同。
_ 实际上是一个只写变量,你不能得到它的值。这样做是因为 Go 语言中你必须使用所有被声明的变量,但有时你并不需要使用从一个函数得到的所有返回值。

// 当变量已定义
var a, b int
var c string
a, b, c = 3, 4, "test"
//当变量未定义直接赋值
a, b, c := 3, 4, "test"

常量

定义格式:

const identifier [type] = value

多个相同类型的声明简写为:

const c_name1, c_name2 = value1, value2

常量还可用作枚举

const (
    Unknown = 0
    Female = 1
    Male = 2
)

iota

特殊常量,可以认为是一个可以被编辑器修改的变量,示例如下:

hexiaojiao@MS-RWTYITLHLCWO:~/goPro/goTest$ cat iotaTest.go
package main

import "fmt"

func main() {
    const (
        a = iota //iota
        b
        c
        d
        e = "tete"
        f
        g = 100
        h
        i
        j = iota
        k
        l
    )
    fmt.Println(a, b, c, d, e, f, g, h, i, j, k, l)
}
// 0 1 2 3 tete tete 100 100 100 9 10 11

特殊示例:

package main

import "fmt"
const (
    i=1<<iota
    j=3<<iota
    k
    l
)

func main() {
    fmt.Println("i=",i)
    fmt.Println("j=",j)
    fmt.Println("k=",k)
    fmt.Println("l=",l)
}
/**
i= 1
j= 6
k= 12
l= 24
解析:
i = 1 << 0
j = 3 << 1
k = 3 << 2
l = 3 << 3
**/
发表评论