Go基础语法

package main

import "fmt"
func main(){
    fmt.Println("Hello world")
}

注意点:

  • 花括号的左侧"{"不能另起一行,否则编译错误
  • if...else语句中的else必须和if的"}"在同一行,否则编译错误
  • 必须在源文件中非注释的第一行声明包名,如package main
  • main()函数是每一个可执行程序所必须包含的,一般来说都是在启动后第一个执行的函数
  • 声明变量必须使用,否则编译错误

Go数据类型

 Go 基本数据类型 go

SRE实战 互联网时代守护先锋,助力企业售后服务体系运筹帷幄!一键直达领取阿里云限量特价优惠。

整型

整型分为两位,有符号无符号两种类型

有符号类型可以存储任何整数,无符号类型只能存储自然数

在保证程序正确运行下,尽量使用占用空间小的数据类型

fmt.Printf("%T", var_name)输出变量类型

unsafe.Sizeof(var_name)查看变量占用字节

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

浮点型

浮点型也就是小数类型,可以存放小数。比如6.6,-12.34

  1. 关于浮点数在机器中存放形式的简单说明,浮点数=符号位+指数位+尾数位
  2. 尾数部分可能丢失,造成精度损失。-123.0000901
  3. golang的浮点型默认为float64类型,因为它比float32更精确
类型 描述
float32 IEEE-754 32位浮点型数
float64 IEEE-754 64位浮点型数
complex64 32 位实数和虚数
complex128 64 位实数和虚数

字符和字符串

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

Go语言的字符使用UTF-8编码,英文字母占一个字符,汉字占三个字符。字符可以进行运算,也就是对应的ascii相加

package main
import "fmt"
func main(){
    // 单引号内只能包裹单个字符
    c  := 'a'  // <==> var c byte = 'a'
    str := "yven" // <==> var str string = "yven"
    
    fmt.Printf("c : %v\n",c) //打印的是字符a对应的ascii码值
    fmt.Printf("c : %c\n",c) //打印c : a
    fmt.Printf("str : %v\n",str) // 打印 str : yven
}

字符串的两种标识形式

  • 双引号,会识别字符串中的转义字符
var str = "Yven \n law" //识别其中的换行符,并换行显示
  • 反引号,以字符串的原生形式输出,包括换号和特殊字符,可以实现防止攻击、输出源代码等
var str = `Yven \n lae` //原样输出

字符串拼接使用"+"

布尔型

布尔类型也叫bool类型,bool类型数据只允许取值true或false

bool类型占一个字节

使用与逻辑判断

指针

  • 基本数据类型,变量存的就是值,也叫值类型
  • 获取变量的地址,Go语言的取地址符是&,放到一个变量前使用就会返回相应变量的内存地址
  • 指针变量存的是一个地址,这个地址指向的空间存的才是值,如:
var num int = 10
var ptr *int = &int
  • 获取指针变量所指向的值,使用:* ,如:
//答应上方ptr对应的值
fmt.Println(*ptr)

详细请见:https://www.cnblogs.com/louyefeng/p/11316884.html

基本数据类型默认值

数据类型 默认值
整型 0
浮点型 0
字符串 ""
字符 0

基本数据类型互相转换

Go在不同类型的变量之间需要显式转换,也就是Go的数据类型不能自动转换。

var num1 int = 777
var num2 float64 = float64(num1)
var num3 uint8 = uint8(num2)
fmt.Println(num1,num2,num3)

注意点:

  • Go数据类型的转换可以是范围小转到范围大,也可以是范围大转到范围小。
  • 被转换的是变量存储的数据,变量本身的数据类型并没有变化

其他类型转string类型

方式一:

func Sprintf(format string,a ...interface{}) string

Sprintf根据format参数生成格式化的字符串并返回字符串。

var num1 int = 99;
var num2 float64 = 23.456
var isTrue bool = true 
var char byte = 'A'

var str string

str = fmt.Sprintf("%d", num1)
fmt.Printf("str类型为 %T str = %q\n",str, str)

str = fmt.Sprintf("%f", num2)
fmt.Printf("str类型为 %T str = %q\n",str, str)

str = fmt.Sprintf("%t", isTrue)
fmt.Printf("str类型为 %T str = %q\n",str, str)

str = fmt.Sprintf("%d", char)
fmt.Printf("str类型为 %T str = %q\n",str, str)

输出结果为

str类型为 string str = "99"
str类型为 string str = "23.456000"
str类型为 string str = "true"
str类型为 string str = "65"

方式二:

使用strconv包的函数

var num1 int = 99;
var num2 float64 = 23.456
var isTrue bool = true 

var str string
str = strconv.FormatInt(int64(num1), 10)
str = strconv.Itoa(num1)
fmt.Printf("str类型为 %T str = %q\n",str, str)

str = strconv.FormatFloat(num2, 'f', 10, 64)
fmt.Printf("str类型为 %T str = %q\n",str, str)

str = strconv.FormatBool(isTrue)
fmt.Printf("str类型为 %T str = %q\n",str, str)

输出结果:

str类型为 string str = "99"
str类型为 string str = "23.4560000000"
str类型为 string str = "true"

string类型转其他类型

使用strconv包的函数

package main

import (
    "fmt"
    "strconv"
)

func main() {
    
    var str string = "true"
    var str1 string = "123456"
    var str2 string = "123.456"

    var isTrue bool
    var num int64
    var num2 float64

    isTrue, _ = strconv.ParseBool(str)
    fmt.Printf("str类型为 %T str = %v\n",isTrue, isTrue)

    num, _ = strconv.ParseInt(str1, 10, 64)
    fmt.Printf("str类型为 %T str = %v\n",num, num)

    num2, _ = strconv.ParseFloat(str2, 64)
    fmt.Printf("str类型为 %T str = %v\n",num2, num2) 

}

输出结果为:

str类型为 bool str = true
str类型为 int64 str = 123456
str类型为 float64 str = 123.456
扫码关注我们
微信号:SRE实战
拒绝背锅 运筹帷幄