golang:基础知识(代码片段)

保暖大裤衩LeoLee 保暖大裤衩LeoLee     2022-12-27     265

关键词:

值类型和引用类型

  • 值类型:基本数据类型(int、uint、float、bool、string)、数组以及结构体struct

    • 变量直接存储值,内存通常在栈中分配(也有例外的情况,姑且先这么理解)
  • 引用类型:指针pointer、切片slice、map、管道chan、interface等都是引用类型

    • 变量存储的是一个地址,这个地址对应的内存空间才真正存储数据,内存通常在堆上分配,当没有任何变量引用这个地址时,该地址对应的数据空间便成为了一个垃圾,需要由GC回收。

    如下代码和图片为基本数据类型引用类型内存布局

    //基本数据类型的内存布局
    var i8 int8 = 10
    //i的内存地址
    fmt.Printf("i8的内存地址:%v,&i8的类型:%T\\n", &i8, &i8)
    var ptr *int8 = &i8
    fmt.Printf("ptr的值:%v,ptr的内存地址:%v,ptr的类型:%T\\n", ptr, &ptr, ptr)
    //根据指针类型获取真正的值,使用*来获取
    fmt.Printf("real value:%d\\n", *ptr)
    //通过指针来访问、修改指向的内存空间
    *ptr = 11
    fmt.Printf("i8=%d\\n", i8)

 

标识符的基本使用

基本概念

Golang对各种变量、方法、函数等命名时使用的字符序列称为标识符

凡是可以自己命名的地方都可以叫标识符,如:var num int、var str string中的num和str。

标识符的命名规则

  1. 由26个英文字母的大小写、0-9以及下划线“_”组成

  2. 数字不可以开头

  3. Golang中严格区分大小写,var num与var Num是声明了两个不同的变量

  4. 标识符不能包含空格

  5. 下划线“_”本身在Go中时一个特殊的标识符,可以代表任何其他的标识符,但是它对应的值会被忽略,所以仅能被称为占位符使用,不能作为严格意义上的标识符使用

    如下:

    str2 := "12312414"
    num4, _ := strconv.ParseInt(str2, 10, 32)

    下划线“_”作为占位符代表了error的返回值,只不过忽略了该返回值。

 标识符命名规范

  1. 包名:保持package名称和当前.go文件所在目录名称一致,尽量采用简短、有意义的包名,不要和标准库包名冲突。
  2. 使用驼峰命令法
  3. Golang中没有访问权限关键字(Java中使用public、default、protected、private),如果变量名、函数名、常量名首字母大写,那么就可以被其他包访问(public),如果首字母小写,则只能在本包中使用(private)

Golang中的进制

  • 二进制

    • 在Golang中,不能直接使用二进制来表示一个整数,它沿用了C的特点,需要使用 %b 来格式化
  • 八进制

    var x int8 = 012
    fmt.Printf("x=%d", x)
    //输出
    //x=10
  • 十六进制

    var y int8 = 0x11
    fmt.Printf("y=%d\\n", y)
    //输出
    //y=17

运算符

与其他语言一样,Golang中也有如下类型的运算符

  1. 算数运算符:+ - * / % ++ --等

    需要特别注意:

    //算数运算符中需要特别注意除法,与Java一样,此处结果为2,省略了小数部分
    fmt.Println("10/4 = ", 10/4)
    //Java中float f = 10/4;f的结果是2.0,与Java一样,都不会是2.5,Golang中结果是2.000000
    var f float32 = 10 / 4
    fmt.Printf("10/4 = %f\\n", f)
    //想要输出预期的小数,需要保证有浮点类型参与运算
    fmt.Printf("10/4 = %g\\n", 10.0/4)
    fmt.Printf("10/4 = %g\\n", 10/4.0)
    fmt.Printf("10/4 = %g\\n", float32(10)/4)
    //++ --在Golang中只能独立使用,否则编译报错
    var i8 int8 = 2
    //不能直接使用 a := i8++
    i8++
    a := i8
    fmt.Printf("a=%d\\n", a)
    //在Golang中没有 ++i --i
    //甚至在if中都不可以使用
    /*if i8++ > 0 
    	// do something
    */
  2. 赋值运算符:+= -= *= /= %=

    //多重赋值
    var c = 20
    var b = 30
    c, b = b, c
    fmt.Printf("c=%d, b=%d\\n",c ,b)
  3. 比较运算符:== != > < >= <= <<= >>= &= ^= |=

  4. 逻辑运算符:&& || !

  5. 位运算:& | ^ << >>

  6. 其他运算符:&(取指运算符)、*(取值运算符)

    var i8 int8 = 10
    //i的内存地址
    fmt.Printf("i8的内存地址:%v,&i8的类型:%T\\n", &i8, &i8)
    var ptr *int8 = &i8
    fmt.Printf("ptr的值:%v,ptr的内存地址:%v,ptr的类型:%T\\n", ptr, &ptr, ptr)
    //根据指针类型获取真正的值,使用*来获取
    fmt.Printf("real value:%d\\n", *ptr)
    //通过指针来访问、修改指向的内存空间
    *ptr = 11
    fmt.Printf("i8=%d\\n", i8)
  7. Golang没有三元运算符,需要使用if else代替

golang之基础使用(代码片段)

  golang常用操作与命令 1.执行golang文件gorunhello_world.go 2.编译成可执行文件gobuildhello_world则会生成hello_world可执行文件,即可直接运行./hello_world  查看详情

golang基础(代码片段)

Go语言基础关键字break,default,func,interface,selectcase,defer,go,map,structchan,else,goto,package,switchconst,fallthrough,if,range,typecontinue,for,import,return,var定义变量varvariablenametype=valuevarvname1,vna 查看详情

golang基础练习(代码片段)

//遍历mappackagemainimport"fmt"funcmain()x:=make(map[string]int)x["zhangsan"]=3x["lisi"]=4x["wangwu"]=5//#丢弃值fori,_:=rangexfmt.Println(i)//匿名函数packagemainimport"fmt"funcmain()f:=func(x,yint)intret 查看详情

golang学习笔记1——基础知识(代码片段)

golang变量的声明声明变量有两种方式:使用var声明变量//声明一个整型数据varaint//声明一个字符串varsstring//声明一个浮点数组varc[2]float32//声明一个函数vardfunc(int)bool//声明一个结构体varestruct xint使用:=声明变量并赋值例如&#x... 查看详情

golang基础归纳(代码片段)

1.hello-worldpackagemainimport"fmt"funcmain()fmt.Println("Helloworld,GoGo!");fmt.Printf("typeofHellois%T\n","Hello")packagemain--每一个Go文件都应该在开头进行packagename的声明(注:只有可执行程序的包名为main)。包用于代码的封装与重用,这里包名为mai 查看详情

golang:基础知识(代码片段)

值类型和引用类型值类型:基本数据类型(int、uint、float、bool、string)、数组以及结构体struct变量直接存储值,内存通常在栈中分配(也有例外的情况,姑且先这么理解)引用类型:指针pointer、切... 查看详情

万字golang基础知识(肝爆三天三夜,手撕golang基本语法结构)(代码片段)

Golang基础知识1初识Golang1.1Go的语法要求1.1.1token1.2变量和常量变量常量1.3基本数据类型1.3.1布尔类型1.3.2整型1.3.3浮点型1.3.4复数类型1.3.5字符串1.3.6rune类型1.4复合数据类型1.4.1指针1.4.2数组1.4.3切片1.4.4map1.4.5struct1.5控制语句1.5.1if语... 查看详情

golang基础-chain的使用rangeselect(代码片段)

文章目录chan基础使用range获取select多队列chan基础使用我们直接来看代码packagemainimport( "fmt" "time")varmessage=make(chanstring)funcgo1() message<-"hello1" message<-"hello2" message&l 查看详情

golang:gotest(代码片段)

目录一、功能测试1.0知识点1.1代码1.2执行及结果二、性能测试2.0知识点2.1代码2.2运行及结果三、TestMain3.0知识点3.1代码3.2运行及结果一、功能测试1.0知识点funcTestXXX(t*testing.T)gotest-v1.1代码文件:MyTest.gopackagemainimport("fmt")f... 查看详情

golang基础——map数组切片存放不同类型的数据(代码片段)

基础知识,不解释,直接看代码packagemainimport( "fmt")typeUserstruct IDstring Namestring Ageintfuncmain() fmt.Println("-------------------map-------------------------") data:=map[st 查看详情

golang基础——map数组切片存放不同类型的数据(代码片段)

基础知识,不解释,直接看代码packagemainimport( "fmt")typeUserstruct IDstring Namestring Ageintfuncmain() fmt.Println("-------------------map-------------------------") data:=map[st 查看详情

golang核心编程(代码片段)

文章目录一、基础知识:1.语言简介:1.2语言特性:1.3Go语言特性:2.初识Go程序:3.Go词法单元:3.1token:3.2标识符:3.3操作符和分隔符:3.4字面常量3.5总结:4.变量与常量:4.1变量:4.1.1声明方式:4.1.2变量属性:4.2常量:5.基本数据类型:5.1布尔类型:5.2... 查看详情

golang基础-排序sort(代码片段)

文章目录简单排序查询自定义排序结构体类型的排序(一)结构体类型的排序(二)简单排序基本类型int、float64、string的排序[]int、[]float64、[]string排序 intList:=[]int2,4,3,5,7 float8List:=[]float644.2,5.9,12.3,10.0 stringList:=[]string"a", 查看详情

golang基础之数组(代码片段)

文章转载请注明出处www.leexide.com希望每一位寻求转载的朋友都能够按照要求进行,鼓励原创,尊重原创。微信公众号:DevOps运维运营之家QQ号码:1045884038E-mail:[email protected]如有问题或建议,请关注微信公众号1数组介绍数组... 查看详情

golang简明入门进阶指南01golang基础变量函数条件控制(代码片段)

说明本文目的:学习golang必须掌握的基本语法和概念前置条件:搭建号golang环境并输出helloworld一、变量和常量这部分要分清golang语言的优势特性1.1变量声明名称在前,类型在后,重点突出变量声明既有初值,... 查看详情

golang✔️走进go语言✔️第二课语法基础(代码片段)

【Golang】✔️走进Go语言✔️第二课语法基础概述Go语法基础关键字标识符数据类型变量声明多变量声明值类型和引用类型概述Golang是一个跨平台的新生编程语言.今天小白就带大家一起携手走进Golang的世界.(第2课)Go语法基础Go程... 查看详情

golang的一些基础数据类型转换(代码片段)

int--string//string到intvalue_int,err:=strconv.Atoi(string)//int到stringstr:=strconv.Itoa(value_int) int64--string//string到int64value_int64,err:=strconv.ParseInt(string,10,64)//int64到string,需注意下面转换 查看详情

golang基础——数据类型(代码片段)

1、数据类型1)基本类型数字整数类型:int8、int16、int32、int64、unit8、unit16、unit32、unit64浮点类型:float32、float64其他数字类型int:32或64位uint:32或64位byte:uint8的类型别名rune:int32的类型别名 uintptr:无符号整型,用于... 查看详情