赞
踩
本文为Go语言中指针定义和示例及不支持语法汇总。
目录
Go语言也有指针,结构体成员调用时,obj.name
Go语言在使用指针时,会使用内容的垃圾回收机制(gc: garbage collector),
开发人员不需要手动释放内存
Go语言可以返回栈上的指针,程序会在编译的时候就确定了变量的分配位置;
编译的时候,如果发现有必要的话,就将变量分配到堆上。
定义一个变量,然后把它的指针赋值给另一个变量。
示例如下:
- package main
-
- import "fmt"
-
- func main() {
- name := "lisi"
- ptr := &name
- fmt.Println("name:", *ptr)
- fmt.Println("name ptr:", ptr)
- }
运行结果:
- name: lisi
-
- name ptr: 0xc000020070
还可以使用关键字new来进行指针的定义。
示例如下:
- name2Ptr := new(string)
- *name2Ptr = "Miko"
- fmt.Println("name2:", *name2Ptr)
- fmt.Println("name2 ptr:", name2Ptr)
定义一个函数,返回一个string类型的指针,go语言返回写在参数列表后面。
可以返回栈上的指针,编译器在编译程序时,
会自动判断这段代码,将city变量分配在堆上。
示例如下:
- package main
-
- import "fmt"
-
- func main() {
- // 可以返回栈上的指针,编译器在编译程序时,会自动判断这段代码,将city变量分配在堆上
- res := testPtr()
- fmt.Println("res city:", *res, ", address:", res)
- }
-
- // 定义一个函数,返回一个string类型的指针,go语言返回写在参数列表后面
- func testPtr() *string {
- city := "河北"
- ptr := &city
- return ptr
- }
空指针,在C语言:null;go:nil。
示例如下:
- // if 与php 不同在于if没有小括号,即使只有一行也必须{}
- if res == nil {
- fmt.Println("name 是空, nil")
- } else {
- fmt.Println("name 是非空")
- }
1.自增--i, ++i不支持
2.不支持地址加减
3.不支持三目运算符?:
4.只有false才能代码逻辑假,数字0和nil不能
示例如下:
- package main
-
- import "fmt"
-
- func main() {
- //if 0 {
- // fmt.Println("不能使用0判断假")
- //}
- //if nil {
- // fmt.Println("不能使用nil判断假")
- //}
- if false {
- fmt.Println("这是假的情况")
- }
- if true {
- fmt.Println("这是真的情况")
- }
-
- // 不支持使用三目运算符
- //a, b := 1, 2
- //f := a > b ? 1:0
- }
本文为Go语言中指针定义和示例及不支持语法汇总。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。