golang 基础语法 第一篇

103 阅读2分钟

本文已参与「新人创作礼」活动,一起开启掘金创作之路。

1. 变量定义

package main
​
import "fmt" //goland会帮我们自动导入程序中使用的包func main() {
    //变量定义: var
    //常量定义: const//01-先定义变量,再赋值 var 变量名 数据类型
    var name string
    name = "duke" //Ctrl + Alt +l 可以快速格式化代码var age int
    age = 20
​
    fmt.Println("name:", name)
    fmt.Printf("name is :%s, %d\n", name, age)
​
    //02 定义时直接赋值
    var gender = "man"
    fmt.Println("gender:", gender)
​
    //03 定义直接赋值,使用自动推导 (最常用的)
    address := "北京"
    fmt.Println("address:", address)
​
    //灰色部分表示形参
    test(10, "str")
​
    //04-平行赋值
    i, j := 10, 20 //同时定义两个变量
    fmt.Println("变换前==》 i:", i, ", j:", j)
​
    i, j = j, i
    fmt.Println("变换后==》i:", i, ", j:", j)
​
}
​
func test(a int, b string) {
    fmt.Println(a)
    fmt.Println(b)
}
​

1585881281278.png

基础数据类型:

int,int8 int16, int32, int64
uint8 ... uint64float32
float64true/false

2. 自增语法

c语言:i++, i--, --i, ++i

go语言:i++, i--, 没有--i,++i, 自增语法必须单独一行

package main
​
import "fmt"func main() {
    i := 20
    i++
    //++i //这个也是错的, 语义更加明确
    //fmt.Println("i:", i++)  //这是错误的,不允许和其他代码放在一起,必须单独一行
    fmt.Println("i:", i)
​
}
​

3. 指针

package main
​
import "fmt"func main() {
    //go语义也有指针
    //结构体成员调用时:   c语言:   ptr->name  go语言:  ptr.name
    //go语言在使用指针时,会使用内部的垃圾回收机制(gc : garbage collector),开发人员不需要手动释放内存
    //c语言不允许返回栈上的指针,go语言可以返回栈上的指针,程序会在编译的时候就确定了变量的分配位置:
    //编译的时候,如果发现有必要的话,就将变量分配到堆上
​
    name := "lily"
    ptr := &name
    fmt.Println("name:", *ptr)
    fmt.Println("name ptr:", ptr)
​
    //02-使用new关键字定义
    name2Ptr := new(string)
    *name2Ptr = "Duke"
​
    fmt.Println("name2:", *name2Ptr)
    fmt.Println("name2 ptr:", name2Ptr)
​
    //可以返回栈上的指针,编译器在编译程序时,会自动判断这段代码,将city变量分配在堆上
    res := testPtr()
    fmt.Println("res city :", *res, ", address:", res)
    
    //空指针,在c语言: null, c++: nullptr,go: nil//if两端不用加()
    //即使有一行代码,也必须使用{}
    if res == nil {
        fmt.Println("res 是空,nil")
    } else {
        fmt.Println("res 是非空")
    }
​
}
​
//定义一个函数,返回一个string类型的指针, go语言返回写在参数列表后面
func testPtr() *string {
    city := "深圳"
    ptr := &city
    return ptr
}
​

4. 不支持的语法汇总

  1. 自增--i, ++i不支持
  2. 不支持地址加减
  3. 不支持三目运算符 ? :
  4. 只有false才能代码逻辑假,数字0和nil不能(只有false/true才能表示逻辑真假,数字不能代表逻辑值)
package main
​
import "fmt"func main() {
    //if 0 {
    //  fmt.Println("hello")
    //}//if nil {
    //  fmt.Println("hello")
    //}if true {
        fmt.Println("hello")
    }
​
    //a, b := 1, 2
    //x := a > b ? 0:-1
}